2012-02-02 22 views
6

Ho un PDF che è ricercabile e ho bisogno di convertirlo in uno non ricercabile.Conversione di PDF ricercabile in un PDF non ricercabile

Ho provato a usare Ghostscript e lo cambio in JPEG e poi di nuovo in PDF, il che fa il trucco ma la dimensione del file è troppo grande e non accettabile.

Ho provato a utilizzare Ghostscript per convertire il PDF in PS prima e poi in PDF, anche se la qualità non è abbastanza buona.

gswin32.exe -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pswrite -r1000 -sOutputFile=out.ps in.pdf 
gswin32.exe -q -dNOPAUSE -dBATCH -dSAFER -dDEVICEWIDTHPOINTS=596 -dDEVICEHEIGHTPOINTS=834 -dPDFSETTINGS=/ebook -sDEVICE=pdfwrite -sOutputFile=out.pdf out.ps 

C'è un modo per dare una buona qualità al PDF?

In alternativa, c'è un modo più semplice per convertire un PDF ricercabile in uno non ricercabile?

risposta

11

È possibile utilizzare Ghostscript per ottenere ciò.Avete bisogno di 2 fasi:

  1. convertire il PDF in un file PostScript, che ha i caratteri tutti abituati convertiti per delineare le forme. La chiave qui è la -dNOCACHE paramenter:

     
    gs -o somepdf.ps -dNOCACHE -sDEVICE=pswrite somepdf.pdf

  2. Convertire il PS di nuovo in PDF (e, forse eliminare nuovamente il PS intermedio):

     
    gs -o somepdf-with-outlines.pdf -sDEVICE=pdfwrite somepdf.ps 
    rm somepdf.ps

nota, che il PDF risultante sarà molto probabilmente più grande di quello originale. (E, senza ulteriori parametri della riga di comando, probabilmente tutte le immagini nel PDF originale verranno convertite in base ai predefiniti incorporati di Ghostscript, a meno che non si aggiungano altri parametri della riga di comando per fare diversamente. Ma la qualità dovrebbe essere migliore del proprio tentativo di usare Ghostscript ...)


Aggiornamento

a quanto pare, dalla versione 9.15 (per essere rilasciato nel mese di settembre/ottobre 2014), Ghostscript sosterrà una nuovo parametro di riga di comando:

-dNoOutputFonts 

che farà sì che i dispositivi di uscita pdfwrite, ps2write e eps2write"ad 'appiattire' glifi nelle operazioni 'di base' marcatura (piuttosto che crei font all'uscita)".

Ciò significa che i due passaggi possono essere evitati, e il risultato desiderato essere realizzati con un unico comando:

gs -o somepdf-with-outlines.pdf -dNoOutputFonts -sDEVICE=pdfwrite somepdf.pdf 

Caveats: Ho provato questo con alcune file di input usando un Ghostscript compilato automaticamente basato sulle sorgenti Git attuali. Ha funzionato perfettamente in ogni caso.

+0

a mio modesto parere, mi raccomando di convertire prima in postscript: 'gs -dBATCH -dNOPAUSE -dNOCACHE -dSAFER -sDEVICE = pswrite -sOutputFile = output.ps input.pdf' e poi passare questo poscritto risultante a * * ps2pdf. Se la tua pagina ha una pagina personalizzata (ad esempio 17x24 cm) devi passare * -g * per passare a * ps2pdf *, come, ad esempio, per una pagina 17x24 cm: 'ps2pdf -g4820x6800 input.ps output.pdf'; in altre parole, dai un'occhiata al pageize in points (con pdfinfo), quindi moltiplica entrambe le dimensioni per 10 – Dingo

+2

@Dingo: se usi una versione recente di GS, '-o out.ps' è uguale a' -dBATCH - dNOPAUSE -sOutputFile = out.ps'. Inoltre, una versione recente di GS imposta automaticamente la dimensione della pagina del file di output (PostScript) come nel caso del file di input (PDF). Se si vuole essere sicuri, si può anche impostare con '-gNNNxMMM' senza problemi. Per la maggior parte dei casi non mi piace 'ps2pdf', perché è comunque un wrapper attorno a una riga di comando di Ghostscript .... - Quindi, cosa rimane come differenza tra il tuo consiglio più recente e il mio? –

+0

hai ragione. Non ho letto attentamente prima. Scusami e grazie per i grandi consigli! – Dingo

3

un possibile modo di produrre non ricercabile vettore pdf da un vettore PDF ricercabile è

  1. scoppio pdf nelle sue pagine singole

    pdftk file.pdf burst

  2. convertire qualsiasi pagina singola in svg with

    pdftocairo

contenuto in poppler utils

for f in *.pdf; do pdftocairo -svg $f; done 

3. elimina ALL pdf nella cartella

4. poi, con batikrasterizer

riconvertono TUTTI svg to pdf (questa volta i file PDF risultanti saranno tenuti vettoriale, ma senza poter essere consultate)

java -jar ./batik-rasterizer.jar -m application/pdf *.svg 

passaggio finale: unire tutto risultante singola pagina pd in una multipagina file pdf

pdftk *.pdf cat output out.pdf 
+0

uno [strumento alternativo] (http://manpages.ubuntu.com/manpages/xenial/man1/rasterizer.1.html) per il passaggio 4 può essere utilizzato con il seguente comando: '$ per f in * .svg ; do rasterizer -m application/pdf $ f; done'. PS: Non sono sicuro di come questi due strumenti siano correlati o si sovrappongano, anche se ... –

+0

espandendo l'ambito della domanda originale, questo sarebbe un modo per ritagliare il file risultante: http://tex.stackexchange.com/ a/42259/27721 –

0

Penso che la conversione in un'immagine come JPG è la strada da percorrere, forse vale la pena la conversione in am immagine, ottimizzando/ridurre le dimensioni delle immagini e quindi creando un PDF con quelli?

Problemi correlati