最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java生成pdf表格,調(diào)用itext創(chuàng)建的實例

 更新時間:2021年01月30日 11:14:30   作者:不是不夠格  
這篇文章主要介紹了java生成pdf表格,調(diào)用itext創(chuàng)建的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

昨天花了很長的時間去找pdf生成表格的代碼,發(fā)現(xiàn)網(wǎng)上大家寫的代碼太多了,而且又沒有注釋,讓我一個小白是完全看不懂,這就很過分了,所以秉著我們代碼界共享的原則,我要把我昨天的收獲分享給大家,好了廢話不多說,貼代碼了。

1.第一步 導包

 <dependency>
   <groupId>com.itextpdf</groupId>
   <artifactId>itext-asian</artifactId>
   <version>5.2.0</version>
  </dependency>
  <dependency>
   <groupId>com.itextpdf</groupId>
   <artifactId>itextpdf</artifactId>
   <version>5.4.3</version>
  </dependency>

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<String> ponum = new ArrayList<String>();
  add(ponum, 26);
  List<String> line = new ArrayList<String>();
  add(line, 26);
  List<String> part = new ArrayList<String>();
  add(part, 26);
  List<String> description = new ArrayList<String>();
  add(description, 26);
  List<String> origin = new ArrayList<String>();
  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<String> list, int num) {
  for (int i = 0; i < num; i++) {
   list.add("test老葛-" + i);
  }
 } 
}

3.注意事項:

simhei.ttf 這是字體,對中文有效的;然后如果導了com.lowagie包可能在引包的時候會出現(xiàn)問題,所以看我代碼上的import導的什么包就行了。

補充:java生成PDF表格的一次優(yōu)化

在優(yōu)化一個pdf的發(fā)票打印的時候如果發(fā)票的發(fā)票明細超過1000行的時候就會變得很慢.需要20分鐘才能把數(shù)據(jù)加載出來.之后就開始查詢耗時的原因,在打印了每個方法的執(zhí)行時間之后,發(fā)現(xiàn)在打印方法執(zhí)行的時候sql取數(shù)據(jù)的時候很快,那么就是itext的轉(zhuǎn)換PDF的時候?qū)е潞苈?

最后找到原因是因為發(fā)票明細行中的行合并導致效率低下,比如一個合同下有1000條明細數(shù)據(jù),那么合同名稱這一列就需要合同1000行,這個合并會導致打印效率低下(cell.setColspan(colspan);)方法;

優(yōu)化思路:

因為每個發(fā)票只有一個合同我們可以把整個明細行看成一個整體.(思路如下圖)

這樣在調(diào)一下樣式就可以了

相關(guān)的方法:

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

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Java接口和抽象類原理詳解

    Java接口和抽象類原理詳解

    這篇文章主要介紹了Java接口和抽象類原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Mybatis源碼解析之事務(wù)管理

    Mybatis源碼解析之事務(wù)管理

    大家好,本篇文章主要講的是Mybatis源碼解析之事務(wù)管理,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • springboot之SpringApplication生命周期和事件機制解讀

    springboot之SpringApplication生命周期和事件機制解讀

    這篇文章主要介紹了springboot之SpringApplication生命周期和事件機制,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • MyBatisPlus 主鍵策略的實現(xiàn)(4種)

    MyBatisPlus 主鍵策略的實現(xiàn)(4種)

    MyBatis Plus 集成了多種主鍵策略,幫助用戶快速生成主鍵,本文主要介紹了MyBatisPlus主鍵策略的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • ShardingSphere jdbc實現(xiàn)分庫分表核心概念詳解

    ShardingSphere jdbc實現(xiàn)分庫分表核心概念詳解

    這篇文章主要為大家介紹了ShardingSphere jdbc實現(xiàn)分庫分表核心概念詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Java實現(xiàn)定時任務(wù)的示例代碼

    Java實現(xiàn)定時任務(wù)的示例代碼

    這篇文章主要為大家詳細介紹了Java實現(xiàn)定時任務(wù)的相關(guān)知識,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-11-11
  • Spring Boot 如何解決富文本上傳圖片跨域問題

    Spring Boot 如何解決富文本上傳圖片跨域問題

    這篇文章主要介紹了Spring Boot 如何解決富文本上傳圖片跨域問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • JAVA 多態(tài) 由淺及深介紹

    JAVA 多態(tài) 由淺及深介紹

    JAVA 多態(tài) 由淺及深介紹,什么是多態(tài)?多態(tài)的詳細解釋,多態(tài)的好處,多態(tài)的實際運用等
    2013-03-03
  • SpringBoot集成xxl-job實現(xiàn)超牛的定時任務(wù)的步驟詳解

    SpringBoot集成xxl-job實現(xiàn)超牛的定時任務(wù)的步驟詳解

    XXL-JOB是一個分布式任務(wù)調(diào)度平臺,其核心設(shè)計目標是開發(fā)迅速、學習簡單、輕量級、易擴展,現(xiàn)已開放源代碼并接入多家公司線上產(chǎn)品線,開箱即用,本文給大家介紹了SpringBoot集成xxl-job實現(xiàn)超牛的定時任務(wù),需要的朋友可以參考下
    2023-10-10
  • SpringCloud?Nacos?+?Ribbon?調(diào)用服務(wù)的實現(xiàn)方式(兩種)

    SpringCloud?Nacos?+?Ribbon?調(diào)用服務(wù)的實現(xiàn)方式(兩種)

    這篇文章主要介紹了SpringCloud?Nacos?+?Ribbon?調(diào)用服務(wù)的兩種方法,分別是通過代碼的方式調(diào)用服務(wù)和通過注解方式調(diào)用服務(wù),每種方式給大家介紹的非常詳細,需要的朋友可以參考下
    2022-03-03

最新評論

汝州市| 南木林县| 高陵县| 余姚市| 赣州市| 高青县| 娄底市| 津市市| 射洪县| 南昌县| 鞍山市| 双桥区| 长泰县| 四川省| 普陀区| 越西县| 垣曲县| 江都市| 眉山市| 浪卡子县| 武义县| 通山县| 神池县| 河北省| 满洲里市| 唐山市| 闻喜县| 佳木斯市| 安陆市| 克什克腾旗| 同心县| 凤台县| 长海县| 青海省| 疏勒县| 伊川县| 望都县| 那曲县| 武安市| 兰溪市| 凤台县|