GhostScript 新手帮助 - 将多页 PDF 文件拆分为多个单页 PS 或 EPS 文件

GhostScript 新手帮助 - 将多页 PDF 文件拆分为多个单页 PS 或 EPS 文件

我正在尝试使用 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.pshello%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 位数字(页面)编号,用前导零填充未使用的数字(这不是所需输出示例所使用的)。

相关内容