色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:3日期:2022-08-17 14:16:47

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

1.第一步 導(dǎo)包

<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:pdfsimhei.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.注意事項(xiàng):

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

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

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

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

最后找到原因是因?yàn)榘l(fā)票明細(xì)行中的行合并導(dǎo)致效率低下,比如一個(gè)合同下有1000條明細(xì)數(shù)據(jù),那么合同名稱這一列就需要合同1000行,這個(gè)合并會(huì)導(dǎo)致打印效率低下(cell.setColspan(colspan);)方法;

優(yōu)化思路:

因?yàn)槊總€(gè)發(fā)票只有一個(gè)合同我們可以把整個(gè)明細(xì)行看成一個(gè)整體.(思路如下圖)

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

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

相關(guān)的方法:

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

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

標(biāo)簽: Java
主站蜘蛛池模板: 久久一本精品 | 亚洲视频在线观看 | 日韩精品一区二区三区中文在线 | 日韩一区二区三区在线 | 97精品在线视频 | 一级做a爰性色毛片 | 欧美在线一区二区三区不卡 | 亚洲美女黄视频 | 性久久久久久久久 | 9久9久女女热精品视频免费观看 | 91在线产啪| 中国大陆一级毛片 | 国产高清美女一级毛片久久 | 福利片成人午夜在线 | 三级黄色网 | 亚洲精品综合一区二区三区在线 | 成年人在线视频免费观看 | 欧美黑大粗硬毛片视频 | 97在线观看成人免费视频 | 国产高清一级毛片在线不卡 | 国产成人精品视频免费 | 国产成 人 综合 亚洲绿色 | 在线观看国产情趣免费视频 | 久草久热| 国产在线观看午夜不卡 | 一级国产a级a毛片无卡 | 国产一级爱c片免费播放 | 亚州一二区| 亚洲欧美专区精品久久 | 韩国毛片在线 | 久久精品久久精品久久精品 | 久久99国产精品久久99无号码 | 亚洲欧美日韩久久精品第一区 | 精品国产欧美一区二区最新 | 男女男在线精品网站免费观看 | 久久91精品国产91久久小草 | 久久精品国产半推半就 | 久草网址 | 国产美女视频网站 | 日韩精品一区二区三区在线观看l | 国产精品.com|