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

2024-04-14

我在用iText创造我的PDF files.

我想使用我在这里找到的方法将文本放置在文档中的某个特定位置:itext 绝对定位文本 https://stackoverflow.com/questions/1625455/itext-positioning-text-absolutely#.

但是,我无法弄清楚在哪里可以找到页面坐标系的原点。

bottom left corner? top right corner? bottom right corner? top left corner?

这个起源在哪里?


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

  • /MediaBox:物理介质(页面)的边界。该值是强制性的,因此您会在每个 PDF 中找到它。
  • /CropBox:显示或打印时可见的区域。这/CropBox等于或小于/MediaBox。该值是可选的;如果缺失,则/CropBox等于/MediaBox.
  • 其他可能的值是/BleedBox, /TrimBox and /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构造函数(llx, lly, urx, ury) 使用左下角和右上角的 x 和 y 坐标定义一个矩形。

的情况下new Rectangle(0, 0, 595, 842),页面左下角与坐标系原点重合(0, 0)。页面右上角坐标重合(595, 842).

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

注意这个词roughly:我们使用点进行计算,但在ISO标准中,我们非常谨慎地不使用点作为用户单位的同义词。例如:A4 页面的尺寸为 595 x 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() or transform()方法。这些方法允许您更改坐标系,例如将 x 轴和 y 轴之间的角度从 90 度(默认)更改为另一个角度。您还可以缩放轴以获得不同的纵横比。虽然这样做确实很有趣,但它需要相当多的数学知识。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PDF 页面的原点 (x,y) 在哪里? 的相关文章

  • 有没有创建 Cron 表达式的 Java 代码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要一个 Java 代码来根据用户输入创建一个 cron 表达式 用户输入是时间 频率和执行次数 只需从评论中添加 自己创建 即可
  • Java Logger 未记录到 Netbeans 中的输出

    我正在 Netbeans 中使用 Maven 启动一个 Java 项目 我编写了一些代码来使用 Logger 类进行日志记录 但是 日志记录似乎不起作用 在程序开始时 我运行 Logger getLogger ProjectMainClas
  • 如何在 JavaFX 中连接可观察列表?

    我所说的串联是指获得一个新列表 该列表侦听所有串联部分的更改 方法的目的是什么FXCollections concat ObservableList
  • 垃圾收集器如何在幕后工作来收集死对象?

    我正在阅读有关垃圾收集的内容 众所周知 垃圾收集会收集死亡对象并回收内存 我的问题是 Collector 如何知道任何对象已死亡 它使用什么数据结构来跟踪活动对象 我正在研究这个问题 我发现GC实际上会跟踪活动对象 并标记它们 每个未标记的
  • 与 Eclipse 中的 Java Content Assist 交互

    作为我的插件项目的一部分 我正在考虑与 Eclipse 在 Java 文件上显示的内容辅助列表进行交互 我正在尝试根据一些外部数据对列表进行重新排序 我看过一些有关创建新内容辅助的教程 但没有看到有关更改现有内容辅助的教程 这可能吗 如果是
  • Java 的支持向量机?

    我想用Java编写一个 智能监视器 它可以随时发出警报detects即将到来的性能问题 我的 Java 应用程序正在以结构化格式将数据写入日志文件
  • Android中如何使用JNI获取设备ID?

    我想从 c 获取 IMEIJNI 我使用下面的代码 但是遇到了未能获取的错误cls 它总是返回NULL 我检查了环境和上下文 它们都没有问题 为什么我不能得到Context班级 我在网上搜索了一下 有人说我们应该使用java lang Ob
  • Android studio - 如何保存先前活动中选择的数据

    这是我的代码片段 这Textview充当按钮并具有Onclicklistner在他们 当cpu1000时Textview单击它会导致cpu g1000其代码如下所示的类 public class Game 1000 extends AppC
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • Runtime.exec 处理包含多个空格的参数

    我怎样才能进行以下运行 public class ExecTest public static void main String args try Notice the multiple spaces in the argument Str
  • 如何在单个查询中搜索 RealmObject 的 RealmList 字段

    假设我有一堂课 public class Company extends RealmObject private String companyId private RealmList
  • 如何检查某个元素是否存在于一组项目中?

    In an ifJava中的语句如何检查一个对象是否存在于一组项目中 例如 在这种情况下 我需要验证水果是苹果 橙子还是香蕉 if fruitname in APPLE ORANGES GRAPES Do something 这是一件非常微
  • 如何在java中将日期格式从YYMMDD更改为YYYY-MM-DD? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我从机器可读代码中获取日期格式为 YYMMDD 如何将其更改为 YYYY MM DD 例如我收到 871223 YYMMDD 我想把它改成
  • 如何在 ant 中为 junit 测试设置 file.encoding?

    我还没有完全完成file encoding 和 ant https stackoverflow com questions 1339352 how do i set dfile encoding within ants build xml
  • 如何使用 JMagick 转换色彩空间?

    如何使用 JMagick API 转换色彩空间 例如 CMYK gt RGB 和 RGB gt CMYK None
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • Jetty、websocket、java.lang.RuntimeException:无法加载平台配置器

    我尝试在 Endpoint 中获取 http 会话 我遵循了这个建议https stackoverflow com a 17994303 https stackoverflow com a 17994303 这就是我这样做的原因 publi
  • Android View Canvas onDraw 未执行

    我目前正在开发一个自定义视图 它在画布上绘制一些图块 这些图块是从多个文件加载的 并将在需要时加载 它们将由 AsyncTask 加载 如果它们已经加载 它们只会被绘制在画布上 这工作正常 如果加载了这些图片 AsyncTask 就会触发v
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似
  • 抛出 Java 异常时是否会生成堆栈跟踪?

    这是假设我们不调用 printstacktrace 方法 只是抛出和捕获 我们正在考虑这样做是为了解决一些性能瓶颈 不 堆栈跟踪是在构造异常对象时生成的 而不是在抛出异常对象时生成的 Throwable 构造函数调用 fillInStack

随机推荐