springboot itextpdf 编写pdf

复制代码
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.4.3</version>
</dependency>
java 复制代码
package com.ljt.study.controller;

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.draw.LineSeparator;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public class Study {
    public static void main(String[] args) {
        Document document = new Document(PageSize.A4);
        /** 创建 PdfWriter 对象 */// 文档对象的引用
        // 为document创建一个监听,并把PDF流写到文件中
        String filePath = "D:\\temp.pdf";
        try {
            PdfWriter.getInstance(document, new FileOutputStream(filePath)); // 文件的输出路径+文件的实际名称
            document.open();// 打开文档

            //"C:\\Windows\\Fonts\\simfang.ttf"
            BaseFont bf = BaseFont.createFont("C:\\Windows\\Fonts\\simfang.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            Font titleFont = new Font(bf, 10, Font.BOLD); // 24号加粗斜体
            // 空格代码
            Paragraph blank = new Paragraph(" ");

            Paragraph titleParagraph = new Paragraph("RISEN ENERGY CO.,LTD", titleFont);
            document.add(titleParagraph); // 文档标题
            document.add(blank);
            Paragraph addressParagraph = new Paragraph("Address: NO.1 SHUINAN ROAD,ZHIXI INDUSTRIAL ZONE,JINTAN CITY CHANGZHOU, JIANGSU PROVINCE, CHINA\nTel: +86 519-82359071\nFax: info@risenenergy.com", new Font(bf, 10, Font.NORMAL));
            document.add(addressParagraph); // 客户地址
            document.add(blank);
            document.add(blank);
            document.add(blank);


            // 画横线
            //1.线宽度
            //2.直线长度,是个百分百,0-100之间
            //3.直线颜色
            //4.直线位置
            //5.上下移动位置
            LineSeparator line = new LineSeparator(2f, 100, BaseColor.BLACK, Element.ALIGN_CENTER, 0f);
            document.add(line); // 画横线
            Paragraph invoiceParagraph = new Paragraph("INVOICE", new Font(bf, 20, Font.BOLD));
            invoiceParagraph.setSpacingBefore(20);
            document.add(invoiceParagraph); // invoice
            document.add(blank);
            Paragraph billTo = new Paragraph("Bill To", new Font(bf, 12, Font.BOLD));
            document.add(billTo); // billto



            Paragraph headerInfoParagraph = new Paragraph("头部信息", new Font(bf, 12, Font.NORMAL));
            headerInfoParagraph.setIndentationRight(PageSize.A4.getWidth() / 2 - 30);
            Paragraph addressParagraph_ = new Paragraph("北京市朝阳区XXX号", new Font(bf, 12, Font.NORMAL));
            Paragraph telFaxParagraph_ = new Paragraph("888888888", new Font(bf, 12, Font.NORMAL));
            document.add(headerInfoParagraph);
            document.add(addressParagraph_);
            document.add(telFaxParagraph_);

            document.add(blank);

            //处理表格
            List<String> invoiceList = createInvoiceList();
            float[] columnWidths = {1.2f, // 件号
                    1.5f, // 英文品名
                    1f, // 数量
                    0.8f, // 单位
                    1.1f, // 币制
                    1.1f, // 单价
                    1.5f, // 总价
            };
            // 设置表格列宽参数
            getCiTableList(document, 7, columnWidths, invoiceList, "CI", 100, new Font(bf, 13, Font.BOLD), new Font(bf, 13, Font.NORMAL));

            document.close();

        } catch (DocumentException e) {
            throw new RuntimeException(e);
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }


    }



    public static List<String> createInvoiceList() {
        List<String> invoiceList = new ArrayList<>();
        /****标题行****/
        invoiceList.add("Part No.");
        invoiceList.add("DESCRIPTION");
        invoiceList.add("QTY.");
        invoiceList.add("UNIT");
        invoiceList.add("CURRENCY");
        invoiceList.add("Unit price");
        invoiceList.add("AMOUNT");


        /****每行的值****/
        invoiceList.add("SA-14400-1"); // 件号物料号
        invoiceList.add("SA-14400-1"); // 件号物料号
        invoiceList.add("10"); // 件号物料号
        invoiceList.add("KG"); // 单位
        invoiceList.add("KG"); // 币制
        invoiceList.add("20"); // 单价
        invoiceList.add("100"); // 总价

        invoiceList.add("SA-14400-1"); // 件号物料号
        invoiceList.add("SA-14400-1"); // 件号物料号
        invoiceList.add("10"); // 件号物料号
        invoiceList.add("KG"); // 单位
        invoiceList.add("KG"); // 币制
        invoiceList.add("20"); // 单价
        invoiceList.add("100"); // 总价

        invoiceList.add("SA-14400-1"); // 件号物料号
        invoiceList.add("SA-14400-1"); // 件号物料号
        invoiceList.add("10"); // 件号物料号
        invoiceList.add("KG"); // 单位
        invoiceList.add("KG"); // 币制
        invoiceList.add("20"); // 单价
        invoiceList.add("100"); // 总价

        invoiceList.add("SA-14400-1"); // 件号物料号
        invoiceList.add("SA-14400-1"); // 件号物料号
        invoiceList.add("10"); // 件号物料号
        invoiceList.add("KG"); // 单位
        invoiceList.add("KG"); // 币制
        invoiceList.add("20"); // 单价
        invoiceList.add("100"); // 总价

        return invoiceList;
    }


    public static void getCiTableList(Document document, int colspan, float[] columnWidths, List<String> list, String type,
                                      float widthPercentage, Font headFont, Font childFont) throws DocumentException {
        PdfPTable table = new PdfPTable(colspan);// 设置列数
        table.setSpacingBefore(20);
        table.setWidthPercentage(widthPercentage);// 表格宽度为100%
        if (columnWidths != null) {//自定义列宽
            table.setWidths(columnWidths);
        }
        int number = 0;
        //设置打印行数
        for (int i = 0; i < list.size() / colspan; i++) {//打印条数 = 数据个数除以列数
            //每行每列生成一个单元格
            for (int j = 0; j < colspan; j++) { //打印列数
                PdfPCell cell = new PdfPCell(); //创建单元格
                cell.setMinimumHeight(30F);//表格高度
                cell.setUseAscender(true);
                cell.setHorizontalAlignment(Element.ALIGN_CENTER); //水平居中
                cell.setVerticalAlignment(Element.ALIGN_MIDDLE); //垂直居中
                if (i == 0) {//第一行标题栏
                    cell.setPhrase(new Paragraph(list.get(number), headFont));
                } else {
                    cell.setPhrase(new Paragraph(list.get(number), childFont));
                }
                table.addCell(cell);
                number++;
            }
        }
        // 处理最后一行
        if ("CI".equalsIgnoreCase(type)) {
            BigDecimal totalQty = new BigDecimal("0");
            BigDecimal totalAmount = new BigDecimal("0");
            /*for (ApplyInvoices a : applyInvoices) {
                totalQty = totalQty.add(isNotEmpty(a.getQty()) ? a.getQty() : new BigDecimal("0"));
                totalAmount = totalAmount.add(isNotEmpty(a.getValue()) ? a.getValue() : new BigDecimal("0"));
            }*/
            PdfPCell cell = new PdfPCell(); //创建单元格
            cell.setMinimumHeight(30F);//表格高度
            cell.setColspan(2);
            cell.setUseAscender(true); //开启单元格内文字位置设计
            cell.setHorizontalAlignment(Element.ALIGN_CENTER); //设置单元格的水平居中
            cell.setVerticalAlignment(Element.ALIGN_MIDDLE); //设置单元格的垂直居中
            cell.setPhrase(new Paragraph("TOTAL", headFont));
            table.addCell(cell);
            PdfPCell cell1 = new PdfPCell(); //创建单元格
            cell1.setMinimumHeight(30F);//表格高度
            cell1.setUseAscender(true); //开启单元格内文字位置设计
            cell1.setHorizontalAlignment(Element.ALIGN_CENTER); //设置单元格的水平居中
            cell1.setVerticalAlignment(Element.ALIGN_MIDDLE); //设置单元格的垂直居中
            cell1.setPhrase(new Paragraph(totalQty.toString(), headFont));
            table.addCell(cell1);
            PdfPCell cell2 = new PdfPCell(); //创建单元格
            cell2.setMinimumHeight(30F);//表格高度
            cell2.setUseAscender(true); //开启单元格内文字位置设计
            cell2.setHorizontalAlignment(Element.ALIGN_CENTER); //设置单元格的水平居中
            cell2.setVerticalAlignment(Element.ALIGN_MIDDLE); //设置单元格的垂直居中
            cell2.setPhrase(new Paragraph("", headFont));
            table.addCell(cell2);
            PdfPCell cell3 = new PdfPCell(); //创建单元格
            cell3.setMinimumHeight(30F);//表格高度
            cell3.setUseAscender(true); //开启单元格内文字位置设计
            cell3.setHorizontalAlignment(Element.ALIGN_CENTER); //设置单元格的水平居中
            cell3.setVerticalAlignment(Element.ALIGN_MIDDLE); //设置单元格的垂直居中
            cell3.setPhrase(new Paragraph("", headFont));
            table.addCell(cell3);
            PdfPCell cell4 = new PdfPCell(); //创建单元格
            cell4.setMinimumHeight(30F);//表格高度
            cell4.setUseAscender(true); //开启单元格内文字位置设计
            cell4.setHorizontalAlignment(Element.ALIGN_CENTER); //设置单元格的水平居中
            cell4.setVerticalAlignment(Element.ALIGN_MIDDLE); //设置单元格的垂直居中
            cell4.setPhrase(new Paragraph("", headFont));
            table.addCell(cell4);
            PdfPCell cell5 = new PdfPCell(); //创建单元格
            cell5.setMinimumHeight(30F);//表格高度
            cell5.setUseAscender(true); //开启单元格内文字位置设计
            cell5.setHorizontalAlignment(Element.ALIGN_CENTER); //设置单元格的水平居中
            cell5.setVerticalAlignment(Element.ALIGN_MIDDLE); //设置单元格的垂直居中
            cell5.setPhrase(new Paragraph(totalAmount.toString(), headFont));
            table.addCell(cell5);
        }
        document.add(table);
    }


}
相关推荐
小刘|3 分钟前
《Java 实现希尔排序:原理剖析与代码详解》
java·算法·排序算法
逊嘘22 分钟前
【Java语言】抽象类与接口
java·开发语言·jvm
morris13129 分钟前
【SpringBoot】Xss的常见攻击方式与防御手段
java·spring boot·xss·csp
我要洋人死34 分钟前
导航栏及下拉菜单的实现
前端·css·css3
龙哥说跨境1 小时前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
科技探秘人1 小时前
Chrome与火狐哪个浏览器的隐私追踪功能更好
前端·chrome
科技探秘人1 小时前
Chrome与傲游浏览器性能与功能的深度对比
前端·chrome
JerryXZR1 小时前
前端开发中ES6的技术细节二
前端·javascript·es6
七星静香1 小时前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
Jacob程序员1 小时前
java导出word文件(手绘)
java·开发语言·word