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画像を中央揃え(垂直および水平)に)生成するのを手伝ってもらえますか?
本当に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ページの中央に画像を配置しようとはしません。代わりに、ページサイズを画像のサイズに適合させます。
画像の水平方向の中央揃えは、次のコードで実現できます
Image signature = Image.getInstance(stream.toByteArray());
signature.scaleAbsolute(70f, 70f);
signature.setAlignment(Element.ALIGN_CENTER);