Jul*_*ian 2 command-line pdf pdftk
使用pdftk可以使用以下命令从 pdf 中提取页面范围
pdftk a.pdf cat 124-end output b.pdf dont_ask
Run Code Online (Sandbox Code Playgroud)
我有一堆大约 500 页和超过 100 MB 的巨大 PDF,是否可以自动将它们分成最大 5 MB 的部分?
我发现这个名为smpdf 的python 脚本具有此功能。这个脚本是用德语(其中一些)编写的,但很容易弄清楚它在做什么以及如何使用它。它需要PyPdf。
首先下载脚本:
svn checkout http://smpdf.googlecode.com/svn/trunk/ smpdf
Run Code Online (Sandbox Code Playgroud)
然后下载并安装 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
Run Code Online (Sandbox Code Playgroud)
接下来,我从example5.com下载了一个示例 PDF 文件。特别是这个文件。
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
Run Code Online (Sandbox Code Playgroud)
我们下载的示例文件如下:
$ 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
Run Code Online (Sandbox Code Playgroud)
所以这个示例文件有 44 页,大小为 386KB。使用以下命令,我们可以将 PDF 拆分为 ~0.1MB (~100KB) 的块文件。
python pdfsm.py chunk 0.1 chickering04a.pdf
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
======== 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
Run Code Online (Sandbox Code Playgroud)
我们的目录现在包含以下文件:
$ 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
Run Code Online (Sandbox Code Playgroud)
我使用这个“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
Run Code Online (Sandbox Code Playgroud)