web-dev-qa-db-ja.com

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

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

PDFを確実な形式に「蒸留」して印刷する方法を探しています。 PDFを単純化/正規化して、レンダラーが正しくレンダリングできるようにするか、各ページをPDFの600dpiラスターイメージにするだけです。 (PDFを個々のラスター画像に分割して手動で組み合わせることができますが、スクリプト可能なものが必要です。)

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

14
Sampo

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

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

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

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

23
Sampo

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

例:

pdf2djvu -d 2400 file.pdf > rastered.djvu
1
mjo

私の現在の好ましい方法は次のとおりです。

  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スクリプトヘルプ: 12

(サイドノート)次を使用してimg2pdfをインストールできます。

$ Sudo apt install img2pdf

1
Michael