java: itext 7.2.1 using jdk 14.0.2

 

//import com.itextpdf.layout.properties.*; //7.2.0
//import com.itextpdf.layout.properties.VerticalAlignment;//7.2.0
import com.itextpdf.layout.property.*; //7.1.10
import com.itextpdf.layout.property.VerticalAlignment;//7.1.10

 

 

 /**
	      * 獲取統一字體
	      * 
	      * **/
	    public static PdfFont getPdfFont(){
	        PdfFont pdfFont = null;
	        try {
	            pdfFont = PdfFontFactory.createFont(path, PdfEncodings.IDENTITY_H);
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	        return pdfFont;
	    }
	    
	    
	    /**
	     * 生成簡單PDF
	     * 塗聚文 Geovin Du
	     * 
	     * */
	    public static void duPdf(){
	        //語法糖
	        try (PdfWriter writer = new PdfWriter(new File("src/geoivndu4.pdf"));
	             PdfDocument pdf = new PdfDocument(writer);
	             Document document = new Document(pdf, PageSize.A4.rotate());
	        ){

	            //設置文檔屬性
	            pdf.getDocumentInfo().setAuthor("塗聚文");
	            pdf.getDocumentInfo().setTitle("IText測試PDF");
	            pdf.getDocumentInfo().setSubject("塗聚文公司");
	            pdf.getDocumentInfo().setMoreInfo("塗聚文","111");
	            pdf.getDocumentInfo().setCreator("geovindu");
	            pdf.getDocumentInfo().setKeywords("IText塗聚文");

	            //註冊事件監聽
	            pdf.addEventHandler(PdfDocumentEvent.END_PAGE, new DuEventHandler());

	            //設置字體
	            document.setFont(getPdfFont());

	            //頁邊距
	            document.setMargins(20, 20, 20, 20);

	            //簡單文字
	            document.add(new Paragraph("簡單文字"));
	            document.add(new Paragraph("Hello Word!").add(new Tab()).add(new Text("你好!").addStyle(new Style().setFontSize(24))));

	            //簡單圖片
	            document.add(new Paragraph("簡單圖片"));
	            document.add(new Image(ImageDataFactory.create("src/resource/geovindulogo.jpg")));

	            //簡單表格
	            document.add(new Paragraph("簡單表格"));
	            Table table = new Table(new float[]{3, 3, 4});
	            PdfFont font = getPdfFont();
	            //標題、內容
	            process(table, "姓名;年齡;電話號碼", font, true);
	            for (int i = 0; i < 5; i++) {
	                process(table, "塗聚文"+i+";"+(18+i)+";1500000000"+i, font, false);
	            }
	            document.add(table);

	            //超鏈接
	            document.add(new Paragraph("超鏈接"));
	            PdfLinkAnnotation annotation = new PdfLinkAnnotation(new Rectangle(0, 0));
	            annotation.setAction(PdfAction.createURI("https://itextpdf.com/"));
	            Paragraph p = new Paragraph("更多精彩內容,猛戳:").add(new Link("這裏", annotation));
	            document.add(p);
	            
	            pdf.addNewPage();
	            //換一頁
	            document.add(new AreaBreak(AreaBreakType.NEXT_PAGE));
	            pdf.addNewPage();
	            document.close();
	            System.out.println("操作完成!");

	        } catch (IOException e) {
	            e.printStackTrace();
	            System.err.println("操作異常...");
	        }
	    }

  

//import com.itextpdf.html2pdf.ConverterProperties;
//import com.itextpdf.html2pdf.HtmlConverter;

/**
 * 版權所有 2022 塗聚文有限公司
 * 許可信息查看:
 * 描述:
 * 
 * 數據庫:Ms SQL server 2019
 * IDE: Eclipse IDE for Enterprise Java and Web Developers - 2021-09
 * OS: Windows 10 x64
 * IDE: Eclipse IDE for Enterprise Java and Web Developers - 2021-09
 * 歷史版本: JDK 14.0.2
 * 2022-1-12 創建者 geovindu
 * 2022-1-15 添加 Lambda
 * 2022-1-15 修改:date
 * 接口類 mssql-jdbc-9.4.1.jre16.jar.
 * 數據庫:MSSQL Server 2019
 * 2022-1-25 修改者:Geovin Du
 * 生成API幫助文檔的指令:
 *javadoc - -encoding Utf-8 -d apidoc iTextPdfHelper.java
 *https://www.microsoft.com/en-us/software-download/windows10
 *https://github.com/PaddlePaddle/PaddleOCR
 *https://docs.microsoft.com/es-es/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15
 *https://github.com/microsoft/mssql-jdbc/blob/main/README.md
 *oracle.jdbc.driver.OracleDriver
 *
 */

import com.itextpdf.io.font.PdfEncodings;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.colors.Color;
import com.itextpdf.kernel.colors.DeviceRgb;
import com.itextpdf.kernel.events.Event;
import com.itextpdf.kernel.events.IEventHandler;
import com.itextpdf.kernel.events.PdfDocumentEvent;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.action.PdfAction;
import com.itextpdf.kernel.pdf.annot.PdfLinkAnnotation;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.Style;
import com.itextpdf.layout.element.*;
import com.itextpdf.layout.font.FontProvider;
import com.itextpdf.layout.properties.*;
import com.itextpdf.layout.properties.VerticalAlignment;
import com.itextpdf.kernel.pdf.canvas.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

/**
 * itext 7.2.1
 * log4j 1.2.16
 * slf4j api 1.7.33
 * slf4j-log4j 12-1.7.33
 * 
 * */
public class DuEventHandler implements IEventHandler  {
	
	
	
	private static final String FONT = "C:/Windows/Fonts/simhei.ttf";

	
	
	private String markString="塗聚文 Geovin Du";
	
	private String headString="塗聚文人事系統分析論文";
	
	public DuEventHandler()
	{}
	/**
	 * 
	 * 
	 * **/
	public DuEventHandler(String markString,String headstring)
	{
		this.headString=headstring;
		this.markString=markString;
	}
	
	 @Override
     public void handleEvent(Event event) {
		 
		 
		 try
		 {
         PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
         PdfDocument pdfDoc = docEvent.getDocument();
         PdfPage page = docEvent.getPage();
         int pageNumber = pdfDoc.getPageNumber(page);
         int pageTotal=pdfDoc.getNumberOfPages();
         Rectangle pageSize = page.getPageSize();
         PdfCanvas pdfCanvas = new PdfCanvas(page.newContentStreamBefore(), page.getResources(), pdfDoc);

         //背景顏色
         Color backgroundColor = new DeviceRgb(245, 245, 245);;
         pdfCanvas.saveState()
                 .setFillColor(backgroundColor)
                 .rectangle(pageSize.getLeft(), pageSize.getBottom(),pageSize.getWidth(), pageSize.getHeight())
                 .fill().restoreState();

         //頁腳頁眉
         PdfFont pdfFont = getPdfFont();
         String header = headString;
         String footer = "第 "+pageNumber+" 頁 共 "+pageTotal +"頁";
         pdfCanvas.beginText()
                 .setFontAndSize(pdfFont, 9)
                 .moveText((pageSize.getWidth() / 2) - (pdfFont.getWidth(header) / 200), pageSize.getTop() - 20)
                 .showText(header)
                 .moveText((pdfFont.getWidth(header) / 200) - (pdfFont.getWidth(footer) / 200), -pageSize.getTop() + 30)
                 .showText(footer)
                 .endText();
         
         Rectangle rectangle = new Rectangle(36, 650, 100, 100);
          //文字水印
         Canvas canvas = new Canvas(pdfCanvas,rectangle); 
         canvas.setFontColor(new DeviceRgb(200, 200, 200));
         canvas.setProperty(20, 20);
         canvas.setFont(pdfFont);
         for (int i = 0; i < 5; i++) {
             for (int j = 0; j < 5; j++) {
                 canvas.showTextAligned(new Paragraph(markString).setOpacity(0.8f),(150 + i * 300), (160 + j * 150), pdfDoc.getPageNumber(page), TextAlignment.CENTER, VerticalAlignment.MIDDLE, 45);
             }
         }

         pdfCanvas.release();
		 }
		 catch(Exception ex)
		 {
			 ex.printStackTrace();
		 }
         
         
     }
	 
	      //獲取統一字體
	    public static PdfFont getPdfFont(){
	        PdfFont pdfFont = null;
	        try {
	            pdfFont = PdfFontFactory.createFont(FONT, PdfEncodings.IDENTITY_H);
	        } catch (IOException e) {
	            e.printStackTrace();
	        }
	        return pdfFont;
	    }
	 

}

  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章