【问题标题】:PostScript/PCL - Get document page info: page size, bw/colorPostScript/PCL - 获取文档页面信息:页面大小、黑白/颜色
【发布时间】:2020-03-24 05:45:42
【问题描述】:

我需要从 postscript 或 pcl 文件中确定文档页面信息。最好使用 Java,但 Ghostscript/Ghostpcl 也一样好。

我试图获得以下信息:

页面颜色

This can be achieved with ghostscript/ghostpcl using the device called inkcov.

PostScript
gswin64c.exe -dNOPAUSE -dBATCH -sDEVICE=inkcov -o- input.ps

PCL6
gpcl6win64 -dNOPAUSE -dBATCH -sDEVICE=inkcov -o- input.pcl

页面大小

There is a device called bbox which gives me the boundary box per page for PostScript or PCL6 documents

PostScript
gswin64c.exe -dNOPAUSE -dBATCH -sDEVICE=bbox -o- input.ps

PCL6
gpcl6win64 -dNOPAUSE -dBATCH -sDEVICE=bbox -o- input.pcl

但最终边界框是页面大小的不准确近似值。 我检查了以下帖子,但该解决方案似乎不适用于我的 ghostscript 9.5 版 Getting the page sizes of a PostScript document

【问题讨论】:

    标签: ghostscript postscript page-size pcl6


    【解决方案1】:

    bbox 设备应该提供准确的信息,它在哪些方面不准确?我会自己测试它,但你没有提供文件来证明这一点。

    您需要记住,某些对象(例如图像)可能会用空白标记页面。出于 bbox 设备的目的,这仍然算作标记页面。如果您只想计算非白色输出样本,则需要渲染文档(以您打算使用的最终分辨率)并实际计算非白色像素。这可能是一个非常慢的操作,因为它需要读取可能是非常大的图像的每个输出颜色样本。

    不过,编写代码并不难,您可以使用 inkcov 设备作为基础,在同一通道中执行这两项操作。

    或者您可以让 GhostPDL 为您提供渲染的位图,并使用其他工具/语言编写边界框的解决方案。

    啊,您实际上是在寻找请求的媒体尺寸,而不是 Bounding Box 吗?那根本不是一回事。边界框返回包含输出上所有标记的最小矩形,它不会告诉您请求的媒体有多大。因此,即使媒体很大,左下角的小矩形也会给你一个小 BBox。

    您可以通过编写一个小型 PostScript 程序来相当容易地从 PostScript 获取媒体大小请求,但您不能使用 PCL 做到这一点。在这两种情况下,最简单的解决方案可能是以 72 dpi 将内容渲染到文件中,然后读取渲染输出的宽度/高度,从而为您提供以磅为单位的媒体大小。

    或者使用 pdfwrite 设备将输入转换为 PDF,然后可以使用 pdf_info.ps PostScript 程序为您提供 PDF 文件的页面大小。

    【讨论】:

      【解决方案2】:

      确实,我正在寻找请求的媒体尺寸,而不是边界框。 也许我应该更具体。 这里有一些 ascii 艺术可以让您的一天更加美好。

      y
      ^
      |
      |
      +-----------+
      | +----+    |
      | |bbox|    |
      | +----+    |
      |           |
      |           |
      |           |
      |           |
      |           |
      +-----------+----> x
      
      A simple document with some text in the upper left corner.
      

      KenS:“边界框返回包含输出上所有标记的最小矩形,它不会告诉您请求的媒体有多大。”

      因此,目前“最简单”的解决方案实际上是将 ps/pcl 文件转换为 pdf 并从那里读取媒体大小。

      转换为 PDF

      PostScript
      gswin64c.exe -dBATCH -dNOPAUSE -dNOOUTERSAVE -sDEVICE=pdfwrite -sOutputFile=output.pdf input.ps
      
      PCL6
      gpcl6win64 -dBATCH -dNOPAUSE -dNOOUTERSAVE -sDEVICE=pdfwrite -sOutputFile=output.pdf input.pcl
      

      【讨论】:

        猜你喜欢
        • 2013-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-27
        • 2017-10-02
        • 1970-01-01
        相关资源
        最近更新 更多