java 操作pdf_java操作pdf

本文档详细介绍了如何使用Java的iTextPDF库来创建和操作PDF文件,包括添加标题、段落、表格等元素。通过示例代码展示了如何创建不同样式的段落、设置下划线、创建多列表格以及插入图片等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

废话不多说,直接上代码

先添加依赖

5.5.12

com.itextpdf

itextpdf

${itextpdf.version}

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 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 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;

}

}

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值