2012-06-20 13 views
15

私は私のpdfに入れたい透かしを持っています。ウォーターマークは.bmpイメージで、2290 x 3026です。この写真をページに合わせてサイズを変更しようとすると多くの問題が発生しています。iText Image Resize

Document document = new Document(); 
PdfWriter.getInstance(document, new FileOutputStream("result.pdf")); 
document.open(); 
document.add(new Paragraph("hello")); 
document.close(); 
PdfReader reader = new PdfReader("result.pdf"); 
int number_of_pages = reader.getNumberOfPages(); 
PdfStamper pdfStamper = new PdfStamper(reader, new FileOutputStream("result_watermark.pdf")); 
// Get the PdfContentByte type by pdfStamper. 
Image watermark_image = Image.getInstance("abstract(0307).bmp"); 
int i = 0; 
watermark_image.setAbsolutePosition(0, 0); 
watermark_image.scaleToFit(826, 1100); 
System.out.println(watermark_image.getScaledWidth()); 
System.out.println(watermark_image.getScaledHeight()); 
PdfContentByte add_watermark; 
while (i < number_of_pages) { 
    i++; 
    add_watermark = pdfStamper.getUnderContent(i); 
    add_watermark.addImage(watermark_image); 
} 
pdfStamper.close(); 

ここにはgetScaled()メソッドの出力があります。

826.0 - Width 
1091.4742 - Height 

私はpdfの写真を皆さんと共有しますが、残念ながら私はできません。

代わりに.jpgを使用する必要がありますか?私は、iTextがさまざまな画像拡張子をどれくらいうまく扱っているか本当に分かりません。

+0

あなたはPDFのスクリーンショットを追加できます。 http://meta.stackexchange.com/questions/75491/how-to-upload-an-image-to-a-postまたはhttp://meta.stackexchange.com/questions/57125/inserting-an-imageを参照してください。 -in-a-pre-tag – Ritesh

+0

これは問題ではありません。私が追加しているウォーターマークは会社のウォーターマークです。私はそれを周りに渡すことはできません。私はとにかく言われませんでした。 – Failsafe

+1

プログラムではなく手動でイメージの拡大縮小を試み、コードで手動で拡大縮小したイメージを使用しましたか?スケーリングされたディメンションをハードコードするように見えるので、PDFドキュメントにウォーターマークを付けるたびに処理が節約されます。 –

答えて

7

あなたは別のアプローチを使用することができます:画像処理により、すなわち(「手動」画像をリサイズソフトウェア)を使用することができます。

最終的な寸法がハードコードされているようだから、すでにサイズ変更された画像を使用して、PDF文書に透かしを入れるたびに処理時間を節約することができます。

40

私はそのようにそれを行う:

//if you would have a chapter indentation 
int indentation = 0; 
//whatever 
Image image = coolPic; 

float scaler = ((document.getPageSize().getWidth() - document.leftMargin() 
       - document.rightMargin() - indentation)/image.getWidth()) * 100; 

image.scalePercent(scaler); 

たぶん、古いスタイルが、それは私の作品;)

+0

残念ながらそれは私のためには機能しません。私が今までに得た最も近いものは、次のことでした: watermark_image.scalePercent(110 * 72/300); – Failsafe

+0

あなたはあなたの問題が何であるか正確に説明できますか?スケーリングは機能しません。でも、その時に使用しているスケーラーの出力は何ですか? –

+1

このアプローチは、デフォルトスケーリングが非常に低い解像度を持っているため、Alexisが提案したアイデアよりも優れていました。元の画像をpdfドキュメントに合わせてサイズを変更すると、72 dpi相当のピクセル解像度の低解像度画像が得られます。しかし、スケーリングでは、サイズを変更して高解像度を維持するようにサイズを変更した画像を使用することができます。 – Ted

17

使用

watermark_image.scaleAbsolute(826, 1100); 

代わりの

watermark_image.scaleToFit(826, 1100); 
10

画像の高さは文書の高さを超えた場合は、念のために

imageInstance.scaleAbsolute(requiredWidth, requiredHeight); 
+0

ありがとう@ Coach005、シンプルですばらしい!!!、それをアップに投票しました。歓声 –

8

を使用することができます。

float documentWidth = document.getPageSize().width() - document.leftMargin() - document.rightMargin(); 
float documentHeight = document.getPageSize().height() - document.topMargin() - document.bottomMargin(); 
image.scaleToFit(documentWidth, documentHeight); 
+0

これは良いです。 'Image.scaleToFit(PageSize.A4.getWidth()、PageSize.A4.getHeight());'を書くだけで、より大きな画像がページ境界から外れることがあります –

0
Document document = new Document(); 
    PdfWriter.getInstance(document, new FileOutputStream("F:\\Directory1\\sample1.pdf")); 
    document.open(); 

    Image img = Image.getInstance("F:\\Server\\Xyz\\WebContent\\ImageRestoring\\Rohit.jpg"); 
    img.scaleToFit(200, 200); 
    document.add(new Paragraph("Sample 1: This is simple image demo.")); 
    document.add(img); 
    document.close(); 
    System.out.println("Done"); 

//上記のプログラムは完全に実行され、画像を拡大縮小して、完璧な画像が得られることを願っています。

+0

これがなぜ受け入れられた5年前の問題を解決するのか他の答えよりもよく答えますか? –

+0

これは私が5年前に辞めた仕事のためだった...なぜあなたはこれに答えるのを迷ったのですか? – Failsafe

+0

遅くて申し訳ありませんが、私はこの5ヶ月間に専門的な仕事を始めました。私はこのサイトから多くの助けを得ていました。 –