iTextの+ Freemarkerのは、中国、CSSや画像をサポートするために、輸出PDF、ヘッダーとフッター、ヘッダーは、iTextの+ Freemarkerのは、中国、CSSや画像、ヘッダーとフッターをサポートするために、輸出PDFを達成画像を追加達成、ヘッダーには、写真を追加します

抜粋:https://www.cnblogs.com/kaifaxiaoliu/p/IText.html

iTextの+ Freemarkerのは、中国、CSSや画像をサポートするために、輸出PDFを達成し、ヘッダーとフッター、ヘッダーには、写真を追加します

 

 

  特定の実装手順を参照ボーエンし、その実施を記録するために、本論文では  https://www.cnblogs.com/youzhibing/p/7692366.html  達成するために、彼のページに基づいておよびヘッダーとフッターを追加眉の写真

 

 

 

  WkhtmlToPdfもともとHTML、PDFに変換するHTMLページに決めたとスタイルを保存するにも非常に良いですが、最後の試み、私はhtmlページのアドレス変換のフレームワークは常に変換されます、彼はHTMLページを変換することができなかったことを私たちのフレームワークを発見しましたホームページの絵、無駄に複数のクエリは、最終的にはあきらめ、iTextのツールに変更します。

  私たちの需要がヘッダーとフッターを必要とし、ページヘッダのロゴ画像が必要とされているので、インターネットは、オンラインのさまざまな方法を試してみてください、ブログをたくさん見つける使用することはできないとして、私は質問の私の側を知りませんまたはテストされていないブロガーが記事に問題を入れ、最後は本当に私は自分の探査を開始した情報を見つけることができず、最終的には自分の探査によるピクチャヘッダ追加機能を実現するために、ここにそれを記録。

 

大雑把に実装手順は、次のようにただ、彼のPdfPageEventHelper継承し、特定のコードをビルドするクラスを追加し、記事のテキストの初期の側に基づいています。

 

コードをコピー
パッケージcom.tzCloud.core.utils。

輸入com.itextpdf.text.Chunk; 
輸入com.itextpdf.text.Document; 
輸入com.itextpdf.text.DocumentException。
輸入com.itextpdf.text.Element; 
輸入com.itextpdf.text.Font; 
輸入com.itextpdf.text.Image; 
輸入com.itextpdf.text.PageSize; 
輸入com.itextpdf.text.Phrase; 
輸入com.itextpdf.text.Rectangle; 
輸入com.itextpdf.text.pdf.BaseFont; 
輸入com.itextpdf.text.pdf.ColumnText; 
輸入com.itextpdf.text.pdf.PdfContentByte。
輸入com.itextpdf.text.pdf.PdfPageEventHelper; 
輸入com.itextpdf.text.pdf.PdfTemplate; 
輸入com.itextpdf.text.pdf.PdfWriter; 

インポートにjava.io.IOException;

/ ** 
 * PDFの書き出しヘッダー、フッター、透かしおよびその他の処理クラス
 *を設定し、追加のプロパティページ
 * 
 * @author LiuYu 
 * @date 2019年11月5日夜04時45分
 * / 
パブリッククラスPDFBuilder拡張PdfPageEventHelper { 

    / ** 
     *ページ眉
     * / 
    パブリック文字列のヘッダー=「ヘッダiTextのテスト」; 

    / ** 
     *ドキュメントのフォントサイズ、文字サイズと最高のヘッダフッタ一貫
     * / 
    公共int型presentFontSize = 12; 

    / ** 
     *ドキュメントのページサイズ、最高フロントA4用紙に、それ以外の場合はデフォルトを渡された
     * / 
    長方形= PageSize.A4の公共のpageSize; 

    / ** 
     *テンプレート
      * / 
    公共PdfTemplate合計; 

    / ** 
     *ベースフォントオブジェクト
     * / 
    公共BASEFONTのBF = NULL;

    / ** 
     一般的に漢字を生成するため、生成されたフォントオブジェクトを使用して*ベースのフォント
     * / 
    フォント= NULL fontDetail公共; 


    公共ボイドのsetHeader(列ヘッダ){ 
        this.header =ヘッダ; 
    } 

    公共ボイドsetPresentFontSize(INT presentFontSize){ 
        この= presentFontSize .presentFontSize; 
    } 

    / ** 
     * 
     *テンプレートを作成した文書を開いたときにTODO 
     * 
     * @see PdfPageEventHelper#OnOpenDocument(PDFWriterの、
     *文書)
     * / 
    @Override 
    ます。public void OnOpenDocument(PDFWriterのライター、文書ドキュメント){ 
        //総ページ矩形LWHの
        合計= writer.getDirectContent()createTemplate(50 、50); 
    } 

    / ** 
     *
     ヘッダが書き込まれたとき* 'ページにいくつかの一般的な言葉を書かれて、ページを閉じTODO。
     * 
     * @see PdfPageEventHelper#OnEndPage(PDFWriterの、
     *ドキュメント)
     * / 
    @Override 
    公共ボイドOnEndPage(PDFWriterのライター、文書ドキュメント){ 
        this.addPage(ライター、文献); 
        //this.addWatermark(writer); 
    } 

    //追加ページング
    ます。public voidのaddPage(PDFWriterのライター、文書ドキュメント){ 

        //ホームヘッダーとフッターを追加しません
        IF(writer.getPageNumber()== 1){ 
            //、背景の表紙を追加ホームここで追加2枚の背景画像、左下隅から一つずつ、特定の場所は、次の左上の位置情報から変更されてもよい
            トライ{ 
                 //画像を設定します画像の位置は、左の位置に左下隅である0,0 
                //ホームPDFの背景の上部
                Image.getInstanceイメージ=画像( "HTTPS:// ******"); 
                image.setAbsolutePosition(0、441); 
                 //画像サイズ設定
                image.scaleAbsolute(570、400); 

                //下のPDFホームページ図背景
                画像インスタンスImage.getInstance =( "HTTPS:// *****"); 
                instance.setAbsolutePosition(0、0); 
                instance.scaleAbsolute(595、260); 

                document.add(イメージ); 
                document.add (インスタンス); 
            }キャッチ(IOExceptionを| DocumentException E){ 
                e.printStackTrace(); 
            } 

            リターン; 
        } 

        //集合ページのヘッダーとフッターフォント 
        イメージ画像= NULL; 
        試み{ 
            //ヘッダロゴ画像例
            Image.getInstance =イメージ( "HTTPS:// ******"); 
            IF(BF == NULL){ 
                BF = BaseFont.createFont( "STSong-光"、 "UCS2-UniGB-H"、偽に) ; 
            } 
            IF(fontDetail == NULL){ 
                //スタイルのフォントデータ
                のフォント新しい新=(BF、presentFontSize、Font.NORMAL)fontDetail; 
            } 
        }キャッチ(DocumentException |のIOException E){ 
            e.printStackTrace(); 
        } 

        PdfContentByte directContent =ライター.getDirectContent(); 


        // 1、ヘッダ生成の右側
        間隔ヘッダの周りに配置された// document.right(-20)メソッド 
        // document.top(+20)メソッドセット上下ヘッダスペーシング
        ColumnText.showTextAligned(directContentを 
                Element.ALIGN_RIGHT、新しい新しいフレーズ( "電話:400-000-0000"、fontDetail)、
                document.right()、document.top()、0); 

        //!最も重要なことは、あなたは、ヘッダー画像を設定する必要がある場合、あなたは、チャンクオブジェクトのフレーズオブジェクトを追加するチャンクオブジェクト内の画像情報を追加する必要があり、ある
        フレーズP1 =新しい新しいフレーズ(「」、fontDetail); 
        p1.add(新新チャンク(イメージ、0、-30)); 
        // 1、左ヘッダ書き込み。
        ColumnText.showTextAligned(directContent、
                Element.ALIGN_LEFT、P1、
                document.left()、document.top(-20)、0); 

        // 2、右フッタ生成
        ColumnText.showTextAligned(directContentを、
                Element.ALIGN_RIGHT、新しいフレーズ(String.valueOf(document.getPageNumber() - 1)、fontDetail)、
                document.right()、document.bottom(-20)、0); 
 
        / / 2、左フッタを生成します
        (directContent、ColumnText.showTextAligned 
                Element.ALIGN_LEFT、新たなフレーズ( "******有限公司"、fontDetail)、
                document.left()、document.bottom(-20)、0); 


    } 

    / ** 
     *加水印
     * / 
    公共のボイドは、addwatermark(PDFWriterのライター){ 
        //水印图片
        画像の画像。
        {試みる
            画像= Image.getInstance( "./ウェブ/画像/ 001.JPGを"); 
            PdfContentByte含量= writer.getDirectContentUnder()。
            content.beginText(); 
            //書き込み開始透かし
            のために(INT = 0 K; K <5; K ++){ 
                ため(INT J = 0; J <4; J ++){ 
                    image.setAbsolutePosition(J * 150、170 * K)。 
                    content.addImage(イメージ); 
                } 
            } 
            content.endText(); 
        }キャッチ(IOExceptionを| DocumentException E){ 
            // TODO自動生成ブロックキャッチ
            e.printStackTrace(); 
        } 
    } 

    / ** 
     * 
     * TODOヘッダとフッタの組み立てを完了するために、テンプレートの交換、文書を閉じるとき
     * 
     * @see PdfPageEventHelper#OnCloseDocument(PDFWriterの、
     *文書)
     * / 
    @Override 
    公共ボイドOnCloseDocument (PDFWriterのライター、文書ドキュメント){ 
        // 7.最終ステップ、すなわち、文書が閉じられたとき、Yの実際の値にテンプレートを置換します、これまでのところ、Y生産のページxは、ドキュメントサイズの様々なと完全に互換性のある完成されています。
        total.beginText(); 
        //テンプレート生成したフォント、色
        total.setFontAndSize(BF、presentFontSize); 
        //フッタの内容スプライシングページ1/2の合計に記載されているように
        文字列foot2は= "" +(writer.getPageNumber ())+ " P"; 
        //テンプレートがコンテンツ表示
        total.showTextを(foot2); 
        total.endText(); 
        total.closePath(); 
    } 
}
コードをコピー

 

各ページのPDFの特定のアクションは、例えば、上記のコードは、自宅で添加する、このページは、文書の方法により、最初のいくつかのgetPageNumberのPDFに決定することができる、このクラスで実装することができ、その後、特定の操作を行うことができます背景図他の操作。

  この時点では、PDFヘッダに実現した画像を追加することができます

 

 

 
タグ:  iTextの

 

  特定の実装手順を参照ボーエンし、その実施を記録するために、本論文では  https://www.cnblogs.com/youzhibing/p/7692366.html  達成するために、彼のページに基づいておよびヘッダーとフッターを追加眉の写真

 

 

 

  WkhtmlToPdfもともとHTML、PDFに変換するHTMLページに決めたとスタイルを保存するにも非常に良いですが、最後の試み、私はhtmlページのアドレス変換のフレームワークは常に変換されます、彼はHTMLページを変換することができなかったことを私たちのフレームワークを発見しましたホームページの絵、無駄に複数のクエリは、最終的にはあきらめ、iTextのツールに変更します。

  私たちの需要がヘッダーとフッターを必要とし、ページヘッダのロゴ画像が必要とされているので、インターネットは、オンラインのさまざまな方法を試してみてください、ブログをたくさん見つける使用することはできないとして、私は質問の私の側を知りませんまたはテストされていないブロガーが記事に問題を入れ、最後は本当に私は自分の探査を開始した情報を見つけることができず、最終的には自分の探査によるピクチャヘッダ追加機能を実現するために、ここにそれを記録。

 

大雑把に実装手順は、次のようにただ、彼のPdfPageEventHelper継承し、特定のコードをビルドするクラスを追加し、記事のテキストの初期の側に基づいています。

 

コードをコピー
パッケージcom.tzCloud.core.utils。

輸入com.itextpdf.text.Chunk; 
輸入com.itextpdf.text.Document; 
輸入com.itextpdf.text.DocumentException。
輸入com.itextpdf.text.Element; 
輸入com.itextpdf.text.Font; 
輸入com.itextpdf.text.Image; 
輸入com.itextpdf.text.PageSize; 
輸入com.itextpdf.text.Phrase; 
輸入com.itextpdf.text.Rectangle; 
輸入com.itextpdf.text.pdf.BaseFont; 
輸入com.itextpdf.text.pdf.ColumnText; 
輸入com.itextpdf.text.pdf.PdfContentByte。
輸入com.itextpdf.text.pdf.PdfPageEventHelper; 
輸入com.itextpdf.text.pdf.PdfTemplate; 
輸入com.itextpdf.text.pdf.PdfWriter; 

インポートにjava.io.IOException;

/ ** 
 * PDFの書き出しヘッダー、フッター、透かしおよびその他の処理クラス
 *を設定し、追加のプロパティページ
 * 
 * @author LiuYu 
 * @date 2019年11月5日夜04時45分
 * / 
パブリッククラスPDFBuilder拡張PdfPageEventHelper { 

    / ** 
     *ページ眉
     * / 
    パブリック文字列のヘッダー=「ヘッダiTextのテスト」; 

    / ** 
     *ドキュメントのフォントサイズ、文字サイズと最高のヘッダフッタ一貫
     * / 
    公共int型presentFontSize = 12; 

    / ** 
     *ドキュメントのページサイズ、最高フロントA4用紙に、それ以外の場合はデフォルトを渡された
     * / 
    長方形= PageSize.A4の公共のpageSize; 

    / ** 
     *テンプレート
      * / 
    公共PdfTemplate合計; 

    / ** 
     *ベースフォントオブジェクト
     * / 
    公共BASEFONTのBF = NULL;

    / ** 
     一般的に漢字を生成するため、生成されたフォントオブジェクトを使用して*ベースのフォント
     * / 
    フォント= NULL fontDetail公共; 


    公共ボイドのsetHeader(列ヘッダ){ 
        this.header =ヘッダ; 
    } 

    公共ボイドsetPresentFontSize(INT presentFontSize){ 
        この= presentFontSize .presentFontSize; 
    } 

    / ** 
     * 
     *テンプレートを作成した文書を開いたときにTODO 
     * 
     * @see PdfPageEventHelper#OnOpenDocument(PDFWriterの、
     *文書)
     * / 
    @Override 
    ます。public void OnOpenDocument(PDFWriterのライター、文書ドキュメント){ 
        //総ページ矩形LWH
        合計= writer.getDirectContent()createTemplate(50 、50); 
    } 

    / ** 
     *
     ヘッダが書き込まれたとき* 'ページにいくつかの一般的な言葉を書かれて、ページを閉じTODO。
     * 
     * @see PdfPageEventHelper#OnEndPage(PDFWriterの、
     *ドキュメント)
     * / 
    @Override 
    公共ボイドOnEndPage(PDFWriterのライター、文書ドキュメント){ 
        this.addPage(ライター、文献); 
        //this.addWatermark(writer); 
    } 

    //追加ページング
    ます。public voidのaddPage(PDFWriterのライター、文書ドキュメント){ 

        //ホームヘッダーとフッターを追加しません
        IF(writer.getPageNumber()== 1){ 
            //、背景の表紙を追加ホームここで追加2枚の背景画像、左下隅から一つずつ、特定の場所は、次の左上の位置情報から変更されてもよい
            トライ{ 
                 //画像を設定します画像の位置は、左の位置に左下隅である0,0 
                //ホームPDFの背景の上部
                Image.getInstanceイメージ=画像( "HTTPS:// ******"); 
                image.setAbsolutePosition(0、441); 
                 //画像サイズ設定
                image.scaleAbsolute(570、400); 

                //下のPDFホームページ図背景
                画像インスタンスImage.getInstance =( "HTTPS:// *****"); 
                instance.setAbsolutePosition(0、0); 
                instance.scaleAbsolute(595、260); 

                document.add(イメージ); 
                document.add (インスタンス); 
            }キャッチ(IOExceptionを| DocumentException E){ 
                e.printStackTrace(); 
            } 

            リターン; 
        } 

        //集合ページのヘッダーとフッターフォント 
        イメージ画像= NULL; 
        試み{ 
            //ヘッダロゴ画像例
            Image.getInstance =イメージ( "HTTPS:// ******"); 
            IF(BF == NULL){ 
                BF = BaseFont.createFont( "STSong-光"、 "UCS2-UniGB-H"、偽に) ; 
            } 
            IF(fontDetail == NULL){ 
                //スタイルのフォントデータ
                のフォント新しい新=(BF、presentFontSize、Font.NORMAL)fontDetail; 
            } 
        }キャッチ(DocumentException |のIOException E){ 
            e.printStackTrace(); 
        } 

        PdfContentByte directContent =ライター.getDirectContent(); 


        // 1、ヘッダ生成の右側
        間隔ヘッダの周りに配置された// document.right(-20)メソッド 
        // document.top(+20)メソッドセット上下ヘッダスペーシング
        ColumnText.showTextAligned(directContentを 
                Element.ALIGN_RIGHT、新しい新しいフレーズ( "電話:400-000-0000"、fontDetail)、
                document.right()、document.top()、0); 

        //!最も重要なことは、あなたは、ヘッダー画像を設定する必要がある場合、あなたは、チャンクオブジェクトのフレーズオブジェクトを追加するチャンクオブジェクト内の画像情報を追加する必要があり、ある
        フレーズP1 =新しい新しいフレーズ(「」、fontDetail); 
        p1.add(新新チャンク(イメージ、0、-30)); 
        // 1、左ヘッダ書き込み。
        ColumnText.showTextAligned(directContent、
                Element.ALIGN_LEFT、P1、
                document.left()、document.top(-20)、0); 

        // 2、右フッタ生成
        ColumnText.showTextAligned(directContentを、
                Element.ALIGN_RIGHT、新しいフレーズ(String.valueOf(document.getPageNumber() - 1)、fontDetail)、
                document.right()、document.bottom(-20)、0); 
 
        / / 2、左フッタを生成します
        (directContent、ColumnText.showTextAligned 
                Element.ALIGN_LEFT、新たなフレーズ( "******有限公司"、fontDetail)、
                document.left()、document.bottom(-20)、0); 


    } 

    / ** 
     *加水印
     * / 
    公共のボイドは、addwatermark(PDFWriterのライター){ 
        //水印图片
        画像の画像。
        {試みる
            画像= Image.getInstance( "./ウェブ/画像/ 001.JPGを"); 
            PdfContentByte含量= writer.getDirectContentUnder()。
            content.beginText(); 
            //書き込み開始透かし
            のために(INT = 0 K; K <5; K ++){ 
                ため(INT J = 0; J <4; J ++){ 
                    image.setAbsolutePosition(J * 150、170 * K)。 
                    content.addImage(イメージ); 
                } 
            } 
            content.endText(); 
        }キャッチ(IOExceptionを| DocumentException E){ 
            // TODO自動生成ブロックキャッチ
            e.printStackTrace(); 
        } 
    } 

    / ** 
     * 
     * TODOヘッダとフッタの組み立てを完了するために、テンプレートの交換、文書を閉じるとき
     * 
     * @see PdfPageEventHelper#OnCloseDocument(PDFWriterの、
     *文書)
     * / 
    @Override 
    公共ボイドOnCloseDocument (PDFWriterのライター、文書ドキュメント){ 
        // 7.最終ステップ、すなわち、文書が閉じられたとき、Yの実際の値にテンプレートを置換します、これまでのところ、Y生産のページxは、ドキュメントサイズの様々なと完全に互換性のある完成されています。
        total.beginText(); 
        //テンプレート生成したフォント、色
        total.setFontAndSize(BF、presentFontSize); 
        //フッタの内容スプライシングページ1/2の合計に記載されているように
        文字列foot2は= "" +(writer.getPageNumber ())+ " P"; 
        //テンプレートがコンテンツ表示
        total.showTextを(foot2); 
        total.endText(); 
        total.closePath(); 
    } 
}
コードをコピー

 

各ページのPDFの特定のアクションは、例えば、上記のコードは、自宅で添加する、このページは、文書の方法により、最初のいくつかのgetPageNumberのPDFに決定することができる、このクラスで実装することができ、その後、特定の操作を行うことができます背景図他の操作。

  この時点では、PDFヘッダに実現した画像を追加することができます

 

 

おすすめ

転載: www.cnblogs.com/xichji/p/12009246.html