我正在尝试将PDF文档的页面转换为Linux机器上的图像文件。我正在使用Imagemagick,它适用于英文PDF,例如:
http://arbsq.net/dev/test_en.pdf
但对于阿拉伯语,对于以下文件http://arbsq.net/dev/test_pdf_ar_small.pdf(您可以清楚地看到它没有损坏),当我运行convert命令时,它会显示以下错误消息:
-bash-3.2$ convert test_pdf_ar_small.pdf[1] small-1.jpg
**警告:读取XREF表时发生错误 * 文件已损坏。转换或传输文件时出现问题可能是由于 *造成的。 ** Ghostscript将尝试恢复数据。错误:/未定义 / BXlevel操作数堆栈:65 0 1 --dict:6/6(ro)(G) - obj 执行堆栈:%interp_exit .runexec2 --nostringval--
--nostringval---nostringval-- 2%stopped_push --nostringval-- --nostringval-- --nostringval-- false 1%stopped_push 1 3%oparray_pop 1 3%oparray_pop 1 3
%oparray_pop --nostringval-- --nostringval-- --nostringval--
--nostringval---nostringval---nostringval-- false 1%stopped_push --nostringval--%loop_continue --nostringval-- 字典堆栈: - dc:1129/1686(ro)(G) - --dict:0/20(G) -
--dict:107/200(L) - - dict:107/200(L) - - dict:104/127(ro)(G) - --dict:241/347(ro)( G) - --dict:18/24(L) - 当前分配模式是本地ESP Ghostscript 815.02:不可恢复的错误,退出代码1 转换:Postscript委托失败test_pdf_ar_small.pdf'. convert: missing an image filename
small-1.jpg'。
我尝试使用ghostscript打开PDF,似乎也出现了同样的错误:
-bash-3.2$ gs test_pdf_ar_small.pdf
ESP Ghostscript 815.02(2006-04-19)版权所有(C)2004 artofcode LLC, 贝尼西亚,加利福尼亚州。版权所有。该软件附带NO 保证:有关详细信息,请参阅PUBLIC文件。 **警告:错误 在读取XREF表时发生。 * 该文件已经存在 破损。这可能是由于问题导致 *造成的 转换或转移文件。 ** Ghostscript会尝试 恢复数据。错误:/ / BXlevel操作数堆栈中未定义:
65 0 1 --dict:6/6(ro)(G) - obj执行堆栈:
%interp_exit .runexec2 --nostringval-- --nostringval--
--nostringval-- 2%stopped_push --nostringval-- --nostringval-- --nostringval-- false 1%stopped_push 1 3%oparray_pop 1 3%oparray_pop 1 3%oparray_pop
--nostringval---nostringval---nostringval---nostringval---nostringval---nostringval-- false 1%stopped_push --nostringval--%loop_continue --nostringval-- Dictionary stack: - -dict:1117/1686(ro)(G) - - dict:0/20(G) - --dict:107/200(L) - - dict:107/200(L) - --dict:104/127(ro)(G) - --dict:241/347(ro)(G) - --dict:18/24(L) - 当前的分配模式是本地的ESP Ghostscript 815.02 :不可恢复的错误,退出代码1
我尝试使用Perl中的图像魔法,但没有使用相同的错误。
然而,当我尝试在Windows上使用ghostscript时,它能够打开文件,但有一些警告。所以问题就是在Linux上打开这些PDF文件。
有没有办法处理这些错误,或者从PDF中提取图像的替代方法?
答案 0 :(得分:1)
您必须先更新 ghostscript 并以某种方式告诉 imagemagick 使用它(通过调整 $ PATH 或 delegate.xml )。
但是,你也可以直接使用 ghostscript ,这里有一个例子:
gs -dNOPAUSE -sDEVICE=jpeg -dFirstPage=1 -dLastPage=1 \
-sOutputFile=out%d.jpg \
-dJPEGQ=100 -r300x300 -q \
test_pdf_ar_small.pdf -c quit
请注意-sOutputFile
选项,它是输出文件名的模板(其中%d
是从FirstPage
到LastPage
的整数范围),因此在上面的示例中单个输出文件将被称为out1.jpg
。
致信@mkl以获得更好的gs错误解释。