Come posso appiattire completamente un PDF in Mac OS dalla riga di comando?


16

Uso Mac OS X Snow Leopard. Ho un PDF con campi modulo, annotazioni e timbri su di esso. Vorrei congelare (o "appiattire") quel PDF in modo che i campi del modulo non possano essere modificati e che le annotazioni / i timbri non siano più modificabili. Poiché in realtà ho molti di questi PDF, voglio farlo automaticamente sulla riga di comando.

Alcune cose che ho provato / considerato, con il loro grado di successo:

  • Apri in Anteprima e Stampa su file. Questo crea un PDF totalmente piatto senza modificare le dimensioni del file. L'unico modo per automatizzare sembra essere quello di scrivere un AppleScript basato su UI kludgy , che ho cercato di evitare.
  • Apri in Acrobat Pro e usa una funzione JavaScript per appiattire . Ancora una volta, non sono sicuro di come automatizzarlo dalla riga di comando.
  • Utilizzare pdftkcon l' flattenopzione. Ma questo appiattisce solo i campi della forma, non i timbri e altre annotazioni.
  • Utilizzare cupsfilterquale può creare PDF da molti formati di file. In pdftkquesto modo appiattito solo i campi del modulo.
  • Utilizzare cups-pdfper agganciare il server di stampa del Mac e salvare un file PDF invece di stampare. Ho usato la versione di macports . Il file risultante è piatto ma enorme. Ho provato questo su un file da 8 MB; il PDF appiattito era 358 MB! Forse questo può essere combinato con una chiamata ghostscript come in Ubuntu Suggerimento: come ridurre la dimensione del file PDF dalla riga di comando .

Qualsiasi altro suggerimento sarebbe apprezzato.


1
Automator.app ha alcune opzioni di elaborazione pdf integrate. Forse uno di loro può aiutare direttamente o in combinazione con una delle azioni sopra.
Kassym Dorsel,

Potete fornire un documento di esempio PDF che contenga questi elementi?
Daniel Beck

Credo di si. In questo momento tutti i miei campioni sono quiz per studenti, quindi devo prendere in giro qualcosa.
Matthew Leingang,

Risposte:


11

Prova a usare pdf2pse ps2pdfin successione. È un po 'ingombrante ma mi ha aiutato a ridurre il mio documento da 30 MB a 17 MB. Non quanto mi sarebbe piaciuto, ma ancora meglio. Ho avuto questa idea da un amico che ha usato questo metodo per sbarazzarsi delle autorizzazioni per la password su un pdf.

pdf2ps your_pdf_file.pdf your_pdf_file.ps
ps2pdf your_pdf_file.ps your_pdf_file_from_ps.pdf

Spero possa aiutare!


3
GhostScript FTW! Ho avuto verso il basso per una battuta utilizzando un tubo: pdf2ps file.pdf - | ps2pdf - file_flat.pdf. Il file è passato da 300K a 500K, il che è un grande aumento percentuale ma niente come il 4400% aumenta il cups-pdfmetodo prodotto.
Matthew Leingang,

In realtà, ho avuto più fortuna con pdf2ps -q -sOutputFile=- file.pdf | ps2pdf - file_flat.pdf.
Matthew Leingang,

4
Notando che su Mac è possibile installare Ghostscript per rendere disponibili i comandi di cui sopra tramite homebrew con brew install ghostscript.
Nick,

5

Quindi questo è quello che ho usato di recente. Penso che funzionalmente faccia la stessa cosa pdf2ps file.pdf - | ps2pdf - file_flat.pdf, ma sembrava funzionare meglio per me.

gs -sDEVICE=pdfwrite -dPDFSETTINGS=/default -dNOPAUSE -dQUIET -dBATCH -sOutputFile=<newfile> <oldfile>

Le soluzioni ps2pdf sono fallite per me. Questo ha funzionato, apparentemente reindicizzando i caratteri nel PDF.
inkaphink,

Nessuno di questi comandi si appiattisce. Puoi copiare i livelli sottostanti usando Anteprima e sarà presente il contenuto originale.
Alain O'Dea,

1

Potrebbe essere sub-opzionale, ma hai mai considerato di concatenare cups-pdf con pdftk o cupsfilter? Come hai già detto, cups-pdf produrrà un file pdf piatto e lo passerà attraverso pdftk o cupsfilter per farlo scendere a una dimensione accettabile?

In alternativa, dai un'occhiata a /System/Library/Printers/Libraries/convert Dovresti essere in grado di fare qualcosa del genere

/System/Library/Printers/Libraries/convert -f input_file.pdf -o output_file.pdf -j "application/pdf"

Il mio mac non ha /System/Library/Printers/Libraries/convert. Ci ho provato cupsfilter. Durante la conversione da PDF a PDF non è stata apportata alcuna modifica al file. Durante la conversione da PDF a PS e quindi in PDF le annotazioni andavano perse.
Matthew Leingang,

1

ATTENZIONE: gs e pdf2ps | ps2pdf NON appiattire i PDF!

L'uso di gs o pdf2ps seguito da ps2pdf produrrà un PDF multistrato con il contenuto sotto le annotazioni presenti in forma originale . È possibile verificare questo difetto in Anteprima utilizzando Seleziona tutto, quindi Copia, quindi Incolla in una finestra TextEdit (in modalità Rich Text). Vedrai il testo o la grafica nelle annotazioni di redazione, ad esempio. Ciò è chiaramente molto negativo se legalmente hai bisogno che il contenuto scompaia dall'output.

Una soluzione funzionante

ImageMagick è in grado di produrre un PDF appiattito di qualità configurabile, multipagina, a singolo strato con raster di ogni pagina usando il seguente comando:

convert -density 150 document_original.pdf document_flat.pdf

Questo comando rasterizza document_original.pdf, creando un'immagine basata su pixel di ciascuna pagina, a 150 DPI, e genera il risultato come document_flat.pdf.

Una nota sulla qualità dell'immagine

A causa della rasterizzazione , produce un PDF non scalabile (ingrandisci e vedrai il testo o le immagini vettoriali originali diventare pixel). Probabilmente avrà una dimensione file maggiore a meno che l'originale non abbia un contenuto vettoriale molto complesso come grafici a dispersione di milioni di punti.

Modificando la densità , è possibile scambiare file di dimensioni maggiori per una risoluzione più elevata.

Tutto il testo verrà convertito in pixel non elaborati in ogni immagine di pagina. I diagrammi di testo e vettoriali ne soffrono di più, quindi sperimenta il DPI fino a ottenere file di output utilizzabili.


1
Grazie per aver contribuito a questa risposta. 5 anni fa la soluzione che ho scritto funzionava per me. Ma proverò la tua risposta la prossima volta che dovrò farlo (in realtà molto presto).
Matthew Leingang,

Ha senso. Immagino che il comportamento di Ghostscript sia cambiato rispetto all'appiattimento delle annotazioni. Ho provato ad aggiungere -PreserveAnnots = false e ancora non ha funzionato. Converti sotto il cofano usando Ghostscript per l'elaborazione PDF. Vorrei qualcosa che fa quello che fa Acrobat: mantiene le annotazioni, rimuove il contenuto dietro di esse e conserva immagini vettoriali scoperte. Il pezzo Document Cloud con il nuovo Acrobat mi rende davvero nervoso usarlo per dati sensibili.
Alain O'Dea,

0

Applescript è probabilmente il modo migliore / più veloce per la riga di comando. Una volta che funziona, puoi salvarlo come un'applicazione e creare un alias nella tua shell dei comandi per eseguirlo. Successivamente, digita semplicemente il tuo alias nella riga di comando.


Ma qual è il modo più semplice per appiattire un PDF in AppleScript? Preferirei non creare script sull'interfaccia utente per imitare la stampa su file. Sembra lento e lento.
Matthew Leingang,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.