web-dev-qa-db-ja.com

PDFのベクター画像をラスター画像に置き換える

ベクター画像を含むPDFをラスター画像を含むPDFに変換する簡単な(スクリプト可能な)方法はありますか?言い換えると、まったく同じ(ラスタライズされていない)テキストを使用してPDFを生成したいのですが、各ベクター画像はラスタライズされたバージョンに置き換えられています。

Kindleで技術記事のPDFを時々読んでいますが、PDFを直接読むのはイライラすることがわかりました。ありがたいことに、Amazonの 自動変換 のPDFからKindle形式への変換は、私が試したほとんどのPDFのテキスト部分をリフローするのに適しています。ただし、ラスターイメージは変換プロセスを正常に通過するように見えますが、ベクターイメージはひどく壊れます。 PDFを簡単に変換して、すべてのベクター画像をラスタライズできると便利です。

考えられる解決策に興味がありますが、LinuxベースまたはWindowsベースのソリューションが望ましいでしょう。

26
Michael Boyer

数日後、 " PDF file "からすべてのテキストを削除)== "および" 既存のpdfファイルに画像を追加する方法)に基づいて解決策を検索しました? "(醜い)スクリプト可能な解決策を見つけました:

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

iNPUT_FILE、OUTPUT_FILE、およびDPIの3つの変数があります。 Ghostscriptを介してテキストとグラフィックのコンテンツを分割し、グラフィック画像をラスター画像(PNG)に変換し、pdftkを使用して2つを結合します。

私はこれをうまく使って、科学論文で使用するために巨大なベクター画像を変換してきました。

10
Civ Lins

同様の問題があり、ImageMagics変換ツール( http://www.imagemagick.org/script/index.php )を使用して解決しました。これはLinuxに付属しており、Windows/CygwinまたはOSXで正常に動作します

convert -density 300 largeVectorFileFromR.pdf out.pdf

-density 300を使用すると、解像度を(DPIとして)制御できます。

欠点:テキストもラスタライズされます。Michaelがこれを望まないことを理解しています。

10
vertikalist

それは少し複雑ですが、あなたは可能な解決策を求めました。さらに、このソリューションは自動化できません。

1)Inkscapeのベクター画像を含むPDFを開きます。次に、selectツール(F1)を使用して画像全体を選択します

2)ベクター画像が複数のsvgグラフィックで構成されている場合は、Ctrl + G(オブジェクト->グループ)を押します。

3)グループ化されたsvg画像を切り取りますCtrl + x

4)新しいInkScapeウィンドウCtrl + nを開き、画像Ctrl + vを貼り付けます

5)[ファイル]-> [ビットマップのエクスポート](Shift + Ctrl + e)を選択します。おそらく、dpiを増やしたいと思います。

6)最初のInkScapeウィンドウに戻り、ファイル->インポート(Ctrl + i)して、以前にエクスポートしたビットマップを選択します

7)ビットマップをsvg画像があった場所に配置します

PDFを保存すると、ベクター画像がビットマップ画像に置き換えられます。

2
Martin Grohmann

EnfocusのPitstopPro v2 update3はまさにそれを行うことができます。 「ページコンテンツをラスタライズし、テキストを保持する」というアクションがあり、非常にうまく機能します。これはAdobeAcrobatのプラグインであるため、もう少し必要ですが、サーバーソリューションとしても利用できます。

2
fltman

問題を解決する1つの方法は次のとおりです。

ステップ1:次のようなオンラインのPDFからHTMLへのコンバーターを使用します。

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

このツールは、PDFを一連の画像とテキストオーバーレイに変換します。この時点で、ベクター画像をラスターに変換する必要があります。

ステップ2:HTML +画像をPDFに変換し直します:

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

結果のPDFはすべてのベクター画像をラスタライズし、すべてのテキストはテキストのままになるため、選択、コピーなどを行うことができます。

1
Hari

https://jwilk.net/software/pdf2djv コンバーターを使用してpdfをdjvuに変換します。 「アンチエイリアスフォント、ベクトル..」のチェックを外します。ファイルサイズを大幅に削減し、ドキュメントの読み込み時間を改善します。

0
not_a_spammer

私は以下を使用しました:

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

ここで、%1は入力ファイル、%2は出力です。これはLaTeXで使用でき、生成されたPNGの比率とページサイズは元のPDF)と同じであるため、画像の相対位置は変わりません。

Linuxでは、gswin32cではなくgsを使用する必要がある場合があることに注意してください。

ページ範囲を設定してから、ページをPDFに印刷して戻すこともできます。欠点は、テキストもラスタライズされることです。

0
the swine

inkscapeが最善の解決策です。これを正確に実行する、最適化されていないこのバッチファイルをすばやく作成しました。これを試して、オプションを変更できます。 ImageMacick変換、gs、またはpdftoimagesは、inkscapeほどうまく機能しません。これらは、レイヤーをエクスポートしないか、エクスポートしますが、品質が低くなります。

#!/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"
0