수출 PDF를 달성 iText를 + 프리 마커 중국, CSS와 이미지, 머리글과 바닥 글을 지원하기 위해, 헤더 사진을 추가

 

  특정 구현을 참조하여, 자신의 구현을 기록하기 위해 본 논문은 보웬 단계  https://www.cnblogs.com/youzhibing/p/7692366.html  달성하기 위해,하지만 자신의 페이지에 기초하고하는 것은 머리글과 바닥 글을 추가 눈썹 사진

 

 

 

  WkhtmlToPdf 원래 PDF, HTML과 스타일도 아주 좋은 저장 변환 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일 16시 45분 
 * / 
공용  클래스 PDFBuilder (가) 확장 PdfPageEventHelper를 { 

    / ** 
     * 헤더 
     * / 
    공공 문자열 헤더 = "테스트 페이지를 iText를 눈썹 " ; 

    / ** 
     * 문서의 글꼴 크기, 텍스트 크기 및 최적의 헤더 바닥 글 일치 
     * / 
    공공  INT presentFontSize = 12 ; 

    / **
     * 문서의 페이지 크기, 가장 앞 통과, 그렇지 않으면 A4 용지에 기본값 
     * / 
    공공 사각형 pageSize가 =의 PageSize.A4; 

    / ** 
     * 템플릿 
      * / 
    공공 PdfTemplate 총; 

    / ** 
     * 기본 글꼴 객체 
     * / 
    공공 BASEFONT의 BF = 널 (null) ; 

    / ** 
     * 폰트 일반적 한자 생성에 사용되는 염기를 사용하여 생성 된 개체 
     * / 
    공용 폰트 fontDetail = 널을 , 


    공개  공극 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 (라이터); 
    } 

    // 페이징 추가 
    공공  무효 의 addPage합니다 (PDFWriter를 작가, 문서 문서) { 

        // 홈 머리글과 바닥 글을 추가 할 
        경우 (writer.getPageNumber () == 1 ) {
             // 배경의 표지를 추가, 우리가이 가정 배경, 특정의 왼쪽 상단에서 왼쪽 하단 모서리를 추가 위치는 다음 위치를 수정할 수 있습니다 
            은 try를 {
                 // 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 (); 
            } 

            반환  ;
        }

         // 설정 페이지 머리글과 바닥 글 글꼴 
        이미지 이미지 = ;
         은 try {
             // 헤더 로고 이미지 예제 
            이미지 Image.getInstance = ( "HTTPS : // ******" );
             IF (BF == 널 (null) ) { 
                BF = BaseFont.createFont ( "STSong 라이트"의 "UCS2-UniGB-H" 은 false ) 
            } 
            IF (fontDetail == 는 null ) {
                 // 데이터 스타일 폰트 
                fontDetail = 새로운 새로운 폰트 (BF, presentFontSize 글꼴. 정상 (NORMAL)); 
            } 
        } 캐치(DocumentException | IOException이 E) { 
            e.printStackTrace (); 
        } 

        PdfContentByte directContent = writer.getDirectContent (); 


        // . 1 헤더 생성 우측
         // 서에있는이 (-20) 방법은 헤더에 대해 배치 간격
         // document.top는 (+20)에있어서 수직 간격 헤더 설정 
        ColumnText.showTextAligned (directContent, 
                Element.ALIGN_RIGHT, 새로운 새 : 구 ( "텔 400-000-0000" , fontDetail) 
                서에있는 ()을 document.top (), 0 ); 

        //   ! ! ! ! 가장 중요한 것은 당신이 헤더 사진을 설정해야하는 경우, 당신은 청크 개체 구문 개체를 추가로 청크 개체에서 이미지 정보를 추가 할 필요가있다 
        구문 (P1) = 새로운 새로운구문 ( "" , fontDetail) 
        p1.add ( 새로운 새로운 청크 (이미지, 0, -30 ));
         // 1 왼쪽 헤더 물품. 
        ColumnText.showTextAligned (directContent, 
                Element.ALIGN_LEFT, P1, 
                document.left ( ) (document.top ) 0 -20 ); 

        // 2, 우측 풋터 생성 
        ColumnText.showTextAligned (directContent, 
                Element.ALIGN_RIGHT, 새로운 새로운 프레이즈 (한 String.valueOf (document.getPageNumber ()을 - 1. )를 fontDetail) , 
                서에있는 () document.bottom ( -20), 0 ); 

        // 2 좌측 풋터 생성 
        ColumnText.showTextAligned (directContent을
                Element.ALIGN_LEFT, 새로운 새 구문 ( "****** 제한" , fontDetail), 
                document.left (), document.bottom ( -20), 0 ); 


    } 

    / ** 
     * 워터 마크 
     * / 
    공공  무효 addWatermark ( 작가의 PDFWriter를) {
         // 워터 마크 이미지 
        이미지 이미지;
         은 try { 
            이미지 = Image.getInstance ( "./ 웹 / ImagesRF 로열티 무료 / 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) {
             / / 해야할 일 자동 생성 된 블록 캐치 
            e.printStackTrace (); 
        } 
    } 

    / ** 
     * 
     *해야할 일이 템플릿을 대체하는 문서를 닫을 때 조립 머리글과 바닥 글의 완료 
     * 
     * @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