User Tools

Site Tools


doc:appunti:prog:pdf

This is an old revision of the document!


Ricette PDF e PostScript

Ruotare e scalare automaticamente un PDF per la stampa

Problema: un documento PDF in A3 orientamento landscape da mandare in stampa automaticamente su carta A4.

Il documento originale contiene le informazioni sul formato pagina (in punti) e sull'orientamento:

/Type/Page/MediaBox [0 0 842 1191]
/Rotate 90

Purtroppo il comando gs come filtro di stampa o attraverso il comando pdf2ps produce un documento PostScript che include il seguente snippet:

%%PageBoundingBox: 0 0 1191 842

cioè la pagina rimane un A4 landscape e questo crea problemi in fase di stampa.

Una soluzione è utilizzare pdftops (fornito dal pacchetto poppler-utils) che non aggiunge le informazioni sulla PageBoundingBox e quindi effettuare la rotazione/ridimensionamento con epsffit (pacchetto psutils):

pdftops -eps document.pdf - | epsffit -m -c 0 0 595 842 > document.eps

L'intero documento originale viene incapsulato e ridimensionato in un A4, quindi è bene che sia di una singola pagina. L'opzione -m seleziona l'orientamento più conveniente.

Shift di una pagina PostScript

Una stampa preparata con gs a partire da un file PostScript può essere shiftata con un opportuno comando PostScript.

Basta creare un file (ad esempio offset.ps) che indichi ad esempio 1/2 pollice (36 punti) di offset verso sinistra e 1 pollice (72 punti) verso il basso:

<</PageOffset [-36 72]>> setpagedevice

quindi creare la pagina per la stampa con:

gs -dNOPAUSE -dQUIET -sDEVICE=laserjet -r600x600 -sOutputFile=file.pcl offset.ps file.ps -c quit

Rasterizzazione di un PDF

pdftoppm -r 360 file.pdf file_ppm
convert -density 150 -quality 100 input.pdf output.jpg

per rimuovere eventuali trasparenze e sostituirle con uno sfondo bianco e per forzare l'output in RGB (altrimenti si potrebbe avere l'errore “RGB color space not permitted on grayscale PNG”):

convert -density 300 -background white -alpha remove -define png:color-type=6 input.pdf output.png

Potrebbe capitare l'errore durante la conversione:

convert: attempt to perform an operation not allowed by the security
policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.

In tal caso è necessario rimuovere queste righe dal file /etc/ImageMagick-6/policy.xml:

  <!-- disable ghostscript format types -->
  <policy domain="coder" rights="none" pattern="PS" />
  <policy domain="coder" rights="none" pattern="PS2" />
  <policy domain="coder" rights="none" pattern="PS3" />
  <policy domain="coder" rights="none" pattern="EPS" />
  <policy domain="coder" rights="none" pattern="PDF" />
  <policy domain="coder" rights="none" pattern="XPS" />

Estrazione di alcune pagine

Il comando pdftk è contenuto nell'omonimo pacchetto Debian. Come estrarre da pag. 6 a pag. 14:

pdftk A=document.pdf cat A6-14 output document_p6-14.pdf

Unione di più documenti

Il comando pdfunite è contenuto nel pacchetto Debian poppler-utils:

pdfunite part1.pdf part2.pdf document.pdf

oppure si utilizza il pdftk:

pdftk "part1.pdf" "part2.pdf" cat output "document.pdf"

Conversione di raster in PDF

Per convertire correttamente in PDF definendo la dimensione della pagina e la risoluzione, vedere le istruzioni per la conversione di immagini acquisite con scanner.

Modifica del formato pagina

Se un documento è in formato diverso da quello desiderato (lo si appura con pdfinfo) si può alterare il formato pagina con pdfjam (dal pacchetto Debian texlive-extra-utils), ecco un esempio di conversione in formato A4:

pdfjam --outfile document-a4.pdf --paper a4paper document.pdf

Creazione dei bookmark (indice)

Anzitutto si estrae dal pdf i metadati esistenti:

pdftk document.pdf dump_data output pdf_data.txt

nel file pdf_data.txt che viene generato è possibile aggiungere sezioni del tipo:

BookmarkBegin
BookmarkTitle: L'et&#224; della pietra
BookmarkLevel: 1
BookmarkPageNumber: 159

Eventuali caratteri non ASCII vanno codificati con il codice numerico HTML. Infine si genera il nuovo pdf prendendo i metadati dal file modificato:

pdftk document.pdf update_info pdf_data.txt output new_document.pdf

Conversione da epub a PDF per smartphone

Il formato epub è sicuramente più flessibile perché si adatta automaticamente alle dimensioni dello schermo del viewer, ecc., ma non tutti hanno un visualizzatore epub sul telefonino, mentre un visualizzatore PDF è molto più comune.

Ecco quindi come convertire nel formato PDF ingrandendo il testo in modo che sia leggibile in modalità pagina intera senza dover effettuare zoom. Inoltre la dimensione della pagina è stata impostata con un rapporto larghezza:altezza pari a 9:15, in modo che sfrutti quasi tutto lo schermo di uno smartphone 9:16:

ebook-convert input_file.epub output_file.pdf --unit point --custom-size 594x992 --base-font-size 19

Il comando ebook-convert viene installato con il pacchetto Debian calibre.

Creazione PDF da pagine SVG

Se si dispone di diverse pagine in formato SVG è possibile creare un unico PDF utilizzando il tool rsvg-convert (dal pacchetto Debian librsvg2-bin). Questa la riga di comando:

rsvg-convert --format pdf --keep-aspect-ratio --output output.pdf page*.svgz
doc/appunti/prog/pdf.1663861521.txt.gz · Last modified: 2022/09/22 17:45 by niccolo