GNU/Linux >> Znalost Linux >  >> Linux

Rozdělte stránky PDF na více stránek

Můžete to vyřešit pomocí Ghostscriptu. pdftk sám to nedokáže (podle mého nejlepšího vědomí). Dám vám kroky příkazového řádku, jak to udělat ručně. Bude snadné to naskriptovat jako proceduru, také s různými parametry pro velikosti stránek a čísla stránek. Ale řekl jsi, že to zvládneš sám;-)

Jak to vyřešit pomocí Ghostscriptu...

...a pro zajímavost, nedávno jsem to ne udělal se vstupním souborem obsahujícím „zdvojené“ stránky, ale soubor se „zvýšením výšek“. Odpověď na tento případ si můžete přečíst zde .

Váš případ je ještě jednodušší. Zdá se, že máte něco podobného:

+------------+------------+   ^
|            |            |   |
|      1     |      2     |   |
|            |            | 595 pt
|            |            |   |
|            |            |   |
|            |            |   |
+------------+------------+   v
             ^
            fold
             v
+------------+------------+   ^
|            |            |   |
|      3     |      4     |   |
|            |            | 595 pt
|            |            |   |
|            |            |   |
|            |            |   |
+------------+------------+   v
<---------- 842 pt -------->

Chcete vytvořit 1 PDF se 4 stránkami, z nichž každá má velikost 421 bodů x 595 bodů.

První krok

Nejprve extrahujeme levé části z každé vstupní stránky:

gs \
    -o left-sections.pdf \
    -sDEVICE=pdfwrite \
    -g4210x5950 \
    -c "<</PageOffset [0 0]>> setpagedevice" \
    -f double-page-input.pdf

Co dělaly tyto parametry?

Za prvé, vězte, že v PDF 1 palec ==72 bodů . Pak zbytek je:

  • -o ...............: Jména výstupního souboru. Implicitně také používá -dBATCH -dNOPAUSE -dSAFER .
  • -sDEVICE=pdfwrite : chceme PDF jako výstupní formát.
  • -g................: nastavuje velikost výstupního média v pixelech. Výchozí rozlišení pdfwrite je 720 dpi. Vynásobte tedy 10, abyste získali shodu pro PageOffset.
  • -c "..............: požádá Ghostscript, aby zpracoval daný fragment kódu PostScript těsně před hlavním vstupním souborem (za kterým musí následovat -f ).
  • <</PageOffset ....: nastavuje posun obrazu stránky na médiu. (Samozřejmě pro levé stránky posun o [0 0] nemá žádný skutečný účinek.)
  • -f ...............: zpracovat tento vstupní soubor.

Jakého výsledku dosáhl poslední příkaz?

Tento:

Output file: left-sections.pdf, page 1
+------------+  ^
|            |  |
|     1      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v

Output file: left-sections.pdf, page 2
+------------+  ^
|            |  |
|     3      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v
<-- 421 pt -->

Druhý krok

Další, správné sekce:

gs \
    -o right-sections.pdf \
    -sDEVICE=pdfwrite \
    -g4210x5950 \
    -c "<</PageOffset [-421 0]>> setpagedevice" \
    -f double-page-input.pdf

Všimněte si záporného posunu, protože stránku posouváme doleva, zatímco oblast zobrazení zůstává nehybná.

Výsledek:

Output file: right-sections.pdf, page 1
+------------+  ^
|            |  |
|     2      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v

Output file: right-sections.pdf, page 2
+------------+  ^
|            |  |
|     4      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v
<-- 421 pt -->

Poslední krok

Nyní spojíme stránky do jednoho souboru. Mohli bychom to udělat také pomocí ghostscriptu, ale použijeme pdftk místo toho, protože je to pro tuto úlohu rychlejší:

pdftk \
  A=right-sections.pdf \
  B=left-sections.pdf \
  shuffle \
  output single-pages-output.pdf
  verbose

Hotovo. Zde je požadovaný výsledek. 4 různé stránky o velikosti 421 x 595 bodů

Výsledek:

+------------+ +------------+ +------------+ +------------+   ^
|            | |            | |            | |            |   |
|     1      | |     2      | |     3      | |     4      |   |
|            | |            | |            | |            |5595 pt
|            | |            | |            | |            |   |
|            | |            | |            | |            |   |
|            | |            | |            | |            |   |
+------------+ +------------+ +------------+ +------------+   v
<-- 421 pt --> <-- 421 pt --> <-- 421 pt --> <-- 421 pt -->

Existuje nástroj pdfposter, který lze použít k vytvoření PDF s několika stránkami pro jednu vstupní stránku (skládání nebo sekání stránek). Je podobný nástroji poster , který dělá totéž pro PostScriptové soubory.


Takže po mnohem větším hledání (zdá se, že "PDF cut pages" je mnohem lepší vyhledávání), našel jsem malý skript s názvem unpnup který používá poster , převod PDF/PS a pdftk dělat přesně to, co potřebuji. Je to trochu daleko, ale je mnohem lepší než ostatní metody, které jsem našel (jako je použití imagemagick), protože stránky nerastruje, než je vyplivne.

Pro případ, že by mobileread z nějakého důvodu zmizelo, jádro skriptu (licencované pod licencí GPLv2 nebo novější od Haralda Hackenberga <hackenberggmx.at> ) je následující:

pdftk "$1" burst
for file in pg*.pdf;
do
    pdftops -eps $file
    poster -v -pA4 -mA5 -c0% `basename $file .pdf`.eps > `basename $file .pdf`.tps
    epstopdf `basename $file .pdf`.tps
done
pdftk pg*.pdf cat output ../`basename $1 .pdf`_unpnuped.pdf

Linux
  1. Jak rozdělit velký archiv „tar“ na více souborů určité velikosti

  2. Příkaz pro komprimaci více adresářů do jednotlivých souborů ZIP?

  3. Jak sloučit více připojení k internetu do jednoho?

  1. Jak zkomprimovat více souborů do archivu .xz?

  2. Jak gzipovat více souborů do jednoho souboru gz?

  3. Linux čtení swap zpět do paměti

  1. Jak rozdělit jeden soubor do více souborů na základě řádků

  2. Vim:Jak otevřít více souborů na různých kartách?

  3. Sloučit / převést více souborů PDF do jednoho PDF