ベクター画像を含むPDFをラスター画像を含むPDFに変換する簡単な(スクリプト可能な)方法はありますか?言い換えると、まったく同じ(ラスタライズされていない)テキストを使用してPDFを生成したいのですが、各ベクター画像はラスタライズされたバージョンに置き換えられています。
Kindleで技術記事のPDFを時々読んでいますが、PDFを直接読むのはイライラすることがわかりました。ありがたいことに、Amazonの 自動変換 のPDFからKindle形式への変換は、私が試したほとんどのPDFのテキスト部分をリフローするのに適しています。ただし、ラスターイメージは変換プロセスを正常に通過するように見えますが、ベクターイメージはひどく壊れます。 PDFを簡単に変換して、すべてのベクター画像をラスタライズできると便利です。
考えられる解決策に興味がありますが、LinuxベースまたはWindowsベースのソリューションが望ましいでしょう。
数日後、 " 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つを結合します。
私はこれをうまく使って、科学論文で使用するために巨大なベクター画像を変換してきました。
同様の問題があり、ImageMagics変換ツール( http://www.imagemagick.org/script/index.php )を使用して解決しました。これはLinuxに付属しており、Windows/CygwinまたはOSXで正常に動作します
convert -density 300 largeVectorFileFromR.pdf out.pdf
-density 300を使用すると、解像度を(DPIとして)制御できます。
欠点:テキストもラスタライズされます。Michaelがこれを望まないことを理解しています。
それは少し複雑ですが、あなたは可能な解決策を求めました。さらに、このソリューションは自動化できません。
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を保存すると、ベクター画像がビットマップ画像に置き換えられます。
EnfocusのPitstopPro v2 update3はまさにそれを行うことができます。 「ページコンテンツをラスタライズし、テキストを保持する」というアクションがあり、非常にうまく機能します。これはAdobeAcrobatのプラグインであるため、もう少し必要ですが、サーバーソリューションとしても利用できます。
問題を解決する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はすべてのベクター画像をラスタライズし、すべてのテキストはテキストのままになるため、選択、コピーなどを行うことができます。
https://jwilk.net/software/pdf2djv コンバーターを使用してpdfをdjvuに変換します。 「アンチエイリアスフォント、ベクトル..」のチェックを外します。ファイルサイズを大幅に削減し、ドキュメントの読み込み時間を改善します。
私は以下を使用しました:
gswin32c -o "%2" -dFirstPage=1 -dLastPage=1 -sDEVICE=pngalpha -r72x72 -dUseCropBox -dFitPage "%1" -dBATCH -dNOPAUSE
ここで、%1
は入力ファイル、%2
は出力です。これはLaTeXで使用でき、生成されたPNGの比率とページサイズは元のPDF)と同じであるため、画像の相対位置は変わりません。
Linuxでは、gswin32c
ではなくgs
を使用する必要がある場合があることに注意してください。
ページ範囲を設定してから、ページをPDFに印刷して戻すこともできます。欠点は、テキストもラスタライズされることです。
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"