5

我正在尝试将 PDF 转换为 PCL(使用 ghostscript,但我很想听听其他建议),并且每个驱动程序(ghostscript 设备),包括所有内置插件和gutenprint,都会生成比输入大很多倍的 PCL 文件PDF格式。(这就是问题——我需要我的 PCL 与输入一样小)。

鉴于文本没有出现在 PCL 文件中,我猜 Ghostscript 正在对文本进行光栅化。有没有办法阻止GS一般,或者只是gutenprint,这样做?我宁愿让它嵌入字体,或者甚至不嵌入字体(留给打印机渲染字体)?

不幸的是,似乎没有关于这一点的任何文档。

4

2 回答 2

5

PCL 中有 3 种(我认为)字体类型。有渲染位图、TrueType 字体(在更高版本中)和 HPGL 棒字体。

PDF 和 PostScript 具有类型 1、2 (CFF)、3 和 42(TrueType,但与 PCL 不同)和基于上述任何类型的 CIDFonts。

两者唯一共同的字体类型是 TrueType,因此为了保留文本,任何不是 TrueType 的字体都必须转换为 TrueType。这不是一项简单的任务。所以 Ghostscript 只是简单地渲染文本,保证可以工作。

一般来说,PDF 是一种比 PCL 更丰富的格式< 有许多 PDF 结构(字体、阴影、单个操作中的笔触/填充、透明度)无法在 PCL 中表示。因此,大小的增加完全有可能与文本和字体无关。

事实上,我相信 Ghostscript 中的 PXL 驱动程序只是将整个页面以所需的分辨率渲染为位图,然后用足够的 PCL 将其包装起来,以便成功发送到打印机。(虽然我可能在这一点上弄错了)

基本上,您不会从 Ghostscript 中获得与 PDF 大小相似的 PCL。

于 2012-05-27T12:07:42.633 回答
3

这是一种“防止 Ghostscript 光栅化文本”的方法。但它的输出将是 PostScript。但是,您可以在附加步骤中成功将此 PostScript 转换为 PCL5e。

该方法会将所有字形转换为其PostScript输出的轮廓形状,并且不适用于其 PDF 或 PCL 输出。这里的关键是 -dNOCACHE 参数:

gs -o somepdf.ps -dNOCACHE -sDEVICE=pswrite somepdf.pdf

当然,将字体字形转换为轮廓将比保留原始字体嵌入更多空间,因为“字体”是一个空间优化的概念,用于存储、检索和渲染字形形状。

一旦您有了这个 PostScript,您就可以借助您之前尝试的用于 PDF 输入的任何一种方法(包括 {Apache?} FOP)将其转换为 PCL5e。

但是,我不知道输出是否会比带有光栅化字体(甚至是有益的光栅化页面)的版本小得多。但这可能值得一试。

现在也投票否决这个答案......


更新

显然,从 9.15 版(将于 2014 年 9 月/10 月发布)开始,Ghostscript 将支持一个新的命令行参数:

 -dNoOutputFonts

这将导致输出设备pdfwriteps2write并“eps2write'扁平'字形转换为'基本'标记操作(而不是将字体写入输出)”

这意味着上面的命令应该被替换为:

 gs -o somepdf.ps -dNoOutputFonts -sDEVICE=ps2write somepdf.pdf

注意事项:我已经使用基于当前 Git 源代码的自编译 Ghostscript 对一些输入文件进行了测试。它在每种情况下都完美无缺。

于 2012-05-27T15:45:02.640 回答