注意:1.itextpdf的版本為7.0.5(7.1.4的版本過高,用本示例會報錯(比如7.0.5是這個包是com.itextpdf.kernel.color.Color,在7.1.4會升級為com.itextpdf.kernel.colors.Color); 7.0.0的版本低, 也會報錯。)
2.jdk要在1.7及以上
3.maven版本也不要太低了(推薦3.3)
4.本文根據官方例子(https://itextpdf.com/en/resources/examples/itext-7/page-events-watermarking)改編,支持文字中文
自寫算法達到表格的效果代碼
package com.test; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import com.itextpdf.kernel.font.PdfFont; import com.itextpdf.kernel.font.PdfFontFactory; import com.itextpdf.kernel.geom.PageSize; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.layout.Document; import com.itextpdf.layout.Style; import com.itextpdf.layout.element.Paragraph; import com.itextpdf.layout.element.Tab; import com.itextpdf.layout.element.TabStop; import com.itextpdf.layout.property.TabAlignment; /** * pdf 段落添加制表符 * @author 鯤鵬展翅 * @date 2019年1月22日 下午3:08:14 * @desc */ public class Pdf{ public static final String DEST = "E:\\bbb\\段落添加制表符.pdf"; public static PdfFont watermark = null; public static void main(String[] args) throws Exception { watermark = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);//解決中文不顯示 // itext7需要jdk7及以上 jdk6就用itext5 File dest = new File(DEST); dest.getParentFile().mkdirs(); createPdf(DEST); } public static OutputStream createFile(String fileName) { File file = new File(fileName); // 創建一個文件之前判斷他的父路徑的文件夾是否存在,不存在需要創建 if (!new File(file.getParent()).exists()) new File(file.getParent()).mkdirs(); try { // 創建該文件夾 file.createNewFile(); } catch (IOException e1) { e1.printStackTrace(); } // 獲取所要創建pdf的文件的輸出流 OutputStream os = null; try { os = new FileOutputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); } return os; } public static void createPdf(String dest) throws Exception { // 建立一個書寫器(Writer)與document對象關聯,通過書寫器(Writer)可以將文檔寫入到磁盤中。 PdfWriter pdfWriter = new PdfWriter(createFile(DEST)); // 創建pdfDocument的對象與Writer的對象關聯 PdfDocument pdfDocument = new PdfDocument(pdfWriter); // 設定創建pdf的紙張大小 PageSize pageSize = PageSize.A4; // 創建Document的對象 Document document = new Document(pdfDocument, pageSize); float countWidth = pageSize.getWidth(); float l = document.getLeftMargin(); float r = document.getRightMargin(); float w = pageSize.getWidth() - document.getLeftMargin() - document.getRightMargin(); java.util.List<TabStop> tabstops = new ArrayList(); tabstops.add(new TabStop(countWidth - l, TabAlignment.LEFT)); tabstops.add(new TabStop(w/3+l, TabAlignment.LEFT)); tabstops.add(new TabStop(countWidth - r, TabAlignment.RIGHT)); Paragraph p = new Paragraph(); p.addTabStops(tabstops).addStyle(new Style().setBold().setFont(watermark).setFontSize(10.5f)); p.add("報告編號: 20190122").add(new Tab()); p.add("查詢時間: 2019.01.22 09:38:46").add(new Tab()); p.add("報告時間: 2019.01.22 13:09:26"); p.setMarginBottom(0); document.add(p); java.util.List<TabStop> tabstops2 = new ArrayList(); tabstops2.add(new TabStop(countWidth - l, TabAlignment.LEFT)); tabstops2.add(new TabStop(w/4+l, TabAlignment.LEFT)); tabstops2.add(new TabStop(w/4*2+l, TabAlignment.LEFT)); tabstops2.add(new TabStop(countWidth - r, TabAlignment.RIGHT)); Paragraph p2 = new Paragraph(); p2.addTabStops(tabstops2).addStyle(new Style().setBold().setFont(watermark).setFontSize(10.5f)); p2.add("姓名: 鯤鵬展翅").add(new Tab()); p2.add("證件類型: 身份證" ).add(new Tab()); p2.add("證件號碼: **************1234").add(new Tab()); p2.add("xx").add(new Tab()); p2.setMarginBottom(0); document.add(p2); document.flush(); // 關閉document document.close(); } }
效果
第一行是分為三份 ,其最后一個是居右對齊的
第一行是分為四份 ,其最后一個是居右對齊的

