23

Esiste un modo semplice (con script) per convertire un PDF con immagini vettoriali in un PDF con immagini raster? In altre parole, voglio generare un PDF con lo stesso testo (non rasterizzato) ma con ogni immagine vettoriale sostituita con una versione rasterizzata.Sostituzione di immagini vettoriali in un PDF con immagini raster

Di tanto in tanto leggo PDF di articoli tecnici sul mio Kindle e ho scoperto che leggere un PDF direttamente è frustrante. Per fortuna, lo automatic conversion di Amazon in formato Kindle nel formato Kindle fa un buon lavoro nel riflettere le porzioni di testo della maggior parte dei PDF che ho provato. Tuttavia, mentre le immagini raster sembrano passare attraverso il processo di conversione, le immagini vettoriali diventano orribilmente deformate. Sarebbe bello se potessi convertire facilmente un PDF in modo che tutte le sue immagini vettoriali fossero rasterizzate.

Sono interessato a qualsiasi soluzione possibile, ma preferisco uno basato su Linux o Windows.

+0

Nota: questa domanda è stato originariamente [pubblicato] (http: // tex.stackexchange.com/questions/47076/replacing-vector-images-in-a-pdf-with-raster-images) sul [sito TeX] (http://tex.stackexchange.com/), ma i mod lì suggerì di chiederlo qui invece. –

+0

È possibile esportare tutte le pagine in immagini e quindi creare un PDF utilizzando tali immagini. Ci sono molte applicazioni che possono farlo. Penso che una combinazione di imagemagick e/o ghostscript farebbe. Per i programmatori, ho scritto un articolo intitolato "How To Rasterize A PDF Document In .NET", che mostra come farlo utilizzando il nostro prodotto PDFOne .NET. – BZ1

+1

Ma voglio solo rasterizzare le immagini/figure nel PDF, non il testo. Non vedo alcun modo per farlo usando ImageMagick. Daremo un'occhiata a Ghostscript. –

risposta

2

È un po 'complicato, ma avete chiesto una soluzione possibile. Inoltre questa soluzione non è automatizzabile.

1) Aprire il pdf con le immagini vettoriali in Inkscape. Quindi selezionare l'intera immagine con lo strumento select (F1)

2) Se l'immagine vettoriale è consistente di più svg stampa grafica Ctrl + G (Object -> Gruppo)

3) intercettato immagine svg raggruppati Ctrl + x

4) aprire una nuova finestra InkScape Ctrl + n e incollare l'immagine Ctrl + v

5) scegliere File -> Bitmap di esportazione (Shift + Ctrl + e), forse si vuole aumentare il dpi

6) tornare alla prima finestra di Inkscape, File -> Importa (Ctrl + i) e scegliere il bitmap precedentemente esportato

7) posizionare il bitmap per la posizione in cui l'immagine è stata svg

Salva il pdf e l'immagine vettoriale è sostituita da un'immagine bitmap.

+0

Molto complicato e lavoro intensivo.Sto cercando una versione più automatica e ho pensato che un tale script dovrebbe esistere da qualche parte. – data

+0

Sì, ho pensato che fosse necessario un metodo di scripting. Ma ho pensato che dopo 11 mesi senza una sola risposta, condivido un modo possibile, almeno. –

1

Ecco un modo per risolvere il problema:

Fase 1: Utilizzare un convertitore di PDF-to-HTML on-line, come quello qui:

http://www.idrsolutions.com/online-pdf-to-html5-converter/

Questo strumento converte il PDF in un set di immagini e una sovrapposizione di testo. Le immagini vettoriali dovrebbero essere convertite in raster a questo punto.

Fase 2: Convertire il codice HTML + immagini di nuovo in PDF:

http://pdfcrowd.com/#convert_by_upload+with_options

Il PDF risultante avrà tutte le immagini vettoriali rasterizzati, e tutto il testo rimarrà di testo, in modo da poter selezionare, copiare, ecc.

+0

Il problema per me è che per molti pdf, pdf2html non è in grado di analizzare correttamente il pdf, rendendolo così inefficiente. – data

+0

Un altro problema è che il testo _within_ figure dovrebbe essere rasterizzato insieme al resto delle figure; per esempio, pensa alle etichette sugli assi di un grafico. Questa soluzione (pdf2html) lascia quel testo come testo, quindi la figura rasterizzata risultante è incompleta. –

+0

Inoltre, non è chiaro come utilizzarlo per un PDF con più di una pagina. –

8

Ho riscontrato un problema simile e l'ho risolto utilizzando lo strumento di conversione ImageMagics (http://www.imagemagick.org/script/index.php).Che viene fornito con Linux e funziona bene su Windows/Cygwin o OS X

convert -density 300 largeVectorFileFromR.pdf out.pdf

Con densità da 300 si risoluzione di controllo (come DPI).

Downside: il testo viene rasterizzato così, ho capito che Michael non vuole questo.

+0

Gli utenti che incontrano un errore 'no immagini definite' dovranno installare la dipendenza' gs' necessaria di ghostscript. Per gli utenti MacOS con Homebrew: 'brew install ghostscript' –

2

Pitstop aggiornamento Pro v2 3 da Enfocus può fare esattamente questo. Ha un'azione chiamata "Rasterizza il contenuto della pagina, mantenendo il testo" che funziona piuttosto bene. È un plugin per Adobe Acrobat, quindi richiede un po 'di più ma è anche disponibile come soluzione server.

+2

Benvenuti in StackOverflow. Sopra la posta potrebbe rispondere alla domanda. Ma una spiegazione in più potrebbe aiutare gli altri programmatori a capire come funziona. – Daenarys

0

ho usato il seguente:

gswin32c -o "%2" -dFirstPage=1 -dLastPage=1 -sDEVICE=pngalpha -r72x72 -dUseCropBox -dFitPage "%1" -dBATCH -dNOPAUSE 

dove %1 è il file di input e %2 è l'uscita. Questo può essere usato con LaTeX, il PNG generato ha lo stesso rapporto e dimensione della pagina del PDF originale, quindi la posizione relativa dell'immagine non cambierà.

Si noti che in Linux, potrebbe essere necessario utilizzare gs piuttosto che gswin32c.

È anche possibile impostare l'intervallo di pagine e poi stampare le pagine di nuovo in PDF. Lo svantaggio è che anche il testo viene rasterizzato.

0

Convertire il pdf a DjVu con https://jwilk.net/software/pdf2djvu convertitore. Deseleziona "caratteri antialias, vettori ..". Riduce significativamente le dimensioni del file e migliora i tempi di caricamento dei documenti.

0

Dopo alcuni giorni alla ricerca di qualche soluzione, sulla base di "Remove all text from PDF file" e "How to add a picture onto an existing pdf file?" Ho trovato un (brutto) soluzione di script:

gs -o /tmp/onlytxt.pdf -sDEVICE=pdfwrite -dFILTERVECTOR -dFILTERIMAGE $INPUT_FILE && \ 
gs -o /tmp/graphics.pdf -sDEVICE=pdfwrite -dFILTERTEXT $INPUT_FILE && \ 
convert -density $DPI -quality 100 /tmp/graphics.pdf /tmp/graphics.png && \ 
convert -density $DPI -quality 100 /tmp/graphics.png /tmp/graphics.pdf && \ 
pdftk /tmp/graphics.pdf stamp /tmp/onlytxt.pdf output $OUTPUT_FILE && \ 
rm /tmp/onlytxt.pdf /tmp/graphics.pdf /tmp/graphics.png 

erano abbiamo tre variabili file_input, output_file, e DPI. Dividiamo i contenuti testuali e grafici tramite Ghostscript, convertiamo l'immagine grafica in un'immagine raster (PNG) e uniamo i due usando pdftk.

ho usato questo successo per convertire le immagini vettoriali enormi per l'uso in articoli scientifici.

0

inkscape è la soluzione migliore, ho rapidamente creato questo file batch piuttosto ottimizzato che fa esattamente questo e si può giocare con esso e modificare le opzioni. ImageMacick convertire, gs, o pdftoimages non funzionano buono come inkscape essi o non esportano i livelli o di esportazione, ma con cattiva qualità:

#!/bin/bash 
#set -xev 
ORIGINAL_FOLDER=`pwd` 
JPEGS=`mktemp -d` 
unzip "$1" -d "$JPEGS" 
cd "$JPEGS" 
# expang the pdf in pdf pages 
pdftk combined_to_do.pdf burst output pg_%04d.pdf 
#1) print the pdf's to pngs as they are seen with alpha, layers, transparency etc, this cannot be done by ImageMacick convert or pdftoimages 
ls ./pg*.pdf | xargs -L1 -I {} inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png 
#2) Second change to jpgs 
rm *.pdf 
ls ./p*.png | xargs -L1 -I {} convert {} -quality 100 -density 300 {}.jpg 
#3) This to make a pdf file out of every jpg image without loss of either resolution or quality: 
ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf 
#4) This to concatenate the pdfpages into one: 
pdftk *.jpg.pdf cat output combined.pdf 
#5) And last I add an OCRed text layer that doesn't change the quality of the scan in the pdfs so they can be searchable: 
pypdfocr combined.pdf 
cp "$JPEGS/combined_ocr.pdf" "$ORIGINAL_FOLDER/$1_ocr.pdf" 
cp "$JPEGS/combined.pdf" "$ORIGINAL_FOLDER/$1.pdf" 
Problemi correlati