如何运用Java组件itext生成pdf

如何运用Java组件itext生成pdf,第1张

首先从iText的官网下载这个开源的小组件。

iText官方网站

Java版iText组件

Java版工具包

C#版iText组件

C#版工具包

这里笔者使用的是Java版itext-5.2.1。

将itext-5.2.1.zip压缩包解压缩后得到7个文件:itextpdf-5.2.1.jar(核心组件)、itextpdf-5.2.1-javadoc.jar(API文档)、itextpdf-5.2.1-sources.jar(源代码)、itext-xtra-5.2.1.jar、itext-xtra-5.2.1-javadoc.jar、itext-xtra-5.2.1-sources.jar

使用5步即可生成一个简单的PDF文档。

复制代码

1 // 1.创建 Document 对象

2 Document _document = new Document()

3 // 2.创建书写器,通过书写器将文档写入磁盘

4 PdfWriter _pdfWriter = PdfWriter.getInstance(_document, new FileOutputStream("生成文件的路径"))

5 // 3.打开文档

6 _document.open()

7 // 4.向文档中添加内容

8 _document.add(new Paragraph("Hi"))

9 // 5.关闭文档

10 _document.close()

复制代码

OK,搞定,不出问题的话就会在你指定的路径中生成一个PDF文档,内容是纯文本的“Hi”。

可是这样并不能完全满足我们的需求,因为通常我们要生成的PDF文件不一定是纯文本格式的,比如我现在要实现打印销售单的功能,那么最起码需要绘制表格才行,怎么办呢?且跟笔者继续向下研究。

在iText中,有专门的表格类,即PdfPTable类。笔者做了一个简单的表格示例,请先看代码:

复制代码

1 OutTradeList _otl = this.getOtlBiz().findOutTradeListById(this.getOtlid())

2 String _fileName = _otl.getOtlId() + ".pdf"

3

4 // iText 处理中文

5 BaseFont _baseFont = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", true)

6 // 1.创建 Document 对象

7 Document _document = new Document(PageSize.A4)

8

9 HttpServletResponse response = ServletActionContext.getResponse()

10 response.setContentType("application/pdfcharset=ISO-8859-1")

11 response.setHeader("Content-Disposition", "inlinefilename=" + new String(_fileName.getBytes(), "iso8859-1"))

12

13 // 2.创建书写器,通过书写器将文档写入磁盘

14 PdfWriter _pdfWriter = null

15 try {

16 _pdfWriter = PdfWriter.getInstance(_document, response.getOutputStream())

17 } catch (Exception e) {

18 this.setMessage("单据生成失败,请检查服务器目录权限配置是否正确")

19 e.printStackTrace()

20 System.out.println("2.挂了")

21 // return INPUT

22 return null

23 }

24 if(_pdfWriter == null) {

25 this.setMessage("单据生成失败,请检查服务器目录权限配置是否正确")

26 System.out.println("3.挂了")

27 // return INPUT

28 return null

29 }

30

31 // 3.打开文档

32 _document.open()

33

34 // 4.创建需要填入文档的元素

35 PdfPTable _table = new PdfPTable(4)

36 PdfPCell _cell = null

37

38 _table.addCell(new Paragraph("单据号", new Font(_baseFont)))

39 _cell = new PdfPCell(new Paragraph(_otl.getOtlId()))

40 _cell.setColspan(3)

41 _table.addCell(_cell)

42

43 _table.addCell(new Paragraph("客户名称", new Font(_baseFont)))

44 _cell = new PdfPCell(new Paragraph(_otl.getClients().getName(), new Font(_baseFont)))

45 _cell.setColspan(3)

46 _table.addCell(_cell)

47

48 _table.addCell(new Paragraph("销售日期", new Font(_baseFont)))

49 _cell = new PdfPCell(new Paragraph(_otl.getOutDate().toString()))

50 _cell.setColspan(3)

51 _table.addCell(_cell)

52

53 _cell = new PdfPCell()

54 _cell.setColspan(4)

55 PdfPTable _tabGoods = new PdfPTable(7)

56 // 添加标题行

57 _tabGoods.setHeaderRows(1)

58 _tabGoods.addCell(new Paragraph("序号", new Font(_baseFont)))

59 _tabGoods.addCell(new Paragraph("商品名称", new Font(_baseFont)))

60 _tabGoods.addCell(new Paragraph("自定义码", new Font(_baseFont)))

61 _tabGoods.addCell(new Paragraph("规格", new Font(_baseFont)))

62 _tabGoods.addCell(new Paragraph("数量", new Font(_baseFont)))

63 _tabGoods.addCell(new Paragraph("单价", new Font(_baseFont)))

64 _tabGoods.addCell(new Paragraph("小计", new Font(_baseFont)))

65 Object[] _outTrades = _otl.getOutTrades().toArray()

66 // 将商品销售详细信息加入表格

67 for(int i = 0i <_outTrades.length) {

68 if((_outTrades[i] != null) &&(_outTrades[i] instanceof OutTrade)) {

69OutTrade _ot = (OutTrade) _outTrades[i]

70Goods _goods = _ot.getGoods()

71_tabGoods.addCell(String.valueOf((++i)))

72_tabGoods.addCell(new Paragraph(_goods.getName(), new Font(_baseFont)))

73_tabGoods.addCell(_goods.getUserCode())

74_tabGoods.addCell(_goods.getEtalon())

75_tabGoods.addCell(String.valueOf(_ot.getNum()))

76_tabGoods.addCell(String.valueOf(_ot.getPrice()))

77_tabGoods.addCell(String.valueOf((_ot.getNum() * _ot.getPrice())))

78 }

79 }

80 _cell.addElement(_tabGoods)

81 _table.addCell(_cell)

82

83 _table.addCell(new Paragraph("总计", new Font(_baseFont)))

84 _cell = new PdfPCell(new Paragraph(_otl.getAllPrice().toString()))

85 _cell.setColspan(3)

86 _table.addCell(_cell)

87

88 _table.addCell(new Paragraph(" *** 作员", new Font(_baseFont)))

89 _cell = new PdfPCell(new Paragraph(_otl.getProcure()))

90 _cell.setColspan(3)

91 _table.addCell(_cell)

92

93 // 5.向文档中添加内容,将表格加入文档中

94 _document.add(_table)

95

96 // 6.关闭文档

97 _document.close()

98 System.out.println(_fileName)

99 this.setPdfFilePath(_fileName)

100 System.out.println("3.搞定")

101 // return SUCCESS

102 return null

以上代码是写在 Struts2 的 Action 中的,当用户发送了请求之后直接将生成的PDF文件用输出流写入到客户端,浏览器收到服务器的响应之后就会询问用户打开方式。

当然,我们也可以将文件写入磁盘等等。

以WPS 2019版本为例:

关于怎么设置pdf页眉页脚,我们推荐您可考虑使用WPS2019来完成, *** 作步骤如下:

1、打开「PDF文档」;

2、点击「插入-页码」/「插入-页眉页脚」(提示该功能需开通WPS会员使用);

3、可根据需求设置页面或页眉页脚的参数来进行插入。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11338312.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存