我需要从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一起工作
发布于 2019-11-28 15:16:52
bbox设备应该提供准确的信息,在哪些方面是不准确的?我会亲自测试它,但是您还没有提供一个文件来演示这一点。
您需要记住,它可能有一些对象(如图像)可能会用空白标记页面。这仍然可以作为为bbox设备的目的标记页面。如果您只想计数非白色输出样本,那么您需要呈现文档(以您打算使用的最终分辨率)并实际计数非白色像素。这是一个潜在的非常缓慢的操作,因为它需要读取每一个输出颜色样本什么可能是一个非常大的图像。
不过,编写代码并不难,您可以使用inkcov设备作为在同一次操作中执行两个操作的基础。
或者,您可以让GhostPDL为您交付呈现的位图,并使用其他工具/语言为边框编写解决方案。
啊,你实际上是在寻找所要求的媒体大小,而不是边框吗?这完全不是一回事。边框返回包含输出上所有标记的最小矩形,它不会告诉您所请求的媒体有多大。所以左下角的一个小矩形会给你一个很小的BBox,即使hte媒体很大。
您可以通过编写一个小型的PostScript程序来合理地轻松地从PostScript获得媒体大小的请求,但是您不能用PCL实现这一点。在这两种情况下,最简单的解决方案可能是将内容呈现到72 dpi的文件中,然后读取呈现输出的宽度/高度,这将给出以点为单位的媒体大小。
或者使用pdfwrite设备将输入转换为PDF,然后可以使用pdf_info.ps PostScript程序给出来自PDF文件的页面大小。
发布于 2019-12-18 17:27:35
实际上,我正在寻找所要求的媒体大小,而不是边界框。也许我应该说得更具体些。这是一些让你一天愉快的艺术。
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.pclhttps://stackoverflow.com/questions/59091046
复制相似问题