pdf2json 页面单位:它是什么?

pdf2json Page Unit: What is it?

我正在尝试使用 modesty/pdf2json 并且输出非常有用,但我正在尝试计算库使用的度量单位。他们称之为 "Page Units",根据 pdf 规范,这不等于 1/72(点),因为整个页面在高度

上有 51 个页面单位

有人知道这个页面单元是什么吗?我在哪里可以找到有关此测量的信息?

非常感谢。

pdf2json 生成的内容与 PDF.js 无关(PDF.js 使用标准 PDF space 单位作为基础)

所以基于https://github.com/modesty/pdf2json/blob/3fe724db05659ad12c2c0f1b019530c906ad23de/lib/pdfunit.js :

  • pdf2json 从 PDF.js 以 96dpi 为单位获取数据
  • 将每个单位缩放 1/4

所以页面单位等于 (96px/inch * 1inch / 4) = 24px.

在您的示例中,高度等于 51 * 24px = 1,224px,或 51 * 0.25inch = 12.72inch

长话短说;博士 需要理解的重要一点是,x、y 和元素 width/height 是与页面 width/height 相关的相对单位,其比率可以通过除以现有单位再乘以转换为任何目标比率所需的单位。

以下是无聊的细节:

PDF 没有标准 "size" -- 您可以将任何您喜欢的内容打印成 PDF,其中可能包括横向或纵向、不同的页面大小(标准、A0-A5、Legal、Tabloid、自定义) 等。PDF 的大小以英寸为单位,因此转换为像素(包括 pdf2json)不是固定的“24px”,如 @async5 的回答中所示。

以编程方式获得所需结果的关键是利用解析的 PDF 信息(页面宽度和页面高度)以及您需要如何呈现它(像素数因显示分辨率的密度而异,但 "inch" 始终是 "inch") 以及它如何转化为您定位的目标分辨率。

由于同一物理设备通常支持多种分辨率(更改逻辑 DPI)- 原始像素密度和用户设置的合成密度之间可能存在差异,因此从 PDF 单位转换为本地显示将是一个比例因子,由 PDF 文件和它的物理渲染版本的目标 dpi 之间的差异组成。同样的想法适用于 PDF 解析库,它可能使用与 pdf 文件本身的本机“72dpi”不同的 DPI。

虽然 96dpi 是 Microsoft 的标准尺寸(72dpi 是 Apple 的标准),但两者的选择都不能为您提供正确的像素偏移 b/c pdf2json 或 pdf.js 不知道任何关于最终用户显示。对于 pdf2json 坐标 (x/y),它们只是平面上某个位置之间的相对测量值(由 width/height 定义)。所以标准化为 8.5"x11" 位置 72dpi 将按如下方式完成:

pdfRect.x = pdfRect.x * ((8.5 * 72) / parsedPdf.formImage.Width); pdfRect.y = pdfRect.y * ((11 * 72) / parsedPdf.formImage.Pages[0].Height);

无论 pdf2json 的内部 DPI 是什么,或者坦率地说,无论您选择使用什么其他 PDF 解析库,这种公式都适用。那是因为它通过使用您需要的任何单位进行除法和乘法来抵消这些单位。即使今天 pdf2json 在内部使用 96dpi 并缩小 1/4,后来更改为 72dpi 并缩小 1/2,上面用于转换为像素偏移的数学运算和 dpi 将独立于该代码更改工作。

希望这对您有所帮助。当我处理这个问题时,互联网似乎缺少这个的拼写版本。许多人解决具体的具体 source/destination 解析问题(包括特定于库)或抽象地谈论它但没有非常清楚地解释其中的关系。