2

iText を使用して、データベース内のデータの Pdf レポートを生成しています...

PDFのページのヘッダーは、画像にテキストが動的に追加された画像です。たとえば、生成された日付などです。

itext で PdfPTable タイプのテーブルに背景画像を設定できるかどうかは誰でも知っています。

ありがとう

4

2 に答える 2

4

私はそれが非常に遅いことを知っていますが、誰かを助けるかもしれません. これがその方法です。

クラス BGClass を作成し、PdfPCellEvent を実装して、次のメソッドに入ります。

@Override
    public void cellLayout(PdfPCell arg0, Rectangle arg1, PdfContentByte[] arg2) {
        try {
            PdfContentByte pdfContentByte = arg2[PdfPTable.BACKGROUNDCANVAS];
            Image bgImage = Image.getInstance("URL_TO_YOUR_IMAGE");
            pdfContentByte.addImage(bgImage, arg1.getWidth(), 0, 0, arg1
                    .getHeight(), arg1.getLeft(), arg1.getBottom());

        } catch (BadElementException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

PDFを作成しているメインクラスで、pdfpCell.setCellEvent(new BGClass()); ここで、pdfpCell は背景画像が必要なセルです。

于 2010-07-15T09:59:30.910 に答える
0

Prabhatのテクニックには1つか2つの欠陥があります。

  1. 画像のコピーが各セルのPDFに追加されます。返された画像をcellLayout呼び出しの間に保存して、コピーが1つだけになるようにします。10x10のテーブルと10kbの画像がある場合、PDFでは10kbではなく1mbを使用しています。痛い。そして、それは実際には、それらすべての余分なオブジェクトの余分なオーバーヘッドがある場合よりも少し悪いです(それほど悪くはありませんが、測定可能です)。
  2. セルごとに1つずつ、画像を並べて表示する必要があります。

で行った方がいいですPdfPTableEvent。テーブルが複数のページにまたがっている場合、イベントハンドラーはテーブルごとに1回呼び出されることに注意してください。heightsとパラメータはwidths少しファンキーです。それぞれの最初の値は絶対開始位置です。残りの値は実際には高さと幅です。便利ですが、変数名は少し誤解を招く可能性があります。

また、画像の各インスタンスは、PDF内のその画像の別のコピーを意味することに注意してください。'emを保存し、可能な限り'emを再利用します。

于 2010-11-02T18:00:29.373 に答える