• 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.效果

  • 相关阅读:
    几种常见sqlalchemy查询:
    Python error: Unable to find vcvarsall.bat
    ES5中的数组方法
    JQuery的API
    异步加载中按需加载的代码
    js和jQuery中ajax的重要步骤
    编写一个JavaScript函数,把URL参数解析为一个对象
    弹性盒子的用法
    js实现飞机大战小游戏
    H5中的canvas完成动态时钟
  • 原文地址:https://www.cnblogs.com/zjk1/p/10299379.html
Copyright © 2020-2023  润新知