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