使用Postscript从pdf流中获取pdf Mediabox

时间:2019-05-13 14:58:11

标签: pdf ghostscript postscript

我想从pdf流(而不是从文件)获取mediabox。

我目前有这个后记文件(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 -_

这可能吗?

1 个答案:

答案 0 :(得分:1)

您无法“流式处理” PDF文件,因为它需要随机访问文件的内部内容才能进行解释。 (例如,交叉引用表通常存储在文件末尾,而交叉引用表的偏移量存储在文件末尾)

如果您通常通过stdin将PDF文件提供给Ghostscript(即不使用PostScript代码),则Ghostscript会在开始处理该文件之前将其写入磁盘上的临时文件中。

请注意,您的PostScript代码是Ghostscript特有的(使用仅在Ghostscript上存在的PostScript扩展名),并且不能与任何其他解释器一起使用。

该代码希望从文件中读取:

() = File dup (r) file runpdfbegin

所以那行不通。您必须执行与Ghostscript的PDF解释器相同的技巧,然后将stdin写入文件,然后再运行解释器。在PostScript中似乎不值得编码,可能更容易将其写入文件,然后在文件上调用Ghostscript。