LinuxでPDFを抽出/ラスタライズする方法


13

オフィスには、USBスティックからPDFファイルを印刷するプリンターがあります。ほとんどのファイルは問題なく印刷されますが、特にLatexで生成されたファイルには問題があります。一部のPDFは単に印刷を拒否し、一部のPDFはCourierタイプのフォントで印刷し、一部は数式を除いて正常に印刷します。

私はPDFを印刷するための完全なフォーマットに「蒸留」する方法を探しています。PDFを単純化/正規化して、レンダラーが正しくレンダリングできるようにするか、各ページをPDFの600dpiラスターイメージにするだけです。(PDFを個別のラスターイメージに分割して手動で結合することもできますが、スクリプト可能なものが必要です。)

確実に印刷できる限り、出力ファイルのサイズは関係ありません。A4の用紙サイズ(またはオリジナル)で、解像度は300〜600 dpiです。


プリンターがポストスクリプトをサポートしている場合、pdf2psが役立つ可能性があります。
フラン14

それはPostScriptプリンターであるはずですが、そのサポートはPDFのサポートよりもさらに悪いです(そしてUSBスティックからPSを印刷しません)。
Sampo 2014

回答:


22

フォントをアウトラインとしてレンダリングするいくつかのオプション(この質問とpstoedit を含む)の試行に失敗した後、ImageMagickを使用してPDFをラスタライズされた形式に簡単に変換する方法を見つけました。

convert -density 600 +antialias input.pdf output.pdf

これにより、600 dpiでレンダリングされたPDFが作成され、アンチエイリアスはオフになります(その解像度では不要です)。

出力ファイルは非常に大きく(8ページのドキュメントの場合は最大30 MB)、印刷に非常に時間がかかりますが、コンテンツをレンダリングするのに十分なメモリがプリンターにある限り動作します。


1
はい!これを使用して、PDFのレイヤーを平坦化し、大きな成功を収めました。+アンチエイリアスは必要ありませんでした。画像しかなかったため(違いはありません)、解像度を150に落としました。これは、あまりスペースをとらずにアーカイブするのに十分に思えたためです。ありがとう!
mlissner 2014年

2
convert入力したフォームの内容は保持されないことに注意してください。(フォームのコンテンツがどこでも同じになるように、特に最初にすべてのPDFビューアで表示されるようにするために、PDFをラスタライズしたかったのです。)フォームのコンテンツを保持するには、evince(またはフォームの入力に使用したアプリケーション)を使用してドキュメントを「ファイルに」印刷します。これは、フォームのコンテンツが実際に通常のテキストの一部となっている別のPDFです。その後、必要に応じて、この新しいPDFをラスタライズすることもできます。
バル2017

これにより、アンチエイリアスがオフ(+antialias)ではなくオン()になることに注意してください-antialias
xiii1408

いいえ、+antialiasアンチエイリアスを無効にします:imagemagick.org/script/command-line-options.php
Sampo

1
これを機能させるには、imagemagick(stackoverflow.com/questions/42928765/…)を微調整する必要がありました。
SteveSong

1

私の経験では、imagemagickの使用は、高解像度や大きなファイルでは安定していません。多くのプリンタは1200 dpi以上を実行できるため、ラスタライズされたファイルも同様の解像度にする必要があります。より良い解決策は、高速で堅牢なpdf2djvuを使用することです。1200または2400 dpiで元のPDFに匹敵するサイズのファイルを作成することさえできます。これらのファイルは、okularまたはevinceを使用して表示および印刷できます。

例:

pdf2djvu -d 2400 file.pdf > rastered.djvu

1

私はそれを行うための現在の好ましい方法は次のとおりだと思います:

  1. pdftoppmを使用して、PDFファイルを一連の画像に変換します。

    $ pdftoppm source.pdf出力-png

  2. img2pdfを使用して、それらの画像からPDFファイルを作成します。

    $ img2pdf * .png -o output.pdf

朗報は、bashスクリプトを作成してプロセス全体を自動化できることです。

これは、ディレクトリ内のすべてのpdfファイルを抽出し、オリジナルを新しいディレクトリ「originals」に保持するbashスクリプトです。

#!/bin/bash

mkdir "originals";
for filename in ./*.pdf; do
    pdftoppm "$filename" output -png
    mv "$filename" ./originals
    img2pdf *.png "-o" "$filename"
    rm *.png
done

クレジット:img2pdf回答pdftoppm回答&bashスクリプトヘルプ:1および2

(補足) img2pdfは次の方法でインストールできます。

$ sudo apt install img2pdf


-1

別の方法は、次のような方法で画像に変換することです

PDF画像

manページから、「PdfimagesはPortable Document Format(PDF)ファイルの画像をPortable Pixmap(PPM)、Portable Bitmap(PBM)、またはJPEGファイルとして保存します。PdfimagesはPDFファイルPDFファイルを読み取り、1つ以上のページをスキャンし、画像ごとに1つのPPM、PBM、またはJPEGファイル、image-root-nnn.xxxを書き込みます。nnnは画像番号、xxxは画像タイプ(.ppm、.pbm、.jpg)です。

次に、pdftkを使用してPDFに変換し直し ますhttps://www.pdflabs.com/docs/pdftk-cli-examples/

最後に、このファイルを印刷します。明らかに、重要な問題はこれをどのようにスクリプト化するかです。

これは、ユーザー向けの簡単なWebページを介して自動化できます。最後に、彼らは変換されたファイルを印刷します、そしてあなたはより高いパフォーマンスと実用的な印刷物を持っているべきですか?


3
pdfimagesは、PDFファイルから埋め込まれたラスター画像を抽出しますが、テキストやベクターグラフィックをラスター化しません。
Sampo 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.