java操作pdf

新项目里有个pdf的生成文件,折腾了两天,终于可以 用了,现在 记下来,方便后来者。

有些代码重复的地方,大家凑合着看了,项目太急,也不想优化了。

里面大部分地方都做了注释,一看就会明白了。

废话不多说,直接上代码

先添加依赖

<itextpdf.version>5.5.12</itextpdf.version>
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>${itextpdf.version}</version>
</dependency>
 
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import org.springframework.util.ResourceUtils;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

 
public class PdfUtil {
    
    public static final Document document = new Document(PageSize.A4, 36, 72, 58, 100);

    public void createPdf() {
        try {
            PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("b.pdf"));
            document.open();
            document.newPage();
            // 标题
            document.add(new Paragraph("Customer Name and DL Number in header"));
            // 中间段落
            document.add(midelParagraph());
            document.add(getParagraph2("1801W Jefferson"));
            document.add(getParagraph2("Phonenix AZ 85007"));
            document.add(new Paragraph("\n"));
            //第一个table
            document.add(firstTable(null, null, null, null, null, null));
            document.add(new Paragraph("\n"));
            //第二个table
            document.add(secondTable(null, null, null, null, null, null, null));
            document.add(new Paragraph("\n"));
            //第三个table
            document.add(thirdTable(null, null, null, null, null,
                    null, null, null, null, null, null, null, null,
                    null, null, null));
            document.add(new Paragraph("\n"));
            document.newPage();
            document.add(new Paragraph("Customer Name and DL Number in header"));
            document.add(new Paragraph("\n"));
            document.add(fourth(null, null, null, null, null, null));
            document.add(new Paragraph("\n"));
            document.add(new Paragraph("\n"));
            document.add(fifthTitle());
            document.add(fifth());
            document.add(new Paragraph("\n"));
            document.add(new Paragraph("\n"));
            document.add(sixthTitle());
            document.add(sixth());
            document.add(new Paragraph("\n"));
            document.add(new Paragraph("\n"));
            document.add(seventhTitle("Saturday,July 15,2017"));
            document.add(sixth());
            document.add(new Paragraph("\n"));
            document.add(new Paragraph("\n"));
            document.add(seventhTitle("Thursday,Auguest17,2017"));
            List<String> strs = new ArrayList<>();
            strs.add("Event Row");
            strs.add("Time");
            strs.add("Description");
            strs.add("BAC");
            document.add(titleListFour(strs));


            document.close();
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 设置下划线
     *
     * @return
     */
    public static Chunk getChunk(String str) {
        // 创建Chunk对象,设置下划线的厚度为0.1
        Chunk underline = new Chunk(str);
        underline.setUnderline(0.1f, -1f);
        // 创建Chunk对象,设置下划线的厚度为1
        Chunk strike = new Chunk(str);
        strike.setUnderline(1f, 3f);
        return underline;
    }

    /**
     * 设置段落居中
     *
     * @return
     */
    public static Paragraph getParagraph(String str) {
        Paragraph pg = new Paragraph(str, FontFactory.getFont(FontFactory.COURIER, 16, Font.BOLD));
        pg.setAlignment(1);
        return pg;
    }

    /**
     * 设置下划线段落居中
     *
     * @param str
     * @return
     */
    public static Paragraph getParagraph2(String str) {
        Paragraph pg = new Paragraph(getChunk(str));
        pg.setAlignment(1);
        return pg;
    }

    /**
     * 设置下划线段落居中加大字体
     *
     * @param str
     * @return
     */
    public static Paragraph getParagraph3(String str) {
        Paragraph pg = new Paragraph(getChunk(str));
        pg.setFont(FontFactory.getFont(FontFactory.COURIER, 18, Font.BOLD));
        pg.setAlignment(1);
        return pg;
    }


    /**
     * 中间段落
     *
     * @return
     * @throws
     */
    public static Paragraph midelParagraph() {
        Paragraph manufacturer = getParagraph2("Manufacturer");
        manufacturer.setSpacingBefore(25); // 设置行距
        return manufacturer;
    }


    /**
     * 照片
     *
     * @throws
     * @throws
     * @throws DocumentException
     */
    public static Document headPicDocument() {
        try {
            Image jpg = Image.getInstance("/home/acer/upload/1c98260a-1e10-44ba-8d62-cde4b782d8cb.png");
            jpg.setAlignment(Image.ALIGN_CENTER);
            document.add(jpg);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return document;


    }


    //第getChunk一个table
    public static PdfPTable firstTable(String name, String dl, String address, String phoneNumber, String orderingAgency, String pic) {


        // PDFTable类似于html的表格文件,但是只有列的概念,定义列的数量,不能定义行的数量。
        // 创建一个两列的表格
        PdfPTable table = new PdfPTable(2);
        int width11[] = {70, 30};
        try {
            table.setWidths(width11);
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        // 3、创建左边数据表格PdfPTable iTable,划分为N列
        PdfPTable leftTable = new PdfPTable(1);// 创建左边表格
        // 4、往左边表格中写入数据,加入iTable中
        leftTable.setWidthPercentage(10f);
        Paragraph customer_Information = new Paragraph();
        customer_Information.add(getChunk("Customer Information:"));
        PdfPCell leftCell = new PdfPCell(customer_Information);
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Name:" + name));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("DL#:" + dl));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Address:" + address));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Phone Number:" + phoneNumber));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Ordering Agency:" + orderingAgency));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        // 将表格加入到第一列中
        PdfPCell cell = new PdfPCell(leftTable);
        table.getDefaultCell().setBorder(0);  //去除边框
        cell.setBorder(0);
        table.addCell(cell);
        int count = pic.indexOf(".");
        // 5、创建图片对象,加入headerTable中,此处写入图片路径
        try {
            Image image = null;
            if (-1 != count) {
                image = Image.getInstance(pic);
            } else {
                String url = ResourceUtils.getURL("classpath:").getPath();
                image = Image.getInstance(url + "/headPic/headPic.jpg");
            }
            table.addCell(image);
        } catch (BadElementException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 将主要的表格headerTable加入document文档对象中
        return table;
    }


    //第二个table
    public static PdfPTable secondTable(String name, String mpi, String address,
                                        String phoneNumber, String technician_Information, String name2, String id) {
        // PDFTable类似于html的表格文件,但是只有列的概念,定义列的数量,不能定义行的数量。
        // 创建一个两列的表格
        PdfPTable table2 = new PdfPTable(2);
        int width11[] = {50, 50};
        try {
            table2.setWidths(width11);
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        // 3、创建左边数据表格PdfPTable iTable,划分为N列
        PdfPTable leftTable = new PdfPTable(1);// 创建左边表格
        // 4、往左边表格中写入数据,加入iTable中
        leftTable.setWidthPercentage(10f);
        Paragraph ServiceCenter = new Paragraph();
        ServiceCenter.add(getChunk("ServiceCenter:"));
        PdfPCell leftCell = new PdfPCell(ServiceCenter);
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Name:" + name));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("MPI :" + mpi));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Address: " + address));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Phone Number: " + phoneNumber));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        // 将表格加入到第一列中
        PdfPCell cell = new PdfPCell(leftTable);
        table2.getDefaultCell().setBorder(0);  //去除边框
        cell.setBorder(0);
        table2.addCell(cell);
        PdfPTable rightTable = new PdfPTable(1);// 创建左边表格
        rightTable.setWidthPercentage(10f);
        Paragraph technicianInformation = new Paragraph();
        technicianInformation.add(getChunk("Technician Information:" + technician_Information));
        PdfPCell rightCell = new PdfPCell(technicianInformation);
        rightCell.setBorder(0);
        rightTable.addCell(rightCell);
        rightCell = new PdfPCell(new Paragraph("(For Callbration Checks/Installs/Removals only)"));
        rightCell.setBorder(0);
        rightTable.addCell(rightCell);
        rightCell = new PdfPCell(new Paragraph("Name:" + name2));
        rightCell.setBorder(0);
        rightTable.addCell(rightCell);
        rightCell = new PdfPCell(new Paragraph("ID#:" + name2));
        rightCell.setBorder(0);
        rightTable.addCell(rightCell);
        PdfPCell cell2 = new PdfPCell(rightTable);
        table2.getDefaultCell().setBorder(0);  //去除边框
        cell2.setBorder(0);
        table2.addCell(rightTable);
        // 将主要的表格headerTable加入document文档对象中
        return table2;
    }


    /**
     * 第三个table
     *
     * @return
     */
    public static Element thirdTable(String device_Model, String device_Firmware_Version, String Device_software_Version,
                                     String install_Date, String date_of_Service, String removal_Date, String report_Period,
                                     String next_Service_Date, String as_Found, String reference_Check, String reference_Check2, String handset_or_Relay_In,
                                     String handset_or_relay_Out, String year_Make_Model, String plate, String vin) {
        PdfPTable table3 = new PdfPTable(2);
        int width11[] = {50, 50};
        // 3、创建左边数据表格PdfPTable iTable,划分为N列
        PdfPTable leftTable = new PdfPTable(1);// 创建左边表格
        // 4、往左边表格中写入数据,加入iTable中
        leftTable.setWidthPercentage(10f);
        Paragraph ServiceCenter = new Paragraph();
        ServiceCenter.add(getChunk("Device Information:"));
        PdfPCell leftCell = new PdfPCell(ServiceCenter);
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Device/Model:" + device_Model));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Device Firmware Version :" + device_Firmware_Version));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Device software Version: " + Device_software_Version));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Install Date: " + install_Date));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Date of Service : " + date_of_Service));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Removal Date: " + removal_Date));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Report Period: " + report_Period));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Next Service Date: " + next_Service_Date));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("As Found: " + as_Found));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Reference Check: " + reference_Check));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("reference Check: " + reference_Check2));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Handset or Relay# In: " + handset_or_Relay_In));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Handset or Relay# Out: " + handset_or_relay_Out));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        // 将表格加入到第一列中
        PdfPCell cell = new PdfPCell(leftTable);
        table3.getDefaultCell().setBorder(0);  //去除边框
        cell.setBorder(0);
        table3.addCell(cell);

        PdfPTable rightTable = new PdfPTable(1);// 创建左边表格
        rightTable.setWidthPercentage(10f);
        Paragraph technicianInformation = new Paragraph();
        technicianInformation.add(getChunk("Vehicle Information:"));
        PdfPCell rightCell = new PdfPCell(technicianInformation);
        rightCell.setBorder(0);
        rightTable.addCell(rightCell);
        rightCell = new PdfPCell(new Paragraph("Year/Make/Model :" + year_Make_Model));
        rightCell.setBorder(0);
        rightTable.addCell(rightCell);
        rightCell = new PdfPCell(new Paragraph("Plate:" + plate));
        rightCell.setBorder(0);
        rightTable.addCell(rightCell);
        rightCell = new PdfPCell(new Paragraph("Vin:" + vin));
        rightCell.setBorder(0);
        rightTable.addCell(rightCell);
        PdfPCell cell2 = new PdfPCell(rightTable);
        table3.getDefaultCell().setBorder(0);  //去除边框
        rightCell.setBorder(0);
        table3.addCell(rightTable);
        // 将主要的表格headerTable加入document文档对象中
        return table3;
    }


    //第四个table
    public static Element fourth(String reportable_Violations, String bypass_Code, String temportary_Lock_Out,
                                 String recall_Lock_Out, String failed_Rolling_Retest, String aborts) {

        // PDFTable类似于html的表格文件,但是只有列的概念,定义列的数量,不能定义行的数量。
        // 创建一个两列的表格
        PdfPTable table4 = new PdfPTable(1);
        // 3、创建左边数据表格PdfPTable iTable,划分为N列
        PdfPTable leftTable = new PdfPTable(1);// 创建左边表格
        // 4、往左边表格中写入数据,加入iTable中
        leftTable.setWidthPercentage(10f);
        Paragraph customer_Information = new Paragraph();
        customer_Information.add(getChunk("Summary of Events:"));
        PdfPCell leftCell = new PdfPCell(customer_Information);
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Reportable Violations: " + reportable_Violations));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Bypass_Code:" + bypass_Code));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Temportary Lock out:" + temportary_Lock_Out));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Recall Lock Out:" + recall_Lock_Out));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Failed Rolling Retest:" + failed_Rolling_Retest));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Aborts:" + aborts));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        // 将表格加入到第一列中
        PdfPCell cell = new PdfPCell(leftTable);
        cell.setBorder(0); //去除边框
        table4.addCell(cell);
        return table4;
    }

    /**
     * 第五个表title
     *
     * @return
     */
    public static Element fifthTitle() {
        PdfPTable table5 = new PdfPTable(1);
        PdfPTable leftTable = new PdfPTable(1);// 创建左边表格
        leftTable.setWidthPercentage(10f);
        Paragraph customer_Information = new Paragraph();
        customer_Information.add(getChunk("Summary of Violations:"));
        PdfPCell leftCell = new PdfPCell(customer_Information);
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        PdfPCell cell = new PdfPCell(leftTable);
        cell.setBorder(0);
        table5.getDefaultCell().setBorder(0);  //去除边框
        table5.addCell(cell);
        return table5;
    }

    /**
     * 第五个表内容
     *
     * @return
     */

    public static Element fifth() {
        PdfPTable table5 = new PdfPTable(6);
        int width3[] = {30, 20, 20, 20, 30, 20};
        try {
            table5.setWidths(width3);
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        PdfPCell cell1 = new PdfPCell(new Paragraph("Event Row"));
        PdfPCell cell2 = new PdfPCell(new Paragraph("Evemt ID"));
        PdfPCell cell3 = new PdfPCell(new Paragraph("Date"));
        PdfPCell cell4 = new PdfPCell(new Paragraph("Time"));
        PdfPCell cell5 = new PdfPCell(new Paragraph("Description"));
        PdfPCell cell6 = new PdfPCell(new Paragraph("BAC"));
        cell1.setBorder(0);
        cell2.setBorder(0);
        cell3.setBorder(0);
        cell4.setBorder(0);
        cell5.setBorder(0);
        cell6.setBorder(0);
        table5.addCell(cell1);
        table5.addCell(cell2);
        table5.addCell(cell3);
        table5.addCell(cell4);
        table5.addCell(cell5);
        table5.addCell(cell6);

        for (int i = 0; i < 120; i++) {
            cell1 = new PdfPCell(new Paragraph("data"));
            cell1.setBorder(0);
            table5.addCell(cell1);
        }
        return table5;
    }


    /**
     * 第六个表title
     *
     * @return
     */
    public static Element sixthTitle() {
        PdfPTable table6 = new PdfPTable(1);
        PdfPTable leftTable = new PdfPTable(1);// 创建左边表格
        leftTable.setWidthPercentage(10f);
        Paragraph customer_Information = new Paragraph();
        customer_Information.add(getChunk("Detailed Events: "));
        PdfPCell leftCell = new PdfPCell(customer_Information);
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        leftCell = new PdfPCell(new Paragraph("Thursday,June 29,2017"));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        PdfPCell cell = new PdfPCell(leftTable);
        cell.setBorder(0);
        table6.getDefaultCell().setBorder(0);  //去除边框
        table6.addCell(cell);
        return table6;
    }

    /**
     * 第六个表
     *
     * @return
     */

    public static Element sixth() {
        PdfPTable table6 = new PdfPTable(6);
        int width3[] = {30, 20, 30, 20, 20, 40};
        try {
            table6.setWidths(width3);
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        PdfPCell cell1 = new PdfPCell(new Paragraph("Event Row"));
        PdfPCell cell2 = new PdfPCell(new Paragraph("Time"));
        PdfPCell cell3 = new PdfPCell(new Paragraph("Description"));
        PdfPCell cell4 = new PdfPCell(new Paragraph("BAC"));
        PdfPCell cell5 = new PdfPCell(new Paragraph("Photo"));
        PdfPCell cell6 = new PdfPCell(new Paragraph("GPS Coordinates"));
        cell1.setBorder(0);
        cell2.setBorder(0);
        cell3.setBorder(0);
        cell4.setBorder(0);
        cell5.setBorder(0);
        cell6.setBorder(0);
        table6.addCell(cell1);
        table6.addCell(cell2);
        table6.addCell(cell3);
        table6.addCell(cell4);
        table6.addCell(cell5);
        table6.addCell(cell6);

        for (int i = 0; i < 120; i++) {
            cell1 = new PdfPCell(new Paragraph("data"));
            cell1.setBorder(0);
            table6.addCell(cell1);
        }
        return table6;
    }

    /**
     * 第七个表
     *
     * @return
     */
    public static Element seventhTitle(String str) {
        PdfPTable table7 = new PdfPTable(1);
        PdfPTable leftTable = new PdfPTable(1);// 创建左边表格
        PdfPCell leftCell = new PdfPCell(new Paragraph(str));
        leftCell.setBorder(0);
        leftTable.addCell(leftCell);
        table7.getDefaultCell().setBorder(0);  //去除边框
        table7.addCell(leftTable);
        return table7;

    }


    public static Element titleListFour(List<String> strs) {
        PdfPTable table6 = new PdfPTable(4);
        try {
            int width3[] = {30, 20, 30, 20};
            PdfPCell cell = null;
            try {
                table6.setWidths(width3);
            } catch (DocumentException e) {
                e.printStackTrace();
            }
            for (String str : strs) {
                cell = new PdfPCell(new Paragraph(str));
                cell.setBorder(0);
                table6.addCell(cell);
            }
            for (int i = 0; i < 40; i++) {
                cell = new PdfPCell(new Paragraph("data"));
                cell.setBorder(0);
                Image jpg = Image.getInstance("/home/acer/upload/1c98260a-1e10-44ba-8d62-cde4b782d8cb.png");
                jpg.setAlignment(Image.ALIGN_CENTER);
                table6.addCell(jpg);
            }
        } catch (IOException i) {
            i.printStackTrace();
        } catch (BadElementException b) {
            b.printStackTrace();
        }

        return table6;
    }

}

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值