我正在尝试使用 ghostscript 执行以下操作:
将一个多页 PDF 文件(约 3,000 页,200mb 文件)转换为:
PDF 每页一个文件,并将每个(页面/文件)转换为 EPS 或 PS(post script(最好))。
例子:
hello.pdf (10 pages)
将产生:
hello1.ps (page 1 out of 10)
hello2.ps
hello3.ps
...
hello10.ps
我该怎么做?我已经尝试了 4 天,但还是没找到办法。
我有一个已尝试过的脚本(不起作用):
Note: Windows(7) user here.
gs -sDEVICE=epswrite -o documentname-%.eps documentname.pdf
我也不知道如何导航到我的文件所在的目录(也无法弄清楚)。如果你能,请告诉我怎么做。
十分感谢你。
答案1
首先,我使用的是 Linux,而不是 Windows,所以我无法测试这一点,但我认为类似这样的事情是正确的。(我几乎想告诉你在虚拟机中安装 Linux,因为使用成熟的操作系统做这样的事情要容易得多,但无论如何,这是我使用 Windows 的最佳选择。)
首先,打开 Command/Dos 提示符。
要导航到文件所在的文件夹,请使用 CD 命令,后跟文件的完整路径(用引号括起来)。例如,如果文件位于“C:\Users\Somebody\Documents and Settings\My Documents\PDFs\”,则键入:
cd "C:\Users\Somebody\Documents and Settings\My Documents\PDFs\"
我认为另一种方法是简单地在与 PDF 相同的目录中创建一个批处理文件,然后从那里运行该批处理文件。
好的,现在我认为您必须使用 Ghostscript 可执行文件的完整路径,您必须自己找到它。我假设它是“C:\Program Files (x86)\gs\gs9.00\bin\gswin32c.exe”,但您需要在自己的计算机上仔细检查。如果您使用的是其他版本的 ghostscript 或 32 位版本的 Windows 7,它将位于其他地方。另外,请确保您使用的是 gswin32c.exe 而不是 gswin32.exe,因为它们是不同的。
现在找出这个 PDF 到底有多少页。我知道如何在 Linux 中使用命令来做到这一点,但在 Windows 中我不知道。我假设它是 3002。
现在在命令提示符下输入此命令(全部一行):
FOR \L %G IN (1,1,3002) DO "C:\Program Files (x86)\gs\gs9.00\bin\gswin32c.exe" -dBATCH -dSAFER -dNOPAUSE -dFirstPage=%G -dLastPage=%G -sDEVICE=pswrite -o hello%G.ps hello.pdf
这是我最好的猜测。但希望实际使用 Windows 的人可以确认这有效。
对于 epsfiles,请更改-sDEVICE#pswrite
为-sDEVICE=epswrite
并更改hello%G.ps
为hello%G.eps
。
如果您使用批处理文件,请在所有地方使用 %%G 而不是 %G,并将 = 更改为 #。
如果将“hello.pdf”更改为带有空格的内容,请使用引号,“hello world.pdf”。“hello%G.ps”也一样。
在 GNU/Linux (或 Mac OS X) 上,相应的命令是:
for G in {1..3002} ; do gs -dSAFER -dBATCH -dNOPAUSE -dFirstPage=$G -dLastPage=$G -sDEVICE=pswrite -o "hello$G.ps" "hello.pdf" ; done
为了让它自动计算要处理的页数,如果你安装了 seq 和 poppler 实用程序(我相信它们是 Ubuntu 的默认程序),你可以使用:
for G in $(seq 1 $(pdfinfo academicregs.pdf | sed -n 's/Pages:[^0-9]*\([0-9]*\).*/\1/p')) ; do gs -dSAFER -dBATCH -dNOPAUSE -dFirstPage=$G -dLastPage=$G -sDEVICE=pswrite -o "hello$G.ps" "hello.pdf" ; done
我已测试过它们并且它们能够正常工作。
答案2
frabjous 的命令可以工作,但是它使得像这样的简单任务变得比需要的更复杂。
他为 PDF 的每个页面运行一次单独的 Ghostscript 命令,通过参数仅选择所需的 PDF 页面-dFirstPage=... -dLastPage=...
。(他的 Windows 版本也有一点拼写错误:应该是for /L %G in...
-- 而不是for \L %G in...
)
这也是不必要的缓慢,因为它为 3002 页的 PDF 运行 3002 个命令。
您可以在单个 Ghostscript 命令传递中实现相同的操作,而无需 3002 次循环。在 Windows 上:
gswin32c.exe ^
-o hello%04d.eps ^
-sDEVICE=epswrite ^
hello.pdf
在 Linux 或 Mac OS X 上:
gs \
-o hello%04d.eps \
-sDEVICE=epswrite \
hello.pdf
输出名称中的部分%04d
将为输出 EPS 文件创建 4 位数字(页面)编号,用前导零填充未使用的数字(这不是所需输出示例所使用的)。