使用 postscript 从 pdf 流获取 pdf Mediabox
Get pdf Mediabox from pdf stream using postscript
我想从 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 -_
这可能吗?
您不能 'stream' PDF 文件,因为它需要 运行dom 访问文件的内部结构才能对其进行解释。 (例如,cross-reference table 通常存储在文件末尾,而交叉引用 table 的偏移量存储在文件末尾)
如果您通过标准输入正常将 PDF 文件提供给 Ghostscript(即不使用您的 PostScript 代码),那么 Ghostscript 会在开始处理它之前将它写入磁盘上的一个临时文件。
请注意,您的 PostScript 代码高度 Ghostscript-specific(它使用仅存在于 Ghostscript 上的 PostScript 扩展)并且不能与任何其他解释器一起使用。
代码期望从文件中读取:
() = File dup (r) file runpdfbegin
所以那是行不通的。您必须使用与 Ghostscript 的 PDF 解释器相同的技巧,并在 运行 解释器之前将标准输入写入文件。在 PostScript 中编码似乎不值得,将其写入文件然后在文件上调用 Ghostscript 可能更容易。
我想从 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 -_
这可能吗?
您不能 'stream' PDF 文件,因为它需要 运行dom 访问文件的内部结构才能对其进行解释。 (例如,cross-reference table 通常存储在文件末尾,而交叉引用 table 的偏移量存储在文件末尾)
如果您通过标准输入正常将 PDF 文件提供给 Ghostscript(即不使用您的 PostScript 代码),那么 Ghostscript 会在开始处理它之前将它写入磁盘上的一个临时文件。
请注意,您的 PostScript 代码高度 Ghostscript-specific(它使用仅存在于 Ghostscript 上的 PostScript 扩展)并且不能与任何其他解释器一起使用。
代码期望从文件中读取:
() = File dup (r) file runpdfbegin
所以那是行不通的。您必须使用与 Ghostscript 的 PDF 解释器相同的技巧,并在 运行 解释器之前将标准输入写入文件。在 PostScript 中编码似乎不值得,将其写入文件然后在文件上调用 Ghostscript 可能更容易。