2016-10-24 12 views
0

さまざまなサイズの画像を取り込んで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; 
    } 
} 
+1

あなたは少なくとも7歳以上のiTextのバージョンを使用しています。お願い、それはやめて。現在のバージョン5.5.10または7.0.1を使用してください。あなたのコードも多くの条件文を使用しています。それは私の頭が読めないように傷つけ、理解しようとします。たとえば、なぜyScale = PlainH/792;が常にすべての条件の中にあるのですか?第2に、厳密に同じコードを実行する条件文がありますが、なぜそれらを結合しないのですか?最後に、AとBの2つの値があり、その差が必要な場合は、それらを比較しません。減算して絶対値を取る。 –

+0

@AmedeeVanGasse私はiTextPDF 5にアップグレードする簡単な手順を見つけることができる場所を知っていますか?どのクラスが変更されたか(したがって、Javaファイルにインポートするもの)と、メソッドのいずれかが変更されているかどうかを探しています。 – dihakz

+0

iText 2からiText 5まで?ほとんどの場合、 'com.lowagie'を' com.itextpdf'に変更するだけです。 http://itextsupport.com/apidocs/itext5/latest/をご覧ください。また、http://developers.itextpdf.com/ –

答えて

2

あなたのコードは本当に分かりにくいです!どのようにして簡単にできるのかをお見せします。

これはあなたのコードです:次に

if (PlainW >= 612) { 
    xDiff = PlainW - 612; 
    xScale = PlainW/612; 
    if (PlainH < 792) { 
     yDiff = 792 - PlainH; 
    } else if (PlainH == 792) { 
     yDiff = 792 - PlainH; 
    } else if (PlainH > 792) { 
     yDiff = PlainH - 792; 
    } 
} else if (PlainW < 612) { 
    xDiff = 612 - PlainW; 
    xScale = PlainW/162; 
    if (PlainH < 792) { 
     yDiff = 792 - PlainH; 
    } else if (PlainH == 792) { 
     yDiff = 792 - PlainH; 
    } else if (PlainH > 792) { 
     yDiff = PlainH - 792; 
    } 
} 
yScale = PlainH/792; 

:すべての条件付きインサイド

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; 
    } 
} 

、あなただけのこの(さらに私は役に立たないコメントを処分した)のように、その外側に入れ、yScale = PlainH/792;を持っていますのようないくつかの条件式があります。

お待ちください! 2つの整数を比較し、最大のものから最小のものを減算しますか?違いの絶対的な価値をとらえてみませんか?

if (PlainW >= 612) { 
    xDiff = PlainW - 612; 
    xScale = PlainW/612; 
    yDiff = Math.abs(PlainH - 792); 
} else if (PlainW < 612) { 
    xDiff = 612 - PlainW; 
    xScale = PlainW/162; 
    yDiff = Math.abs(PlainH - 792); 
} 
yScale = PlainH/792; 

ここでも、条件付きの中に同じコードがあります。それを外に出しなさい!

if (PlainW >= 612) { 
    xDiff = PlainW - 612; 
} else if (PlainW < 612) { 
    xDiff = 612 - PlainW; 
} 
xScale = PlainW/612; 
yDiff = Math.abs(PlainH - 792); 
yScale = PlainH/792; 

再び、2つの整数を比較しMath.absで置き換えることができる最大から最小を差し引きます。

xDiff = Math.abs(PlainW - 612); 
xScale = PlainW/612; 
yDiff = Math.abs(PlainH - 792); 
yScale = PlainH/792; 

Look!あなたのコードは27行から4行に減らされ、ZEROという条件が含まれていて、理解するのがはるかに簡単です!

+0

のドキュメントもあります。ありがとうございました。 iTextの私のバージョンを更新する方法も見ていきます! – dihakz

関連する問題