我是PDFBox(和PDF生成)的新手,并且很难生成自己的PDF。
我的文本确实具有以英寸/厘米为单位的特定坐标,因此我需要将其转换为PDFBox使用的单位。有什么建议/实用工具可以自动执行此操作吗?
PDPageContentStream.moveTextPositionByAmount(x,y)
对我来说毫无意义。
通常,PDFBox在创建PDF时会使用PDF用户空间坐标。这意味着:
页面的坐标由默认为MediaBox的CropBox界定,其值从左到右和从下到上递增。因此,如果您创建使用页面或在页面的左下角坐标系统启动的原点。new PDPage()
new PDPage(PDPage.PAGE_SIZE_*)
用户空间中的单位以默认用户空间单位开始,该用户空间单位由页面的UserUnit定义。大多数情况下(例如,如果您使用任何PDPage
构造函数创建页面并且未显式更改该值)都没有显式设置,因此其默认踢角为1⁄72英寸。
通过将某个矩阵连接到当前的变换矩阵,可以任意更改用户空间坐标系。当前的变换矩阵从恒等矩阵开始。
在PDFBox中,您可以使用PDPageContentStream.concatenate2CTM()
重载之一来执行此操作。
使用切换到文本模式后,所使用PDPageContentStream.beginText()
的坐标系还会受到文本矩阵引入的转换的影响。
在PDFBox中,使用PDPageContentStream.setTextMatrix()
重载之一设置文本矩阵。
由于您是刚接触PDFBox的人(正如您所说),而刚接触PDF的人(我想是因为您可能会认识到这些坐标,所以我建议您一开始时尽量不要使用转换,因此请保留在坐标系统从左下角开始的状态,既不旋转也不歪斜,其单位长度为1/72英寸。
对于这种情况,您实际上可以使用PDFBox提供的常量进行转换:
PDPage.DEFAULT_USER_SPACE_UNIT_DPI
以获取默认的用户空间坐标。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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句