itextpdf7自寫算法的表格展示 制表符


注意: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();
    }
}

效果

第一行是分為三份 ,其最后一個是居右對齊的

第一行是分為四份 ,其最后一個是居右對齊的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM