PostScript/PCL - 获取文档页面信息:页面大小、黑白/颜色

Posted

技术标签:

【中文标题】PostScript/PCL - 获取文档页面信息:页面大小、黑白/颜色【英文标题】:PostScript/PCL - Get document page info: page size, bw/color 【发布时间】: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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于PostScript/PCL - 获取文档页面信息:页面大小、黑白/颜色的主要内容,如果未能解决你的问题,请参考以下文章

Java 将Word转为PDF/Html/图片/XPS/SVG(基于Spire.Cloud.SDK

jq的各种位置信息

iframe简单使用 获取iframe 获取iframe 元素值 iframe获取父页面的信息

通过js触发launch事件获取页面信息

使用 App Access Token 从 Facebook 帐户获取页面详细信息

js页面触发chargeRequest事件和Nginx获取日志信息