当前位置: 首页 > 面试题库 >

PDF页面的原点(x,y)在哪里?

彭鹭洋
2023-03-14
问题内容

iText用来创建我的 PDF 文件。

我想使用在这里找到的方法将文本放置在文档中的某个特定位置:itext绝对放置文本。

但是,我不知道在哪里可以找到页面坐标系的原点。

bottom left cornertop right cornerbottom right cornertop left corner

这个起源在哪里?


问题答案:

页面的尺寸(又称页面边界)在页面字典中定义:

  • /MediaBox:物理介质(页面)的边界。该值是必需的,因此您可以在每个PDF中找到它。
  • /CropBox:显示或打印时可见的区域。的/CropBox是等于或小于较小/MediaBox。该值是可选的;如果丢失,/CropBox则等于/MediaBox
  • 其他可能的值/BleedBox/TrimBox/ArtBox。这些已针对特定目的进行了定义,但现在已不再使用。如果缺少它们,则默认为/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构造(llxllyurxury)限定使用的x和左下的y坐标和右上角的矩形。

如果为new Rectangle(0, 0, 595, 842),则页面的左下角与坐标系的原点重合(0, 0)。页面的右上角与坐标重合(595, 842)

所有度量均以用户单位定义,默认情况下,用户单位与印刷点 大致 对应:1个用户单位= 1个点。

大概
注意一下这个词:我们使用点来进行计算,但是在ISO标准中,我们非常谨慎,不要将点用作用户单位的同义词。例如:一个A4页面可测量595个乘以842个用户单位,但是如果您以点为单位计算确切的值,则会有细微的差别(点之后有一些数字)。

页面的左下角并不总是坐标系的原点。如果我们使用定义页面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度(默认)更改为另一个角度。您还可以缩放轴以获得不同的宽高比。虽然这样做很有趣,但它需要一定的数学运算能力。



 类似资料:
  • 实际上,我试图增加PDPage对象的cropbox。好吧,没有挑战。但页面内容仍保留在CropBox的左下角。我要它集中在新的cropbox空间。 我知道所有的内容是绝对定位在PDF。所以我的问题是:有没有一种方法使用PDFBox来翻译我的PDPage的原点(x,y)或者内容元素? 问候 汉斯

  • 我有以下例外: WebDriverException:不能在点(1057.38330078125,673.13330078125)点击元素。其他元素将收到单击: 按钮id=“id4b6a687af6934e35b6f355f6305dc481”data-layout=“hbox”class=“hux-ui-button”type=“button”role=“button”> 硒=2.49。

  • 使用IEventHandler生成“Page X”部分似乎相当简单--我正在努力解决的是“Y”部分。我希望避免为了找出它有多少页而对整个文档生成两次,因为这将对性能产生重大影响! 我已经在iText5中找到了一个解决方案:Java中的PDF页码和iText,但是iText7是iText的完全重写,接口完全不同,到目前为止我还找不到任何类似的iText7示例。

  • 问题内容: 我尝试用Selenium 抓取此网站。 我想单击“下一页”按钮,为此,我这样做: 它适用于许多页面,但不适用于所有页面,我收到此错误 始终为此页面 我尝试了这个 但是我遇到了同样的错误 问题答案: 另一个元素覆盖了您要单击的元素。您可以使用它来单击。

  • 问题内容: 我有一个二维欧几里德空间。给出了三点。 例如(p2是中间点): 现在,我想计算这三个点的曲率。 这该怎么做?是否存在现有方法(没有Java外部库)? 曲率:https : //en.wikipedia.org/wiki/曲率 Menger曲率:https: //en.wikipedia.org/wiki/Menger_curvature 问题答案: 对于Menger Curvature

  • 问题内容: 使用math.pow或**运算符哪个更有效?我什么时候应该使用另一个? 到目前为止,我知道可以返回一个或一个,如果您使用小数,该函数将返回一个浮点数 问题答案: 使用Power运算符将更快,因为它不会产生函数调用的开销。如果您反汇编Python代码,则可以看到以下内容: 请注意,我在这里使用变量作为指数,因为类似常数的表达式实际上是在编译时求值的。 现在,实际上,这种差异并不重要,正如