Dividindo PDF grande em arquivos pequenos

2

Usando pdftk é possível extrair intervalos de páginas de um pdf usando

pdftk a.pdf cat 124-end output b.pdf dont_ask

Eu tenho um monte de PDFs enormes com cerca de 500 páginas e mais de 100 MB, é possível dividir automaticamente em pedaços de no máximo 5 MB?

    
por Julian 12.05.2013 / 13:04

2 respostas

5

Eu encontrei este script python chamado smpdf que possui esse recurso. Este script é escrito em alemão (algumas delas), mas é fácil descobrir o que está fazendo e como usá-lo. Requer PyPdf .

Instalação e ampliação Configurar

Primeiro faça o download do script:

svn checkout http://smpdf.googlecode.com/svn/trunk/ smpdf

Em seguida, faça o download & instale o 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

Em seguida, fiz o download de um arquivo PDF de amostra de example5.com . Especificamente, este arquivo .

Uso do 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

O arquivo de amostra que baixamos é o seguinte:

$ 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

Portanto, este arquivo de amostra tem 44 páginas e tem 386 KB de tamanho. Usando o seguinte comando, podemos dividir o PDF em arquivos de blocos que são ~ 0.1MB (~ 100KB).

python pdfsm.py chunk 0.1 chickering04a.pdf

Que produz a seguinte saída:

    ======== 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

Nosso diretório agora contém os seguintes arquivos:

$ 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

Eu usei esse comando "hackeado" para mostrar as estatísticas dos arquivos PDF gerados:

$ 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
    
por 12.05.2013 / 15:52
1

pdftk não tem essa opção. Mas você pode estourar o arquivo completo em páginas únicas e combinar conjuntos dessas páginas até ultrapassar 5Mb.

Haveria uma pequena margem de erro como uma única página O PDF tem alguma sobrecarga em comparação com as combinadas (resultando em partes que poderiam ter mais uma página antes de ultrapassar os 5Mb). Mas com uma média de 0,2M por arquivo que é provavelmente aceitável.

Eu tenho um programa (em Python) que faz isso combinando páginas digitalizadas em um arquivo TIFF, já que minha conversão tiff → djvu tem um limite de tamanho.

    
por 12.05.2013 / 13:36