怎么在java项目中生成一个pdf表格-创新互联

怎么在java项目中生成一个pdf表格?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

崆峒网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。成都创新互联公司成立于2013年到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司

1.第一步 导包


 
   com.itextpdf
   itext-asian
   5.2.0
  
  
   com.itextpdf
   itextpdf
   5.4.3
  

2.第二步看代码

 import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List; 
public class PDFXXX { 
 public static void main(String[] args) throws Exception, DocumentException {
  List ponum = new ArrayList();
  add(ponum, 26);
  List line = new ArrayList();
  add(line, 26);
  List part = new ArrayList();
  add(part, 26);
  List description = new ArrayList();
  add(description, 26);
  List origin = new ArrayList();
  add(origin, 26);
 
  //Create Document Instance
  Document document = new Document();
 
  //add Chinese font
  BaseFont bfChinese = BaseFont.createFont("d:\\pdf\\simhei.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
 
  //Font headfont=new Font(bfChinese,10,Font.BOLD);
  Font keyfont = new Font(bfChinese, 8, Font.BOLD);
  Font textfont = new Font(bfChinese, 8, Font.NORMAL);
 
  //Create Writer associated with document
  PdfWriter.getInstance(document, new FileOutputStream(new File("D:\\POReceiveReport.pdf")));
 
  document.open(); 
  //Seperate Page controller
  int recordPerPage = 10;
  int fullPageRequired = ponum.size() / recordPerPage;
  int remainPage = ponum.size() % recordPerPage > 1 ? 1 : 0;
  int totalPage = 1;
 
  for (int j = 0; j < totalPage; j++) {
   document.newPage(); 
   String company = "等待";
   //record header field
   PdfPTable t = new PdfPTable(5);
   float[] widths = {1.5f, 1f, 1f, 1.5f, 1f};
   t.setWidths(widths);
   t.setTotalWidth(100);
   t.getDefaultCell().setBorder(PdfPCell.NO_BORDER);
   PdfPCell c1 = new PdfPCell(new Paragraph("PO#", keyfont));
   t.addCell(c1);
   c1 = new PdfPCell(new Paragraph("Line", keyfont));
   t.addCell(c1);
   c1 = new PdfPCell(new Paragraph("Part#", keyfont));
   t.addCell(c1);
   c1 = new PdfPCell(new Paragraph("Description", keyfont));
   t.addCell(c1);
   c1 = new PdfPCell(new Paragraph("Origin", keyfont));
   t.addCell(c1);
 
   //calculate the real records within a page ,to calculate the last record number of every page
   int maxRecordInPage = j + 1 == totalPage ? (remainPage == 0 ? recordPerPage : (ponum.size() % recordPerPage)) : recordPerPage;
 
   for (int i = j * recordPerPage; i < ((j * recordPerPage) + maxRecordInPage); i++) {
    PdfPCell c2 = new PdfPCell(new Paragraph(ponum.get(i), textfont));
    t.addCell(c2);
    c2 = new PdfPCell(new Paragraph(line.get(i), textfont));
    t.addCell(c2);
    c2 = new PdfPCell(new Paragraph(part.get(i), textfont));
    t.addCell(c2);
    c2 = new PdfPCell(new Paragraph(description.get(i), textfont));
    t.addCell(c2);
    c2 = new PdfPCell(new Paragraph(origin.get(i), textfont));
    t.addCell(c2);
   }
   document.add(t); 
  }
  document.close();
 }
 
 public static String leftPad(String str, int i) {
  int addSpaceNo = i - str.length();
  String space = "";
  for (int k = 0; k < addSpaceNo; k++) {
   space = " " + space;
  }
  ;
  String result = space + str;
  return result;
 }
 
 public static String printBlank(int tmp) {
  String space = "";
  for (int m = 0; m < tmp; m++) {
   space = space + " ";
  }
  return space;
 }
 
 public static void add(List list, int num) {
  for (int i = 0; i < num; i++) {
   list.add("test老葛-" + i);
  }
 } 
}

3.注意事项:

simhei.ttf 这是字体,对中文有效的;然后如果导了com.lowagie包可能在引包的时候会出现问题,所以看我代码上的import导的什么包就行了。

补充:java生成PDF表格的一次优化

在优化一个pdf的发票打印的时候如果发票的发票明细超过1000行的时候就会变得很慢.需要20分钟才能把数据加载出来.之后就开始查询耗时的原因,在打印了每个方法的执行时间之后,发现在打印方法执行的时候sql取数据的时候很快,那么就是itext的转换PDF的时候导致很慢.

怎么在java项目中生成一个pdf表格

最后找到原因是因为发票明细行中的行合并导致效率低下,比如一个合同下有1000条明细数据,那么合同名称这一列就需要合同1000行,这个合并会导致打印效率低下(cell.setColspan(colspan);)方法;

优化思路:

因为每个发票只有一个合同我们可以把整个明细行看成一个整体.(思路如下图)

怎么在java项目中生成一个pdf表格

这样在调一下样式就可以了

相关的方法:

float[] widths = {110, 110, 330};
PdfPTable contractTable = new PdfPTable(widths);//这个表格三列的长度
contractTable.setTotalWidth(width);//这个属性要加上
contractTable.setLockedWidth(true);//这个属性要加上
cellDetail.setPadding(0f);
cellDetail.setBorderWidth(0f);//去除表格的边框

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联网站建设公司,的支持。


网页题目:怎么在java项目中生成一个pdf表格-创新互联
本文链接:http://scyanting.com/article/decdes.html