使用pdftk可以使用以下命令从 pdf 中提取页面范围
pdftk a.pdf cat 124-end output b.pdf dont_ask
我有一堆大约 500 页、超过 100 MB 的巨大 PDF,是否可以自动将它们分割成最大 5 MB 的块?
答案1
我发现这个Python脚本叫做smpdf具有此功能的。该脚本是用德语(其中部分)编写的,但很容易弄清楚它在做什么以及如何使用它。这个需要pypdf。
安装与设置
首先下载脚本:
svn checkout http://smpdf.googlecode.com/svn/trunk/ smpdf
然后下载并安装 PyPdf:
wget http://pybrary.net/pyPdf/pyPdf-1.13.tar.gz
tar zxvf pyPdf-1.13.tar.gz
cd pyPdf-1.13
sudo python setup.py install
cd ../smpdf
接下来我从以下位置下载了一个 PDF 样本文件example5.com。具体这个文件。
smpdf的用法:
[ERROR] Ung�ltiger Aufruf
===========================================================================
PDF Manipulator
(c) 2007 by Franz Buchinger
---------------------------------------------------------------------------
Verwendung:
pdfm split 5 file.pdf Datei file.pdf in PDFs mit jeweils 5 Seiten splitten
pdfm chunk 3 file.pdf Datei file.pdf in max. 3 MB grosse PDFs splitten
pdfm burst file.pdf Jede Einzelseite in file.pdf in ein PDF schreiben
pdfm merge f1.pdf f2.pdf f1.pdf und f2.pdf in ein PDF mergen
pdfm merge output.pdf dir mergt alle PDFs im Verzeichnis dir in die Datei output.pdf
pdfm info f1.pdf zeigt Dokumentinformationen (Groesse, Seitenzahl, Titel,..) zu f1.pdf an
我们下载的示例文件如下:
$ pdfinfo chickering04a.pdf
Title: chickering04a.dvi
Creator: dvips(k) 5.94a Copyright 2003 Radical Eye Software
Producer: AFPL Ghostscript 8.0
CreationDate: Fri Oct 8 17:53:18 2004
ModDate: Fri Oct 8 17:53:18 2004
Tagged: no
Pages: 44
Encrypted: no
Page size: 612 x 792 pts (letter)
File size: 386372 bytes
Optimized: no
PDF version: 1.3
因此该示例文件有 44 页,大小为 386KB。使用以下命令,我们可以将 PDF 拆分为 ~0.1MB (~100KB) 的块文件。
python pdfsm.py chunk 0.1 chickering04a.pdf
产生以下输出:
======== NEUES PDF ========
Seite:0, Groesse: 12696
Seite:1, Groesse: 11515
Seite:2, Groesse: 17209
Seite:3, Groesse: 17411
Seite:4, Groesse: 17060
Seite:5, Groesse: 26303
======== NEUES PDF ========
Seite:9, Groesse: 31014
Seite:10, Groesse: 27666
Seite:11, Groesse: 18548
...
...
======== NEUES PDF ========
Seite:40, Groesse: 19059
Seite:41, Groesse: 20912
Seite:42, Groesse: 17685
Seite:43, Groesse: 5362
我们的目录现在包含以下文件:
$ ls -l
total 1220
-rw-rw-r-- 1 saml saml 74471 May 12 09:23 chickering04a-chunk001.pdf
-rw-rw-r-- 1 saml saml 78673 May 12 09:23 chickering04a-chunk002.pdf
-rw-rw-r-- 1 saml saml 89259 May 12 09:23 chickering04a-chunk003.pdf
-rw-rw-r-- 1 saml saml 92569 May 12 09:23 chickering04a-chunk004.pdf
-rw-rw-r-- 1 saml saml 96953 May 12 09:23 chickering04a-chunk005.pdf
-rw-rw-r-- 1 saml saml 86390 May 12 09:23 chickering04a-chunk006.pdf
-rw-rw-r-- 1 saml saml 90815 May 12 09:23 chickering04a-chunk007.pdf
-rw-rw-r-- 1 saml saml 92094 May 12 09:23 chickering04a-chunk008.pdf
-rw-rw-r-- 1 saml saml 78909 May 12 09:23 chickering04a-chunk009.pdf
-rw-rw-r-- 1 saml saml 386372 May 12 08:30 chickering04a.pdf
-rwxrwxr-x 1 saml saml 9324 May 12 07:41 pdfsm.py
drwxr-xr-x 4 saml saml 4096 May 12 08:25 pyPdf-1.13
-rw-rw-r-- 1 saml saml 35699 May 12 08:24 pyPdf-1.13.tar.gz
我使用这个“hacked”命令来显示生成的 PDF 文件的统计信息:
$ printf "%7s%6s\n" "# pages" "size"; for i in chickering04a-chunk00*; do pdfinfo $i | egrep "File size|Pages"|cut -d":" -f2;done|sed 's/[\t ]\+/ /'|paste - -
# pages size
5 74471 bytes
3 78673 bytes
3 89259 bytes
5 92569 bytes
4 96953 bytes
3 86390 bytes
5 90815 bytes
6 92094 bytes
5 78909 bytes
答案2
pdftk
没有这样的选项。但您可以将整个文件分解为单页,并将这些页面组合起来,直到超过 5Mb。
与组合 PDF 相比,单页 PDF 会产生一些开销(导致块在超过 5Mb 之前可能会多一页),因此会存在一点误差范围。但平均每个文件 0.2M 可能是可以接受的。
我有一个程序(Python)可以在将扫描页面合并到 TIFF 文件中时执行此操作,因为我的 tiff→djvu 转换有大小限制。
答案3
如上所述,pdftk 不提供此类选项,但 PDFSam 似乎提供了:
通过按大小分割模块,您可以告诉 PDFsam Basic 将 PDF 文件分割为给定大小的较小文件。例如,将 10Mb PDF 拆分为 3 个文件,大小分别为 4Mb、4Mb 和 2Mb。鉴于 PDF 文件的性质,并不总是可以获得准确的结果。
由于原始问题将“命令行”作为标签,因此该工具的实际正确名称是 insteaf sejda-console
(PDFSam UI 的后端):