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

Rob*_*y F 17 pdfbox unit-conversion

我是PDFBox(和PDF生成)的新手,我很难生成自己的PDF.

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

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

mkl*_*mkl 32

通常,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的新手(正如你所说)和一般的新手(因为我认为因为你可能已经识别了坐标),我建议你最初不要在任何可能的地方使用转换,因此,留在坐标系从左下角开始的状态既不旋转也不倾斜,单位长度为1/72英寸.

对于此上下文,您实际上可以使用PDFBox提供的常量进行转换:

  • 以英寸为单位乘以坐标PDPage.DEFAULT_USER_SPACE_UNIT_DPI以获取默认用户空间坐标.
  • 以mm为单位乘以坐标PDPage.MM_TO_UNITS以获取默认用户空间坐标.

但是,如果您想获得坐标的乐趣,请查看PDF规范ISO-32000-1并学习8.3 坐标系和9.4.4 文本空间详细信息.

  • 查看源代码,这些常量是定义的但是是私有的 (2认同)
  • 假设单位是_points_,它们通常是:`mm = pt*0.352778`和`pt = mm/0.352778` (2认同)
  • 从 2.0.4(或更早版本,我正在使用的版本)开始,PDPage 中找不到 DEFAULT_USER_SPACE_UNIT_DPI 和 MM_TO_UNITS。DEFAULT_USER_SPACE_UNIT_DPI 值为 72(每英寸像素)。 (2认同)