ps2pdf从paps-created-ps文件创建一个非常大的pdf文件

时间:2014-09-26 18:58:56

标签: linux bash command-line pdf-generation postscript

在linux中,我使用ps2pdf将文本文件报告转换为bash脚本中的pdf。

要为ps文件提供ps2pdf,我使用paps命令因为UTF8编码。

问题是来自ps2pdf的pdf文件比从paps创建的ps文件大30倍。

上一篇,我使用a2ps将文本转换为ps,然后输入到ps2pdf,这样的pdf输出是正常大小而且不大。

有没有办法从paps和ps2pdf减少pdf大小?或者我做错了什么?

我使用的命令如下。

paps --landscape --font="Freemono 10" textfile.txt > textfile.ps
ps2pdf textfile.ps textfile.pdf

非常感谢。

3 个答案:

答案 0 :(得分:1)

对于ps2pdf,最简单的方法是通过指定纸张尺寸来控制输出尺寸。 示例命令是:

ps2pdf -sPAPERSIZE=a4 -dOptimize=true -dEmbedAllFonts=true YourPSFile.ps
  • ps2pdf是ghostscript的包装器(ps2pdf由ghostscript包拥有)
  • 使用-sPAPERSIZE=来定义纸张尺寸。想知道有效的PAPERSIZE值?见[http://ghostscript.com/doc/current/Use.htm#Known_paper_sizes此处]
  • -dOptimize=true让创建的PDF针对加载进行优化
  • -dEmbedAllFonts=true使字体看起来总是很好

所有这些都来自:https://wiki.archlinux.org/index.php/Ps2pdf

答案 1 :(得分:1)

我认为他的意思是磁盘上的大小,而不是输出媒体的大小。 “最有可能”的情况通常是源包含一个大的DCT编码图像(JPEG),该图像被解码,然后使用类似flate的东西无损压缩到PDF文件中。

但这不可能是这种情况,因为它显然只是文本。因此,下一个最可能的问题是文本正在被光栅化,这表明PostScript中有一些奇怪的字体,如果你使用的是UTF-8文本,它可能会像使用TrueType后代字体的CIDFont一样构建一些东西。

但是,由于没有给出Ghostscript的版本,而且我们没有要查看的文件,所以真的无法分辨。旧版本的pdfwrite设备在创建最佳文件时表现不佳,特别是来自CIDFonts。

设置'Optimize = true'实际上不会对当前版本的pdfwrite执行任何操作,这是我们不再实现的Acrobat Distiller参数。较旧版本的Ghostscript确实使用了它,但输出没有正确地线性化。

对于较新版本的正确参数是'-dFastWebView',假设从Web 加载时更快如果客户端可以处理此格式。鉴于其指定的疯狂方式,世界上几乎没有观众。但是,该文件在最新版本中已正确构建,因此如果您可以找到支持它的查看器,则可以使用此文件(以使PDF文件稍大一些为代价)

如果你想将一个URL发布到一个出现问题的PostScript文件,我可以看一下,但没有它我真的没什么可说的。

<强>更新

问题是paps文件,在PostScript意义上它实际上根本不包含任何文本。

每个字符都存储为一个过程,其中绘制路径然后填充。这是 NOT 存储在字体中,只存储在字典中。页面上的所有内容都以paps'语言'存储在字符串中。在文本的情况下,这只是调用相关字形的过程

现在,因为这不是一种字体,所以pdfwrite(以及几乎所有其他PostScript消费者)只需将重复的过程视为一系列路径和填充,这正是写入PDF输出的内容文件。

现在,PDF文件通常包含如下文字:

/Helvetica 20 Tf
(AAA) Tj

非常紧凑,字体将包含绘制'A'的程序,因此我们只包含一次。

同一文本的paps输出看起来像(高度截断):

418.98 7993.7 m
418.98 7981.84 l
415.406 7984.14 411.82 7985.88 408.219 7987.04 c
...
... 26 lines omitted
...
410.988 7996.3 414.887 7995.19 418.98 7993.7 c
f
418.98 7993.7 m
418.98 7981.84 l
415.406 7984.14 411.82 7985.88 408.219 7987.04 c
...
... 26 lines omitted
...
410.988 7996.3 414.887 7995.19 418.98 7993.7 c
f
418.98 7993.7 m
418.98 7981.84 l
415.406 7984.14 411.82 7985.88 408.219 7987.04 c
...
... 26 lines omitted
...
410.988 7996.3 414.887 7995.19 418.98 7993.7 c
f

你可以清楚地看到更大。而对于字体,我们只包括绘制字形一次的指令,然后仅使用几个字节来绘制每个出现,使用paps输出我们在每次绘制时都包含字形的绘制指令。

所以问题就是paps发布PostScript的方式,并且pdfwrite没有什么可以做的。

那就是说,我看到你使用的Ghostscript 8.71现已有4年了,你应该考虑升级。

答案 2 :(得分:1)

作为paps的作者,我同意上面对paps内部工作的描述。实际上,我选择使用postscript语言创建自己的字体机制。这是历史,因为我刚刚发布了一个新版本的paps,它使用cairo作为postscript,pdf或svg渲染。这比paps输出更紧凑,尤其是w.r.t.做ps2pdf之后的结果。请查看http://github.com/dov/paps