web-dev-qa-db-ja.com

生成されたiTextの画像を中央揃えPDFドキュメント

PDFファイルを生成するためにライブラリ "com.itextpdf:itextg"を使用しています。私の要件はPDF A4形式のファイル、1つの画像に画像を追加することです1ページあたり。

ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
Image image = Image.getInstance(stream.toByteArray());
image.scaleToFit(PageSize.A4);
document.add(image);

デフォルトでは、画像は上揃えで追加され、PDFドキュメントページの下部に空きスペースが残ります。

画像を中央揃えにしたいので、すべての側面から均等なスペースが残され、画像が中央に配置されます。

SetAbsolutePositionメソッドがあることは知っていますが、absoluteXとabsoluteYが必要です。 CENTRE_HORIZONTALやCENTRE_VERTICALのような相対的なものが必要でした。誰かがPDF画像を中央揃え(垂直および水平)に)生成するのを手伝ってもらえますか?

6
Tarun

本当にA4ページが必要な場合は、拡大縮小された画像のX、Y位置を計算して、水平方向と垂直方向の両方の中央に配置する必要があります。

image.scaleToFit(PageSize.A4.getWidth(), PageSize.A4.getHeight());
float x = (PageSize.A4.getWidth() - image.getScaledWidth()) / 2;
float y = (PageSize.A4.getHeight() - image.getScaledHeight()) / 2;
image.setAbsolutePosition(x, y);
document.add(image);

これにより、画像がA4ページの中央に配置されます。

ただし、私があなたの場合、A4ページの中央に画像を配置しようとはしません。代わりに、ページサイズを画像のサイズに適合させます。

8
Bruno Lowagie

画像の水平方向の中央揃えは、次のコードで実現できます

        Image signature = Image.getInstance(stream.toByteArray());
        signature.scaleAbsolute(70f, 70f);
        signature.setAlignment(Element.ALIGN_CENTER);
3
Sumit Kumar