sno*_*dev 7 javascript browser pdf fileapi jspdf
我在浏览器中运行。我有File(JavaScript 文件类型)类型application/pdf。我想检查 pdf 的格式是否为 US Letter(8.5 英寸 x 11 英寸)或 US Legal(8.5 英寸 x 14 英寸)(横向或纵向)。
我查看了jsPDF,虽然以编程方式创建 pdf 文档看起来很棒(这对于测试会派上用场),但我无法找到一种方法来使用它来解析现有 PDF 文件并获取有关文档的信息(例如页面格式和方向)。
任何有助于实现我的目标的帮助都将受到赞赏,无论是使用jsPDF、另一个库还是普通 JS。
使用简单的文本解析,大多数(但并非全部) PDF 文件都会有一个或多个/MediaBox条目来代表每一页。/CropBox是查看页面的大小,因此如果存在可能会更好。除非页面使用不同的用户单位,否则页面长度通常以点为单位给出。格式为[x0,y0,x1,y1],因此它们不一定总是以0开头,甚至可能是以下值,x0和x1之间的差值表示标称宽度。
这里只是最近欧洲示例中的一些第一个条目,因此请注意其中的变化,有些是整数,有些是实数,有些是混合的(就像许多 pdf 内容一样,没有强制规则)
/MediaBox [0 0 595.28 841.89]
/MediaBox [0 0 842 595]
/MediaBox[0 0 387.36 594]
Run Code Online (Sandbox Code Playgroud)
对于美国字母和法律,它们通常是整数,期望或搜索
/MediaBox[0 0 612 792] 和类似的
在许多情况下,即使打算稍后旋转,所有页面都是相同的形状,但有时页面可以混合,但这需要搜索/计算所有页面(假设所有页面都是简单的文本描述)
/MediaBox .... 0 576 720] = A US Gov Letter Portrait Page (8" x 10") [*]
/MediaBox .... 0 720 576] = A US Gov Letter Landscape Page
/MediaBox .... 0 576 756] = A US Gov Letter Portrait Page (8" x 10.5")
/MediaBox .... 0 756 576] = A US Gov Letter Landscape Page
/MediaBox .... 0 576 936] = A US Gov Legal Portrait Page (8" x 13") [*]
/MediaBox .... 0 936 576] = A US Gov Legal Landscape Page
/MediaBox .... 0 612 792] = A US Letter Portrait Page (8.5" x 11")
/MediaBox .... 0 792 612] = A US Letter Landscape Page
/MediaBox .... 0 612 936] = A US Gov Legal Portrait Page (8.5" x 13") [*]
/MediaBox .... 0 936 612] = A US Gov Legal Landscape Page
/MediaBox .... 0 612 1008] = A US Legal Portrait Page (8.5" x 14")
/MediaBox .... 0 1008 612] = A US Legal Landscape Page
Run Code Online (Sandbox Code Playgroud)
还有其他历史悠久的美国尺码
* https://en.wikipedia.org/wiki/Paper_size#Loose_sizes
旋转最常设置为 0,然后应用矩阵变换或 /action 来旋转第一个视图,在那些支持此类操作或脚本而不阻塞的阅读器中。/Rotate 0因此对于搜索 1001x条目没有用处
因此,例如,我应该补充一点,我在上面给出的第一个随机文件是一个又窄又高的直立纵向页面,但它是一个从右侧读取的图表,作为横向机场布局,并且测试将失败于它应该采用哪种方式可以在 pdf 中将其读取为纵向或横向,但由用户决定将两个文本同时读取为纵向或横向