我是靠谱客的博主 舒心冬天,这篇文章主要介绍itext java代码生成PDF文档使用java代码生成打印,现在分享给大家,希望可以做个参考。

使用java代码生成打印

itext5首先生成PDF文件有两种方式,1:利用Adobe Acrobat 8 Professional专业版来制作PDF模板 2:就是用PdfWriter去生成。

最近项目上需要做打印功能,本以为之前写的方式一可以复用,但模板中表格稍微复杂,多个表格循环打印,而且表格分布不均 ,不适用与模板打印。下面是方式二生成打印PDF文档(后续有时间,更一篇使用方式一做打印) 。

一般的图表pdf文档是可以满足的;

文件效果图:

 

代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
/** * * @(#) PdfText.java * @Package com.eport.web * * Copyright © Singlewindow Corporation. All rights reserved. * */ package com.sw.busi.exbweb.util.printPdf; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.text.SimpleDateFormat; import com.itextpdf.text.Chunk; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Element; import com.itextpdf.text.Font; import com.itextpdf.text.PageSize; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; /** * * Description : * Author: linyi * Create Date: 2018年7月24日 下午2:30:57 * */ public class printPdfTest { public static void main(String[] args) throws Exception { //创建文本 Document document = new Document(PageSize.A4, 70, 70, 20, 100);//上下左右页边距 try { int i=(int) (Math.random()*100); //写入文本到文件中 文件生成地址:C盘 PdfWriter.getInstance(document, new FileOutputStream("C:\cancelBillPrintPDF"+i+".pdf")); //打开文本 document.open(); BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); BaseFont baseFontHei = BaseFont.createFont("C:/Windows/Fonts/simhei.ttf",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); //标题 Paragraph paragraph = new Paragraph(40);//边距 //1 2 3 中右左 paragraph.setAlignment(1); //对齐方式 Font font = new Font(baseFontHei);//字体 font.setSize(14);//字体大小 paragraph.setFont(font);//设置段落字体 Chunk chunk = new Chunk("展览品核销清单"); paragraph.add(chunk); document.add(paragraph); Paragraph paragraph1 = new Paragraph(10); //1 2 3 中右左 paragraph1.setAlignment(2); //对齐方式 Font font1 = new Font(baseFontHei);//字体 font1.setSize(10); paragraph1.setFont(font1); Chunk chunk1 = new Chunk("仅对核供用"); paragraph1.add(chunk1); paragraph1.setSpacingBefore(-15); //paragraph1.setSpacingAfter(-50);//往下距离200 document.add(paragraph1); Paragraph paragraph2 = new Paragraph(50); //1 2 3 中右左 paragraph2.setAlignment(3); //对齐方式 Font font2 = new Font(baseFontHei);//字体 font2.setSize(10); paragraph2.setFont(font1); Chunk chunk2 = new Chunk("展览品核销清单预录入号:"+"展览品核销清单编号:"); paragraph2.add(chunk2); paragraph2.setSpacingAfter(5); document.add(paragraph2); //画表头第一行 PdfPTable table = new PdfPTable(6); table.setTotalWidth(500); float[] columnWidth={80,160,80,100,50,30}; table.setTotalWidth(columnWidth); table.setLockedWidth(true);//宽度算正确 //标题与表格中间的距离 Paragraph p = new Paragraph(50); Font f = new Font(baseFont);//字体 f.setSize(18);//字体大小 p.setFont(f);//设置段落字体 Chunk c = new Chunk(" "); p.add(c); document.add(p); //cell=new PdfPCell(); table.addCell(drawPdfPCell("展览会名称",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("展览会编号",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("核销方式",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); document.add(table); //画表头第二行 table = new PdfPTable(6); table.setTotalWidth(500); float[] columnWidth1={80,60,100,180,50,30}; table.setTotalWidth(columnWidth1); table.setLockedWidth(true);//宽度算正确 table.addCell(drawPdfPCell("申报日期",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("申报单位代码/名称",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("进出口日期",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); document.add(table); //画表头第三行 table = new PdfPTable(10); table.setTotalWidth(500); float[] columnWidth2={80,80,50,50,30,50,30,50,50,30}; table.setTotalWidth(columnWidth2); table.setLockedWidth(true);//宽度算正确 table.setLoopCheck(true); table.addCell(drawPdfPCell("运输方式",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("提运单号",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("件数",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("毛重",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("净重",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); document.add(table); //画表头第四行 table = new PdfPTable(4); table.setTotalWidth(500); float[] columnWidth3={80,100,50,270}; table.setTotalWidth(columnWidth3); table.setLockedWidth(true);//宽度算正确 PdfPCell cell2 = new PdfPCell(); cell2.setFixedHeight(60); cell2.setBorderWidthTop(200); cell2.setBorderWidthLeft(100); cell2= drawPdfPCell("随附单据",baseFontHei,5,1,80);//表格第一个标题 table.addCell(drawPdfPCell("随附单据",baseFontHei,5,1,80)); table.addCell(drawPdfPCell("",baseFontHei,5,1,80)); table.addCell(drawPdfPCell("备注",baseFontHei,5,1,80)); table.addCell(drawPdfPCell("",baseFontHei,5,1,80)); document.add(table); //画表体部分 for(int m=0;m<5;m++){ table = new PdfPTable(4); table.setTotalWidth(500); float[] columnWidth4={100,150,100,150}; table.setTotalWidth(columnWidth4); table.setLockedWidth(true);//宽度算正确 table.addCell(drawPdfPCell("展商名称",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("展商国别",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); document.add(table); table = new PdfPTable(11); table.setTotalWidth(500); float[] columnWidth5={30,64,64,64,30,30,30,30,30,64,64}; table.setTotalWidth(columnWidth5); table.setLockedWidth(true);//宽度算正确 table.addCell(drawPdfPCell("序号",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("商品编码",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("商品名称",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("规格型号",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("数量",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("单位",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("单价",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("总价",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("币制",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("原产国",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("证件代码",baseFontHei,10,1,80)); document.add(table); for(int n=0;n<3;n++){ table = new PdfPTable(11); table.setTotalWidth(500); float[] columnWidth6={30,64,64,64,30,30,30,30,30,64,64}; table.setTotalWidth(columnWidth6); table.setLockedWidth(true);//宽度算正确 table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); document.add(table); } } //关闭文本 document.close(); } catch (DocumentException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } } /** * * Method description : 画一行中的一列(格子) * Author: linyi * Create Date: 2018年7月24日 下午2:17:07 * History: 2018年7月24日 下午2:17:07 linyi Created. * @param cellText 格子的文字 * @param baseFont 字体类型 * @param size 字体大小 * @param alignment 对齐方式 * @return * @throws Exception * */ private static PdfPCell drawPdfPCell(String cellText,BaseFont baseFont,float size,int alignment,int minimumHeight ) throws Exception{ //为null会报错 防止报错 if(cellText==null){ cellText=" "; } //表格开始 Paragraph paragraph = new Paragraph(); paragraph.setAlignment(alignment); //对齐方式 Font font = new Font(baseFont);//字体 font.setSize(size);//字体大小 paragraph.setFont(font);//设置段落字体 Chunk chunk = new Chunk(cellText); paragraph.add(chunk); PdfPCell cell = new PdfPCell(); cell.setUseAscender(true); cell.setVerticalAlignment(cell.ALIGN_MIDDLE);//设置cell垂直居中 cell.setMinimumHeight(minimumHeight);//设置单元格最小高度,当前行最小高度 cell.addElement(paragraph); return cell; } }

 

遇到的坑:

1:会报找不到字体的错误,这里的解决方式就是通过使用自己的字体就好,simsun.ttc是Windows下面自带的字体(简体宋体:C:WindowsFonts下面有很多字体可以使用),在应用项目时

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
private static final String FONT = "static/fonts/SIMSUN.TTC,1";//仿宋体字库位置                   //拿到字体                       String FONT_PATH="";                     String path = this.getClass().getResource("/").getPath();// 得到d:/tomcat/webapps/工程名WEB-INF/classes/路径                     if(path.indexOf("WEB-INF/classes")!=-1){                         path = path.substring(1, path.indexOf("WEB-INF/classes"));// 从路径字符串中取出工程路劲                          FONT_PATH = path + FONT+"";                     }else{                         //单元测试文件                         path = path.substring(1,path.length());// 从路径字符串中取出工程路劲                         FONT_PATH=path+"file/simfang.ttf";                     }

2:在迁移至项目时,本地是没有问题,发布至开发环境,测试环境会报错,还是字体找不到

原因:开发环境处于Linux,加上判断即可:

复制代码
1
2
3
4
5
6
7
                      if (SEnv.WINDOWS) {                           Logger.info(this, "====static字库地址WINDOWS,FONT_PATH=======:"+FONT_PATH);                       } else if (SEnv.LINUX || SEnv.SUN_OS) {                           FONT_PATH = "/" + FONT_PATH;                           //FONTHEI_PATH= "/" + FONTHEI_PATH;                           Logger.info(this, "====static字库地址LINUX,SUN_OS,FONT_PATH=======:"+FONT_PATH);                       }

 

最后

以上就是舒心冬天最近收集整理的关于itext java代码生成PDF文档使用java代码生成打印的全部内容,更多相关itext内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(76)

评论列表共有 0 条评论

立即
投稿
返回
顶部