我尝试使用谦虚/pdf2json,输出非常有用,但我尝试计算该库使用的度量单位。他们称之为“页面单位”,根据 pdf 规范,这不等于 1/72(点),因为整个页面的高度有 51 个页面单位
有人知道这个页面单位是什么吗?我在哪里可以找到有关此测量的信息?
提前谢谢了。
长话短说
需要理解的重要一点是,x、y 和元素宽度/高度是相对单位,它们与页面宽度/高度的比率相关,可以通过除以现有单位并乘以所需单位将其转换为任何目标比率。
以下是一些无聊的细节:
PDF 没有标准“尺寸”——您可以将任何您喜欢的内容打印到 PDF,其中可能包括横向或纵向、不同的页面尺寸(标准、A0-A5、Legal、Tabloid、自定义)等。 PDF 以英寸为单位,因此到像素的转换(包括 pdf2json)不是固定的“24px”,如 @async5 的答案中所示。
以编程方式获得您想要的结果的关键是利用解析的 PDF 信息(页面宽度和页面高度)以及您需要如何渲染它(像素数因显示分辨率的密度而异,但“英寸”始终是“英寸” ") 以及如何将其转化为您所定位的目标分辨率。
由于同一物理设备通常支持多种分辨率(更改逻辑 DPI) - 原始像素密度和用户设置的合成密度之间可能存在差异,因此从 PDF 单元转换为本地显示的基础是是由 PDF 文件与其物理渲染版本的目标 dpi 之间的差异组成的比例因子。同样的想法也适用于 PDF 解析库,该库可能使用与 pdf 文件本身的本机“72dpi”不同的 DPI。
虽然 96dpi 是 Microsoft 标准尺寸(72dpi 是 Apple 的标准),但选择任何一个都不会为您提供正确的像素偏移 b/c pdf2json 或 pdf.js 对最终用户显示一无所知。对于 pdf2json 坐标 (x/y),它们只是平面上位置(由宽度/高度定义)之间的相对测量值。因此标准化为 72dpi 的 8.5"x11" 位置将如下完成:
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 的数学将独立于该代码更改而工作。
希望这有帮助。当我处理这个问题时,互联网上似乎缺少这个问题的详细版本。许多人解决特定的具体源/目标解析问题(包括特定于库的问题)或抽象地谈论它,但没有非常清楚地解释其中的关系。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)