web-dev-qa-db-ja.com

Itextを使用した画質

150dpiの解像度の画像を含むItextを使用してPDFドキュメントを生成することが可能です。

(Itextが画像の品質を72dpiに低下させているようです。)

ありがとう

18
Luixv

これを参照してください スレッド 、具体的には この投稿 これはPDFにDPIの概念がないことを説明しています。 このスレッド も良い読み物です。

基本的に(これは技術的に正確ではありませんが、十分に近いです)、iTextを使用して画像を配置する場合、72ピクセルごとに1インチの印刷スペースが使用されると想定します。このルールを変更する場合は、画像のmatrixを変更する必要があります。これを直接行う(難しい)か、scaleAbsolute()scaleAbsoluteWidth()scaleAbsoluteHeight()scalePercentage()などのスケーリング方法を使用する(はるかに簡単)ことができます。 scaleToFit()

行列を変更すると画像は変更されません画像は変更されません。(本質的に)定義が変更されるだけです。 1インチに詰め込むピクセル数。印刷するとDPIと呼ばれます。 (実際には画像のピクセルとドキュメントのユーザー単位の関係を変更していますが、実際にそれを知る必要はありません。)したがって、デフォルトでは、200x200ピクセルの画像がiTextは約23/4 "で印刷されます。scaleAbsolute(100,100)を呼び出すと、それらの200ピクセルが100の「ユーザーユニット」に詰め込まれ、有効DPIが144になり、約13/8"で印刷されます。

特に、一部の画像タイプに「解像度」を設定できるAdobe Photoshopなどの画像処理プログラムに慣れている場合は、これらすべてが頭を痛める可能性があります。残念ながら、これは「印刷のヒント」であり、ファイルをそれほど変更することはありません。 72DPIでの100x100ピクセルの画像は、印刷する場合を除いて、300DPIでの100x100ピクセルとまったく同じです。 iTextは、この印刷ヒントを完全に無視します。これがすべてであるか、すべての画像形式でサポートされているわけではないためです。 (直接関係はありませんが、「Web用に保存」は実際にはファイルから解像度情報を完全に削除したときに画像を72DPIにするという一般的な神話があります。)

実際に起こっていることを無視して、画像を150 DPIと考えるものにするには、ソース画像の幅と高さをピクセル単位で取得し、それらに0.48(72を150で割った値)を掛けて、それらの新しい数値をscaleAbsolute()

ImageクラスにはsetDPIというメソッドがありますが、私が知る限り、それは実際には画像の配置に影響を与えず、より情報的なものです。

45
Chris Haas

PDFの画質が悪い場合。次のことができます。

  1. 高解像度でより大きなサイズの画像を作成します。
  2. PDFファイルにエクスポートするときに、画像を縮小します。

これで私の問題は解決しました。

0
Rajil