さまざまなサイズの画像を取り込んでPDFに出力する単純なJavaアプリケーションがあります。それは、クラスcom.lowagie.text.Image
(iText < = 2.1.7で使用されるクラス)を使用しており、イメージをインポートするとき、ピクセルの寸法とdpiは既知です。iTextを使用して比率を制限し、縮小することによる画像のJava変換
8.5インチx11インチの用紙の拘束条件に違反していない場合は、画像を表示します。幅が広すぎる場合は、PDFの画像の最終的な幅と高さを計算する際の高さの変化を計算するために、幅の減少率を決定する必要があります。画像が高すぎる場合は、高さによって制約する場合は、逆のことが当てはまります。最後に、幅が広すぎて高すぎる場合は、その値によって高さと幅の両方が減少し、減少する割合がどれだけ高いかを判断する必要があります。
8.5x11の制約(8.5x11 - > 11x14など)に該当する画像を高画質にするのではなく、大きすぎる縮小画像のみを高画質にしたいと考えています。ここで
は私の知ら値は次のとおりです。ここで
Original Width
Original Height
DPI
は、私が試したの試みだけ多くあり、それらのどれも動作しません。私は助けていただければ幸いです!
PlainW
は画像の元の幅であり、PlainH
は元の高さです。
if (PlainW >= 612) { //x is over or equal
xDiff = PlainW - 612;
xScale = PlainW/612;
if (PlainH < 792) { //y is under
yDiff = 792 - PlainH;
yScale = PlainH/792;
} else if (PlainH == 792) { //y is equal
yDiff = 792 - PlainH;
yScale = PlainH/792;
} else if (PlainH > 792) { //y is over
yDiff = PlainH - 792;
yScale = PlainH/792;
}
} else if (PlainW < 612) { //x is under
xDiff = 612 - PlainW;
xScale = PlainW/162;
if (PlainH < 792) { //y is under
yDiff = 792 - PlainH;
yScale = PlainH/792;
} else if (PlainH == 792) { //y is equal
yDiff = 792 - PlainH;
yScale = PlainH/792;
} else if (PlainH > 792) { //y is over
yDiff = PlainH - 792;
yScale = PlainH/792;
}
}
あなたは少なくとも7歳以上のiTextのバージョンを使用しています。お願い、それはやめて。現在のバージョン5.5.10または7.0.1を使用してください。あなたのコードも多くの条件文を使用しています。それは私の頭が読めないように傷つけ、理解しようとします。たとえば、なぜyScale = PlainH/792;が常にすべての条件の中にあるのですか?第2に、厳密に同じコードを実行する条件文がありますが、なぜそれらを結合しないのですか?最後に、AとBの2つの値があり、その差が必要な場合は、それらを比較しません。減算して絶対値を取る。 –
@AmedeeVanGasse私はiTextPDF 5にアップグレードする簡単な手順を見つけることができる場所を知っていますか?どのクラスが変更されたか(したがって、Javaファイルにインポートするもの)と、メソッドのいずれかが変更されているかどうかを探しています。 – dihakz
iText 2からiText 5まで?ほとんどの場合、 'com.lowagie'を' com.itextpdf'に変更するだけです。 http://itextsupport.com/apidocs/itext5/latest/をご覧ください。また、http://developers.itextpdf.com/ –