【问题标题】:Postscript. Get document page size后记。获取文档页面大小
【发布时间】:2017-01-16 10:54:35
【问题描述】:

我希望获取文档的页面大小,例如 A4、A5、A6 等。

解决方案,我发现它是解析后记文本并从中提取字符串A6

featurebegin{
%%BeginFeature: *PageSize A6

    <</DeferredMediaSelection true /PageSize  [298 420] /ImagingBBox null /MediaClass null>> setpagedevice
%%EndFeature
}featurecleanup

但这工作很慢......

我该怎么做?是否存在用于获取完整文档信息的库?

如果存在,我更喜欢 java 中的解决方案。

【问题讨论】:

  • 为自己找一份官方 PostScript 语言参考。通常,“PostScript”文件没有(也不需要!)提及页面大小,尽管物理页面大小可能是“在生成此页面描述期间假定的”(来自参考),这通常是以磅为单位的尺寸,而不是您想象的名称。

标签: java postscript


【解决方案1】:

您的解决方案仅适用于符合 DSC(文档结构约定)的文件。虽然许多文件确实符合,但其他文件不符合。此外,仅当 PostScript 文件包含评论时才有效(% 在 PostScript 中引入评论)。

您可以改写 setpagedevice 运算符并让它打印请求的媒体大小(如果存在)。

/Oldsetpagedevice /setpagedevice load def

/setpagedevice {
  dup /PageSize known {
    dup /PageSize get
    dup 0 get 20 string cvs exch 1 get 20 string cvs exch
    (Requested Media Size is ) print print (points by ) print print (points\n) print
  } if
  Oldsetpagedevice
} bind def

“完整文档信息”是什么意思?顺便说一句,您需要注意(与 PDF 不同)PostScript 文件是程序,而不是文档。因此,了解实际情况的唯一方法是解释程序。

您可以使用 Ghostscript,但它没有 Java 接口,您需要更具体地了解您想要的信息。

【讨论】:

  • 仅供参考,DeferredMediaSelection 在我拥有的 PLRM(第 3 版)中进行了描述,但当然不能保证文档包含此内容。 (@Sergey:它对你很有用,因为它的 /PageSize 值就是我上面提到的:以磅为单位的大小。)
  • Ghostscript 可以通过足够的编程来传递各种信息。就像我说的,你想知道什么?使用 PostScript 解释器的要点之一是,即使信息不在 cmets 中或隐藏在过程中,它也能找到信息。 grep 和朋友将无法这样做。
【解决方案2】:

如果您通过带有-sDEVICE=bbox 的ghostscript 运行后记,它将报告裁剪渲染输出的矩形的角,这可能是(接近)您想要的。

信息通常以 DSC %%BoundingBox: x0 y0 x1 y1 格式打印到 stderr

【讨论】:

    猜你喜欢
    • 2013-11-26
    • 2020-06-27
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 2021-03-13
    相关资源
    最近更新 更多