User Tools

Site Tools


doc:appunti:prog:pdf

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:prog:pdf [2020/03/06 12:45] – [Creazione dei bookmark (indice)] niccolodoc:appunti:prog:pdf [2022/12/07 09:25] (current) – [Dividere le pagine in due o più pagine] niccolo
Line 54: Line 54:
 </code> </code>
  
-per rimuovere eventuali trasparenze e sostituirle con uno sfondo bianco:+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//"):
  
 <code> <code>
-convert -density 300 -background white -alpha remove input.pdf output.png+convert -density 300 -background white -alpha remove -define png:color-type=6 input.pdf output.png
 </code> </code>
 +
 +Potrebbe capitare l'errore durante la conversione:
 +
 +<code>
 +convert: attempt to perform an operation not allowed by the security
 +policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
 +</code>
 +
 +In tal caso è necessario rimuovere queste righe dal file **/etc/ImageMagick-6/policy.xml**:
 +
 +<file>
 +  <!-- 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" />
 +</file>
  
 ===== Estrazione di alcune pagine ===== ===== Estrazione di alcune pagine =====
Line 67: Line 86:
 pdftk A=document.pdf cat A6-14 output document_p6-14.pdf pdftk A=document.pdf cat A6-14 output document_p6-14.pdf
 </code> </code>
 +
 +È possibile estrarre intervalli diversi con una sola riga di comando indicandoli in successione, ad esempio: **%%cat A1-104 A107-118%%**.
 +
  
 ===== Unione di più documenti ===== ===== Unione di più documenti =====
  
-Il comando **''pdfunite''** è contenuto nel pacchetto Debian **poppler-utils**:+Si utilizza il **''pdftk''** contenuto nel pacchetto Debian **pdftk-java**: 
 + 
 +<code> 
 +pdftk "part1.pdf" "part2.pdf" cat output "document.pdf" 
 +</code> 
 + 
 +Un sistema più lento, ma più efficiente (impiega più tempo, ma può produrre documenti PDF più piccoli) è utilizzare direttamente **gs**: 
 + 
 +<code> 
 +gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=output.pdf doc1.pdf doc2.pdf ... 
 +</code> 
 + 
 +In alternativa esiste il comando **''pdfunite''** è contenuto nel pacchetto Debian **poppler-utils**:
  
 <code> <code>
Line 76: Line 110:
 </code> </code>
  
-oppure si utilizza il **''pdftk''**:+ATTENZIONE: Il comando pdfunite (almeno con Debian 11 Bullseye) produce un PDF con problemi, per cui risulta impossibile **manipolare i metadati**. Ad esempio utilizzando il comando **pdftk** con l'opzione **update_info** (vedi esempio in questa pagina) si ottiene l'errore:
  
 <code> <code>
-pdftk "part1.pdf" "part2.pdf" cat output "document.pdf"+pdftk Error in UpdateInfo(): no Info dictionary found; 
 +Warning: no Info added to output PDF.
 </code> </code>
 +
 +Anche il tool **exiftool** ha problemi a modificare i metadati su un file prodotto da **pdfunite**:
 +
 +<code>
 +exiftool -Title="Book Title" -Author="John Doe" pdfunite_doc.pdf
 +Error: Objects in xref table (367) exceed trailer dictionary Size (358) - united-pdfunite.pdf
 +    0 image files updated
 +    1 files weren't updated due to errors
 +</code>
 +
 ===== Conversione di raster in PDF ===== ===== Conversione di raster in PDF =====
  
Line 92: Line 137:
 pdfjam --outfile document-a4.pdf --paper a4paper document.pdf pdfjam --outfile document-a4.pdf --paper a4paper document.pdf
 </code> </code>
 +
 +È possibile specificare le dimensioni esatte della pagina, ad esempio in punti tipografici:
 +
 +<code>
 +pdfjam --papersize '{728.39pt,560.519pt}' --outfile output.pdf document.pdf
 +</code>
 +
 +===== Raggruppare pagine pari e dispari =====
 +
 +È possibile reimpaginare un documento in modo che una singola pagina contenga due o più pagine dell'originale. Ad esempio per affiancare pagine pari e dispari si usa la geometria 2x1:
 +
 +<code>
 +pdfjam --nup 2x1 --landscape --outfile facing-pages.pdf document.pdf
 +</code>
 +
 +===== Dividere le pagine in due o più pagine =====
 +
 +Esempio: un documento contiene le pagine pari e dispari affiancate in una singola pagina e si desidera separarle. Si utilizza il comando **mutool** contenuto nel pacchetto Debian **mupdf-tools**:
 +
 +<code>
 +mutool poster -x 2 doc-facing-pages.pdf output.pdf
 +</code>
 +
 +**ATTENZIONE**: Eventuali immagini contenute in una pagina vengono raddoppiate nel documento finale, probabilmente ogni sottopagina creata contiene un riferimento alla stessa. È possibile utilizzare **gs** per una elaborazione finale che rimuove i doppioni:
 +
 +<code>
 +gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=output.pdf \
 +    -dDetectDuplicateImages=true document.pdf
 +</code>
 +
 +**ATTENZIONE**: In realtà il parametro **DetectDuplicateImages** rimuove gli oggetti duplicati, ma i riferimenti "doppioni" nel documento restano, semplicemente punteranno allo stesso ID oggetto.
  
 ===== Creazione dei bookmark (indice) ===== ===== Creazione dei bookmark (indice) =====
Line 98: Line 174:
  
 <code> <code>
-pdftk document.pdf dump_data output pdf_data.txt+pdftk document.pdf dump_data output metadata.txt
 </code> </code>
  
-nel file **pdf_data.txt** che viene generato è possibile aggiungere sezioni del tipo:+nel file **metadata.txt** che viene generato è possibile aggiungere sezioni del tipo:
  
 <file> <file>
Line 113: Line 189:
  
 <code> <code>
-pdftk document.pdf update_info pdf_data.txt output new_document.pdf+pdftk document.pdf update_info metadata.txt output new_document.pdf
 </code> </code>
  
Line 127: Line 203:
  
 Il comando **ebook-convert** viene installato con il pacchetto Debian **calibre**. 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:
 +
 +<code>
 +rsvg-convert --format pdf --keep-aspect-ratio --output output.pdf page*.svgz
 +</code>
 +
doc/appunti/prog/pdf.1583495133.txt.gz · Last modified: 2020/03/06 12:45 by niccolo