【问题标题】:Are PDF box coordinates relative or absolute?PDF框坐标是相对的还是绝对的?
【发布时间】:2010-02-18 11:02:00
【问题描述】:

我想使用 pyPDF 以编程方式编辑 PDF。目前,我正在努力解释各种 PDF 框(TrimBox、MediaBox 等)的尺寸。每个盒子有四个维度存储为一个四元组,例如:

TrimBox:           56.69    56.69  1040.31   751.18

根据 PDF 规范,这些应该描述一个矩形,当然 (56.69, 56.69) 确定这个矩形的左上角。但是,(1040.31, 751.18) 是解释为这个矩形的右下角,还是相对于左上角的向量?

显然,这个答案在排字员中非常有名,以至于到目前为止我在任何地方都找不到明确的拼写。

【问题讨论】:

    标签: pdf pdf-generation pypdf


    【解决方案1】:

    Daniel,由于左下角是坐标系的原点,只要 TrimBox 的左下角位于原点(即,当 (x1,y1) = (0,0) 时)。

    顺便说一句,我花了一些时间才发现所使用的单位是点——在 PDF 规范文档中我可以找到并不清楚这一点。显然,它不是物理学家写的。 http://en.wikipedia.org/wiki/Point_(typography)

    【讨论】:

    • 感谢您提供的信息,阿曼。不过,我仍然不清楚,为什么在我的定位算法中将坐标视为 (x, y, w, h) 即使在 (x1, y1) = (56.69, 56.69) 时也有效。到目前为止,也许左下角坐标已经足够接近原点,以至于微小的差异没有引起明显的差异。
    • 单位是不是“点”。单位是用户定义的,默认为 1/72 英寸。请参阅 PDF 规范的第 4.2.1 节坐标空间。
    • 用于定义矩形的值是被定义矩形的对角坐标。值可以是(左下,右上)或(左上,右下);请参阅 PDF 规范的第 3.8.4 节矩形。可以在adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/… 找到规范
    【解决方案2】:

    正如 Mark Storer 和其他人正确评论的那样,四个框值将被解释为 (left start, bottom start, right end, top end),因为 PDF 格式使用绝对坐标。所以(MediaBox[0], MediaBox[1]) 是框的左下角,(MediaBox[2] and MediaBox[3]) 是框的右上角。 MediaBox[2]MediaBox[3] 仅在 MediaBox[0]MediaBox[1] 包含值 0 时表示宽度和高度,不应依赖此值。

    此外,PDF 旋转会修改整个坐标系而不仅仅是页面,因此 PDF 框始终指向未旋转的页面。所以如果有 90 度或 270 度的旋转,则需要交换宽度和高度才能获得框的视觉尺寸。

    坐标值称为点,默认情况下 1 点等于 1/72 英寸。但是,这也不应该被依赖,因为每个页面都可以定义一个自定义的UserUnit(自 PDF 1.6 起),如PDF Reference Manual 中所述。

    【讨论】:

    • 感谢您的回答。这终于澄清了正在发生的一切。在我提出这个问题 11 年后,同样如此?将此答案标记为已接受。
    【解决方案3】:

    经过一些额外的修补,我实际上找到了两个我的问题的答案。就pyPDF源码而言,四个box坐标应该读作(x1, y1, x2, y2),其中前两个代表左下角,后两个代表右上角。

    但是,当我将坐标解释为 (x, y, w, h) 时,在 PDF 的 TrimBox 内绘图工作得非常好,其中 (x, y) 是左上角, (w, h) 是宽度和高度来自那里的矩形。

    所以,我可能把第一个解释弄错了,但至少第二个对我有用。

    【讨论】:

    • 您的第一个解释是正确的。只要 x1, y1 是 (0, 0),那么这两种解释就会产生相同的矩形。情况并非总是如此。 不要依赖它。 PS:PDF 单位是“点”,即 1/72 英寸。 8.5" x 11" = 612pt x 792pt
    猜你喜欢
    • 2011-11-21
    • 2011-07-19
    • 1970-01-01
    • 2011-04-29
    • 2010-12-29
    • 2011-10-30
    • 2019-09-09
    • 2015-10-11
    • 2015-11-13
    相关资源
    最近更新 更多