pdf - 使用 postscript 从 pdf 流中获取 pdf Mediabox
问题描述
我想从 pdf 流(而不是文件)中获取媒体框。
我目前有这个后记文件(script.ps):
() = File dup (r) file runpdfbegin
/PDFPageCount pdfpagecount def
% Print out the Page Size info for each page.
() = 1 1 PDFPageCount {
dup (Page ) print =print
pdfgetpage dup
/MediaBox pget {
aload pop exch 4 1 roll exch sub 3 1 roll sub
( ) print =print ( ) print =print
} if
() = flush
} for
() = quit
如果我为 pdf 文件运行它,它会完美运行。
gs -sNODISPLAY -sFile=file.pdf script.ps
但我希望它在流上运行它:
cat file.pdf | gs -sNODISPLAY script.ps -_
这可能吗?
解决方案
您不能“流式传输”PDF 文件,因为它需要随机访问文件的内部结构才能对其进行解释。(例如,交叉引用表通常存储在文件末尾,而交叉引用表的偏移量存储在文件末尾)
如果您通常通过标准输入将 PDF 文件提供给 Ghostscript(即不使用 PostScript 代码),则 Ghostscript 在开始处理之前将其写入磁盘上的临时文件。
请注意,您的 PostScript 代码是高度特定于 Ghostscript 的(它使用仅存在于 Ghostscript 上的 PostScript 扩展)并且不能与任何其他解释器一起使用。
该代码期望从文件中读取:
() = File dup (r) file runpdfbegin
所以这行不通。在运行解释器之前,您必须使用与 Ghostscript 的 PDF 解释器相同的技巧并将标准输入写入文件。在 PostScript 中编写代码似乎不值得,将其写入文件然后在文件上调用 Ghostscript 可能更容易。
推荐阅读
- android - 从其他应用程序共享的uri中获取apk文件的真实路径
- hadoop - 如何在不知道应用程序 ID 的情况下终止 Hive 查询?
- html - 带有响应元素的左-中-右内容
- java - 将对象数组从 Java 传递到 PL/SQL 函数
- java - Java8 - 为什么一个方法需要执行另一个方法作为它的参数?
- c - list_head:如果从第二个元素开始解析,则获取垃圾
- elasticsearch - Kibana 用户禁止错误 {"statusCode":403,"error":"Forbidden","message":"Forbidden"}
- c# - EWS 创建 SearchFolder 失败:ErrorEmailAddressMismatch
- java - Springboot 动态修改 ResourceHandlerRegistry 映射
- powershell - 从 PowerShell 运行 EXE 的问题