PDFBox - PDF 页面坐标系、PDF 页面尺寸获取、PDF 页面位置计算

一、PDF 页面坐标系

  • PDF 页面的原点 (0, 0) 位于页面的左下角,X 轴向右为正,Y 轴向上为正

二、PDF 页面尺寸获取

java 复制代码
PDPage page = new PDPage();

PDRectangle mediaBox = page.getMediaBox();

float width = mediaBox.getWidth();
float height = mediaBox.getHeight();

System.out.println("mediaBox: " + mediaBox);
System.out.println("width: " + width);
System.out.println("height: " + height);
复制代码
# 输出结果

mediaBox: [0.0,0.0,612.0,792.0]
width: 612.0
height: 792.0
java 复制代码
try (PDDocument document = PDDocument.load(new File("pdf/example.pdf"))) {
    PDPage page = document.getPage(0);

    PDRectangle mediaBox = page.getMediaBox();

    float width = mediaBox.getWidth();
    float height = mediaBox.getHeight();

    System.out.println("mediaBox: " + mediaBox);
    System.out.println("width: " + width);
    System.out.println("height: " + height);
} catch (Exception e) {
    e.printStackTrace();
}
复制代码
# 输出结果

mediaBox: [0.0,0.0,612.0,792.0]
width: 612.0
height: 792.0

三、PDF 页面位置计算

1、使图片位于 PDF 页面的左上角
java 复制代码
try (PDDocument document = new PDDocument()) {
    PDPage page = new PDPage();
    document.addPage(page);

    PDImageXObject pdImage = PDImageXObject.createFromFile("pdf/dzs.jpeg", document);

    try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {

        // 获取 PDF 页面的尺寸
        PDRectangle mediaBox = page.getMediaBox();
        float pdfWidth = mediaBox.getWidth();
        float pdfHeight = mediaBox.getHeight();

        // 获取图片的尺寸
        float imgWidth = pdImage.getWidth() * 0.25f;
        float imgHeight = pdImage.getHeight() * 0.25f;

        float x = 0;
        float y = pdfHeight - imgHeight;

        contentStream.drawImage(pdImage, x, y, imgWidth, imgHeight);
    } catch (IOException e) {
        e.printStackTrace();
    }

    document.save("pdf/image_position_example.pdf");
} catch (IOException e) {
    e.printStackTrace();
}
2、使图片位于 PDF 页面的左下角
java 复制代码
...

float x = 0;
float y = 0;

...
3、使图片位于 PDF 页面的右上角
java 复制代码
...

float x = pdfWidth - imgWidth;
float y = pdfHeight - imgHeight;

...
4、使图片位于 PDF 页面的右下角
java 复制代码
...

float x = pdfWidth - imgWidth;
float y = 0;

...
5、使图片靠左垂直居中
java 复制代码
...

float x = 0;
float y = (pdfHeight - imgHeight) / 2;

...
6、使图片靠右垂直居中
java 复制代码
...

float x = pdfWidth - imgWidth;
float y = (pdfHeight - imgHeight) / 2;

...
7、使图片靠上水平居中
java 复制代码
...

float x = (pdfWidth - imgWidth) / 2;
float y = pdfHeight - imgHeight;

...
8、使图片靠下水平居中
java 复制代码
...

float x = (pdfWidth - imgWidth) / 2;
float y = 0;

...
9、使图片居中
java 复制代码
...

float x = (pdfWidth - imgWidth) / 2;
float y = (pdfHeight - imgHeight) / 2;

...
相关推荐
-银雾鸢尾-1 天前
C#中的拓展方法
开发语言·c#
guodingdingh1 天前
软件开发工作问题总结0718
java·开发语言·数据库
咖啡八杯1 天前
GoF设计模式——解释器模式
java·后端·spring·设计模式
优橙教育1 天前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
掘金码甲哥1 天前
这块终端神器, 必须吹爆!
后端
糖果店的幽灵1 天前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
Csvn1 天前
📊 SQL 入门 Day 8:集合操作 — 用 SQL 做数学里的"并交差"
后端·sql
腻害兔1 天前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
SeaTunnel1 天前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
碎光拾影1 天前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库