PDF页面的Origin(x,y)在哪里?
我正在使用iText来创建我的PDF文件。 我想使用我在这里找到的方法将文本放在文档中的某个特定位置。 但是,我无法弄清楚在哪里可以找到页面坐标系的原点。 bottom left corner
?, top right corner
? bottom right corner
?, top left corner
? 这个起源在哪里?
页面的维度(也称为页面边界)在页面字典中定义:
-
/MediaBox
:物理介质(页面)的边界。 此值是必需的,因此您可以在每个PDF中找到它。 -
/CropBox
:显示或打印时可见的区域。/CropBox
等于或小于/MediaBox
。 该值是可选的; 如果缺少,/CropBox
等于/MediaBox
。 - 其他可能的值是
/BleedBox
,/TrimBox
和/ArtBox
/TrimBox
。 这些已经被定义用于特定目的,但是它们不再被使用。 如果它们丢失,则默认为/CropBox
。 这些值都不会超出/CropBox
。
使用iText创建文档时,可以显式或隐式定义/MediaBox
。
明确:
Rectangle rect = new Rectangle(20, 20, 300, 600); Document document = new Document(rect);
隐:
Document document = new Document();
这一行相当于:
Rectangle rect = new Rectangle(0, 0, 595, 842); Document document = new Document(rect);
传递给Rectangle
构造函数的四个参数( llx
, urx
, llx
, urx
)使用左下角和右上角的x和y坐标定义一个矩形。
如果是new Rectangle(0, 0, 595, 842)
,页面的左下角与坐标系的原点(0, 0)
重合。 页面的右上角与坐标(595, 842)
重合。
所有测量都以用户单位定义,默认情况下,用户单位大致对应于印刷点:1个用户单位= 1个点。
请注意粗略这个词:我们使用点进行计算,但在ISO标准中,我们非常谨慎,不要将point用作用户单位的同义词。 例如:一个A4页面用842个用户单位测量595,但是如果你用点计算精确值,则会有一点点差异(点之后的一些数字)。
页面的左下角并不总是坐标系的原点。 如果我们使用Rectangle(20, 20, 300, 600)
定义页面,则原点是下方的20个用户单位和左下角左侧的20个用户单位。 也可以使用负值来定义页面大小。
例如:假设您要创建一个包含4个A4页面的A2文档,而不是像这样定义页面大小:
Rectangle(-595, 0, 0, 842) Rectangle(0, 0, 595, 842) Rectangle(-595, -842, 0, 0) Rectangle(0, -842, 595, 0);
通过像这样定义媒体框,您还可以传递有关不同页面的相对位置的信息。 如果以4个A4页面为单位,坐标系的原点就是A2页面的精确中心。
重要:
以上所有假设您没有引入任何坐标转换,例如使用concatCTM()
或transform()
方法。 这些方法允许您更改坐标系,例如将x轴和y轴之间的角度从90度(默认值)更改为另一个角度。 您还可以缩放轴以获得不同的宽高比。 虽然这样做很有趣,但它需要相当多的数学。