java使用itextpdf7实现导出pdf表格;java使用itextpdf7实现pdf加水印

注意: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)改编,支持文字中文

1.pom文件添加dependency

            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>kernel</artifactId>
                <version>7.0.5</version>
            </dependency>
         
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>io</artifactId>
                <version>7.0.5</version>
            </dependency>
         
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>layout</artifactId>
                <version>7.0.5</version>
            </dependency>
         
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>forms</artifactId>
                <version>7.0.5</version>
            </dependency>
         
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>pdfa</artifactId>
                <version>7.0.5</version>
            </dependency>
         
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>sign</artifactId>
                <version>7.0.5</version>
            </dependency>
         
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>barcodes</artifactId>
                <version>7.0.5</version>
            </dependency>
         
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>font-asian</artifactId>
                <version>7.0.5</version>
            </dependency>
         
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>hyph</artifactId>
                <version>7.0.5</version>
            </dependency>

2.代码

package com.test;

import com.itextpdf.io.font.FontConstants;
import com.itextpdf.kernel.color.Color;
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.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.layout.property.VerticalAlignment;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;

/**
 * 生成pdf表格(带水印)
 * @author kpzc
 * @date 2019年1月21日 下午3:55:43
 * @desc 
 */
public class Watermarking {
    public static final String DATA = "C:\Users\kpzc\Desktop\united_states.csv";
    public static final String DEST = "E:\bbb\bb.pdf";

    public static void main(String[] args) throws Exception {
        File file = new File(DEST);
        file.getParentFile().mkdirs();
        new Watermarking().manipulatePdf(DEST);
    }

    public void process(Table table, String line, PdfFont font, boolean isHeader) {
        StringTokenizer tokenizer = new StringTokenizer(line, ";");
        int c = 0;
        while (tokenizer.hasMoreTokens() && c++ < 3) {
            if (isHeader) {
                table.addHeaderCell(new Cell().add(new Paragraph(tokenizer.nextToken()).setFont(font)));
            } else {
                table.addCell(new Cell().add(new Paragraph(tokenizer.nextToken()).setFont(font)));
            }
        }
    }

    protected void manipulatePdf(String dest) throws Exception {
        PdfDocument pdfDoc = new PdfDocument(new PdfWriter(DEST));
        Document doc = new Document(pdfDoc);
        pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new WatermarkingEventHandler());

        //PdfFont font = PdfFontFactory.createFont(FontConstants.HELVETICA);
        PdfFont font =PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);//支持中文
        //PdfFont bold = PdfFontFactory.createFont(FontConstants.HELVETICA_BOLD);
        PdfFont bold =PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);//支持中文

        Table table = new Table(new float[]{4, 1, 3});
        table.setWidthPercent(100);

        BufferedReader br = new BufferedReader(new FileReader(DATA));
        String line = br.readLine();
        process(table, line, bold, true);
        while ((line = br.readLine()) != null) {
            process(table, line, font, false);
        }
        br.close();
        doc.add(table);
        doc.close();
    }


    protected class WatermarkingEventHandler implements IEventHandler {
        @Override
        public void handleEvent(Event event) {
            PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
            PdfDocument pdfDoc = docEvent.getDocument();
            PdfPage page = docEvent.getPage();
            PdfFont font = null;
            try {
                //font = PdfFontFactory.createFont(FontConstants.HELVETICA_BOLD);
                font =PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);//支持中文
            } catch (IOException e) {
                e.printStackTrace();
            }
            PdfCanvas pdfCanvas = new PdfCanvas(page.newContentStreamBefore(), page.getResources(), pdfDoc);

            new Canvas(pdfCanvas, pdfDoc, page.getPageSize())
                    .setFontColor(Color.LIGHT_GRAY)
                    .setFontSize(60)
                    .setFont(font)
                    .showTextAligned(new Paragraph("我是水印
	鲲鹏展翅"), 298, 421, pdfDoc.getPageNumber(page),
                            TextAlignment.CENTER, VerticalAlignment.MIDDLE, 45);
        }
    }
}

3.united_states.csv文件

name;abbr;capital;most populous city;population;square miles;time zone 1;time zone 2;dst
张三;AL;Montgomery;Birmingham;4,708,708;52,423;CST (UTC-6);EST (UTC-5);YES
ALASKA;AK;Juneau;Anchorage;698,473;656,425;AKST (UTC-09) ;HST (UTC-10) ;YES
ARIZONA;AZ;Phoenix;Phoenix;6,595,778;114,006;MT (UTC-07); ;NO
ARKANSAS;AR;Little Rock;Little Rock;2,889,450;53,182;CST (UTC-6); ;YES
CALIFORNIA;CA;Sacramento;Los Angeles;36,961,664;163,707;PT (UTC-8); ;YES
COLORADO;CO;Denver;Denver;5,024,748;104,100;MT (UTC-07); ;YES
CONNECTICUT;CT;Hartford;Bridgeport;3,518,288;5,544;EST (UTC-5); ;YES
DELAWARE;DE;Dover;Wilmington;885,122;1,954;EST (UTC-5); ;YES
FLORIDA;FL;Tallahassee;Jacksonville;18,537,969;65,758;EST (UTC-5);CST (UTC-6);YES
GEORGIA;GA;Atlanta;Atlanta;9,829,211;59,441;EST (UTC-5); ;YES
HAWAII;HI;Honolulu;Honolulu;1,295,178;10,932;HST (UTC-10) ; ;NO
IDAHO;ID;Boise;Boise;1,545,801;83,574;MT (UTC-07);PT (UTC-8);YES
ILLINOIS;IL;Springfield;Chicago;12,910,409;57,918;CST (UTC-6); ;YES
INDIANA;IN;Indianapolis;Indianapolis;6,423,113;36,420;EST (UTC-5);CST (UTC-6);YES
IOWA;IA;Des Moines;Des Moines;3,007,856;56,276;CST (UTC-6); ;YES
KANSAS;KS;Topeka;Wichita;2,818,747;82,282;CST (UTC-6);MT (UTC-07);YES
KENTUCKY;KY;Frankfort;Louisville;4,314,113;40,411;EST (UTC-5);CST (UTC-6);YES
LOUISIANA;LA;Baton Rouge;New Orleans;4,492,076;51,843;CST (UTC-6); ;YES
MAINE;ME;Augusta;Portland;1,318,301;35,387;EST (UTC-5); ;YES
MARYLAND;MD;Annapolis;Baltimore;5,699,478;12,407;EST (UTC-5); ;YES
MASSACHUSETTS;MA;Boston;Boston;6,593,587;10,555;EST (UTC-5); ;YES
MICHIGAN;MI;Lansing;Detroit;9,969,727;96,810;EST (UTC-5);CST (UTC-6);YES
MINNESOTA;MN;Saint Paul;Minneapolis;5,266,214;86,943;CST (UTC-6); ;YES
MISSISSIPPI;MS;Jackson;Jackson;2,951,996;48,434;CST (UTC-6); ;YES
MISSOURI;MO;Jefferson City;Kansas City;5,987,580;69,709;CST (UTC-6); ;YES
MONTANA;MT;Helena;Billings;974,989;147,046;MT (UTC-07); ;YES
NEBRASKA;NE;Lincoln;Omaha;1,796,619;77,358;CST (UTC-6);MT (UTC-07);YES
NEVADA;NV;Carson City;Las Vegas;2,643,085;110,567;PT (UTC-8);MT (UTC-07);YES
NEW HAMPSHIRE;NH;Concord;Machester;1,324,575;9,351;EST (UTC-5); ;YES
NEW JERSEY;NJ;Trenton;Newark;8,707,739;8,722;EST (UTC-5); ;YES
NEW MEXICO;NM;Santa Fe;Albuquerque;2,009,671;121,593;MT (UTC-07); ;YES
NEW YORK;NY;Albany;New York;19,541,453;54,475;EST (UTC-5); ;YES
NORTH CAROLINA;NC;Raleigh;Charlotte;9,380,884;53,821;EST (UTC-5); ;YES
NORTH DAKOTA;ND;Bismarck;Fargo;646,844;70,704;CST (UTC-6);MT (UTC-07);YES
OHIO;OH;Columbus;Columbus;11,542,645;44,828;EST (UTC-5); ;YES
OKLAHOMA;OK;Oklahoma City;Oklahoma City;3,687,050;69,903;CST (UTC-6); ;YES
OREGON;OR;Salem;Portland;3,825,657;98,386;PT (UTC-8);MT (UTC-07);YES
PENNSYLVANIA;PA;Harrisburg;Philadelphia;12,604,767;46,058;EST (UTC-5); ;YES
RHODE ISLAND;RI;Providence;Providence;1,053,209;1,545;EST (UTC-5); ;YES
SOUTH CAROLINA;SC;Columbia;Columbia;4,561,242;32,007;EST (UTC-5); ;YES
SOUTH DAKOTA;SD;Pierre;Sioux Falls;812,383;77,121;CST (UTC-6);MT (UTC-07);YES
TENNESSEE;TN;Nashville;Memphis;6,296,254;42,146;CST (UTC-6);EST (UTC-5);YES
TEXAS;TX;Austin;Houston;24,782,302;268,601;CST (UTC-6);MT (UTC-07);YES
UTAH;UT;Salt Lake City;Salt Lake City;2,784,572;84,904;MT (UTC-07); ;YES
VERMONT;VT;Montpelier;Burlington;621,760;9,615;EST (UTC-5); ;YES
VIRGINIA;VA;Richmond;Virginia Beach;7,882,590;42,769;EST (UTC-5); ;YES
WASHINGTON;WA;Olympia;Seattle;6,664,195;71,303;PT (UTC-8); ;YES
WEST VIRGINIA;WV;Charleston;Charleston;1,819,777;24,231;EST (UTC-5); ;YES
WISCONSIN;WI;Madison;Milwaukee;5,654,774;65,503;CST (UTC-6); ;YES
WYOMING;WY;Cheyenne;Cheyenne;544,270;97,818;MT (UTC-07); ;YES

4.效果

原文地址:https://www.cnblogs.com/zjk1/p/10299379.html