将大 PDF 拆分为小文件

将大 PDF 拆分为小文件

使用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 的后端):

相关内容