gpt4 book ai didi

PDFBox 将英寸或厘米转换为坐标系

转载 作者:行者123 更新时间:2023-12-03 01:59:12 25 4
gpt4 key购买 nike

我是 PDFBox(和 PDF 生成)的新手,在生成自己的 PDF 时遇到困难。

我确实有某些坐标以英寸/厘米为单位的文本,我需要将它们转换为 PDFBox 使用的单位。有什么建议/实用程序可以自动执行此操作吗?

PDPageContentStream.moveTextPositionByAmount(x,y) 对我来说毫无意义。

最佳答案

一般来说,PDFBox 在创建 PDF 时使用 PDF 用户空间坐标。这意味着:

  1. 页面的坐标由其 CropBox(默认为 MediaBox)分隔,值从左到右、从下到上递增。因此,如果您使用 new PDPage()new PDPage(PDPage.PAGE_SIZE_*) 创建页面,则坐标系的原点从页面的左下角开始.

  2. 用户空间中的单位以默认用户空间单位开始,由页面的UserUnit定义。大多数情况下(例如,如果您使用任何 PDPage 构造函数创建页面并且没有显式更改该值),则不会显式设置该页面,因此,其默认值为 1⁄72 英寸.

  3. 用户空间坐标系可以通过连接来任意改变一些矩阵到当前的变换矩阵。当前变换矩阵从单位矩阵开始。

    在 PDFBox 中,您可以使用 PDPageContentStream.concatenate2CTM() 重载之一来执行此操作。

  4. 一旦使用 PDPageContentStream.beginText() 切换到文本模式,所使用的坐标系就会进一步受到文本矩阵引入的转换的影响。

    在 PDFBox 中,您可以使用 PDPageContentStream.setTextMatrix() 重载之一设置文本矩阵。

由于您是 PDFBox 的新手(如您所说)并且一般来说是 PDF 的新手(我认为否则您可能会识别坐标),我建议您首先尽可能避免使用转换,因此,保持坐标系从左下角开始,既不旋转也不倾斜,单位长度为1/72英寸的状态。

对于这种情况,您实际上可以使用 PDFBox 提供的常量进行转换:

  • 将英寸坐标乘以 PDPage.DEFAULT_USER_SPACE_UNIT_DPI 即可获取默认用户空间坐标。
  • 将坐标(以 mm 为单位)乘以 PDPage.MM_TO_UNITS 以获取默认用户空间坐标。

如果您想享受坐标带来的乐趣,请查看 PDF 规范 ISO-32000-1并学习第 8.3 节坐标系和 9.4.4 文本空间详细信息

<小时/>

上面提到的 PDPage 常量过去在早期的 PDFBox 1.8.x 版本中可以访问,但后来被隐藏(private),并最终在过渡到PDFBox 2.x。

作为引用,常量定义为

private static final int DEFAULT_USER_SPACE_UNIT_DPI = 72;

private static final float MM_TO_UNITS = 1/(10*2.54f)*DEFAULT_USER_SPACE_UNIT_DPI;

关于PDFBox 将英寸或厘米转换为坐标系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21520015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com