【问题标题】:What does dereference of free object in Ghostscript mean?Ghostscript中自由对象的取消引用是什么意思?
【发布时间】:2022-11-10 22:51:09
【问题描述】:

尝试使用 Ghostscript 压缩 pdf 时出现以下错误:

输出 pdf 缺少图像和文本。 (注:缺少的图片本身是pdf格式的。)

我的代码正在工作,因为我正在获取输出 pdf。我的输入 pdf 是 30 MB,我的输出 pdf 是 9 MB,如果需要,请说明如何共享文件,因为它们太大而无法在此处上传。

生成pdf的代码:

process = subprocess.Popen(['pdflatex', self.tex_file_location],
                        stdout=subprocess.PIPE, 
                        stderr=subprocess.PIPE)
stdout, stderr = process.communicate()

压缩pdf的代码:

subprocess.call([gs, '-sDEVICE=pdfwrite', '-dCompatibilityLevel=1.5',
                    '-dPDFSETTINGS={}'.format(quality[power]),
                    '-dNOPAUSE', '-dQUIET', '-dBATCH',
                    '-sOutputFile={}'.format(output_file_path),
                     input_file_path]

gs - Ghostscript Exe 的位置

input_file_path - 带有输入 pdf 目录的字符串。

output_file_path - 带有输出 pdf 目录的字符串。

我缺少任何选项或设置吗?任何帮助,将不胜感激。

【问题讨论】:

  • 这意味着出了点问题。一个内部对象被释放,然后一些东西试图删除对它的引用。如果另一个对象持有引用,它不应该被释放。您应该为此打开一个错误报告,但我建议您首先尝试从外壳而不是您的应用程序复制它。将 PDF 文件附加到错误报告中并给出您使用的命令行,同时说明正在使用的 Ghostscript 版本。请注意,Ghostscript 的 pdfwrite 设备不会压缩 PDF 文件。它会生成新的 PDF 文件,根据使用的选项,这些文件可能会更小。
  • 啊,更仔细地阅读文本... PDF 文件尝试使用已在交叉引用表中标记为免费(未使用)的对象(1163)。您不能使用免费对象。因此 PDF 文件可能已损坏,我需要查看该文件以进一步评论。图像不能是'pdf格式'没有'pdf格式'图像类型,PDF可以读取多种类型的位图图像但它没有自己的类型。

标签: python python-3.x pdf ghostscript pdflatex


【解决方案1】:

只是为了解决这个问题,并不是说它解决了我的问题,而是我陷入了一个兔子洞,我能找到的唯一解释是,在压缩包含矢量图像或 pdf 图像的 pdf 时,Ghostscript 中存在一个错误,不清楚是哪个。

目前我已经放弃使用 Ghostscript。

【讨论】:

    猜你喜欢
    • 2021-01-10
    • 2012-08-15
    • 2011-06-12
    相关资源
    最近更新 更多