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日午後4時45分
 * / 
パブリック クラス PDFBuilder 延びPdfPageEventHelperは{ 

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

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

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

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

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

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


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

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

    / ** 
     * 
     *ドキュメントが開かれたテンプレートを作成TODO 
     * 
     * @see PdfPageEventHelper#OnOpenDocument(PDFWriterの、
     *資料)
     * / 
    @Override 
    公共 のボイドOnOpenDocument(PDFWriterのライター、文書ドキュメント){
         // 総ページ矩形LWH 
        合計= writer.getDirectContent()createTemplate(50、50 ); 
    } 

    / ** 
     * 
     *閉じるTODOページヘッダを書き込み、書き込み」ページいくつかの一般的な言葉。
     * 
     * @see PdfPageEventHelper#OnEndPage(PDFWriterの、
     *資料)
     * /
    @Override 
    公共 ボイドOnEndPage(PDFWriterのライター、文書ドキュメント){
         この.addPage(ライター、文献);
         // this.addWatermark(ライター); 
    } 

    //はページングaddが
    公共 ボイドのaddPage(PDFWriterのライター、文書ドキュメント){ 

        // ホームヘッダーとフッターを追加しない
        のIF(writer.getPageNumber()== 1 ){
             // 背景の表紙を追加し、ここでは2つのホームのバックグラウンド、特定の左上隅から左下隅を追加しました場所は次の場所に変更することができます
            試して{
                 // PDFホームトップの背景 
                イメージイメージ= Image.getInstance(「HTTPS:// ******」);
                  // 画像の位置は、画像位置の左にある左下隅で設定0,0
                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 ){
                 // データスタイルのフォント 
                fontDetail = 新しい新しいフォント(BF、presentFontSize、Font.NORMAL ); 
            } 
        } キャッチ(DocumentException | のIOException E){ 
            e.printStackTrace(); 
        } 

        PdfContentByte directContent = writer.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、左フッタ生成
        ColumnText.showTextAligned(directContentを
                Element.ALIGN_LEFT、新しい新規の語句( "******リミテッド" 、fontDetail)、
                document.left()、document.bottom( -20)、0 ); 


    } 

    / ** 
     *透かし
     * / 
    公共 ボイドは、addwatermark(PDFWriterのライター){
         // 透かし画像
        イメージイメージ、
         試し{ 
            画像 = Image.getInstance( "./ウェブ/ RFロイヤリティーフリー/ 001.JPG" ); 
            PdfContentByte内容 = writer.getDirectContentUnder(); 
            content.beginText(); 
            // 透かしを書き始める
            ためにint型の K = 0; K <5; K ++ ){
                 INT。J = 0; J <4; J ++ ){ 
                    image.setAbsolutePosition( 150 J *、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/kaifaxiaoliu/p/IText.html