`
hhr_michael
  • 浏览: 74295 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类
最新评论

pdf成生方法精品

阅读更多

最近由于项目需要,开始使用iText写PDF文件,从网上搜索到一些信息,但都是零碎的一些,现在稍微整理一下,仅限于写pdf文件部分。

首先创建一个pdfWriter的模板
1. /*
2. * Created on 2005-7-1
3. *
4. * TODO To change the template for this generated file go to
5. * Window - Preferences - Java - Code Style - Code Templates
6. */
7. package javax.print.PDF;
8.
9. import java.io.FileNotFoundException;
10. import java.io.FileOutputStream;
11. import java.io.IOException;
12.
13. import com.lowagie.text.Cell;
14. import com.lowagie.text.Document;
15. import com.lowagie.text.DocumentException;
16. import com.lowagie.text.Paragraph;
17. import com.lowagie.text.Rectangle;
18. import com.lowagie.text.Table;
19. import com.lowagie.text.pdf.PdfWriter;
20.
21. /**
22. * @author jcoder
23. * 
24. * TODO To change the template for this generated type comment go to Window -
25. * Preferences - Java - Code Style - Code Templates
26. */
27. abstract public class PDFWriter {
28.     protected Document document = null;
29.     protected FileOutputStream out = null;
30.     protected Rectangle pageSize = null;
31.     protected String filePath = null;
32.     protected Cell cell = null;
33.     protected Paragraph header = null;
34.     protected Paragraph prg = null;
35.     protected Table table = null;
36.
37.     public PDFWriter(String filePath) {
38.         try {
39.             this.filePath = filePath;
40.             document = new Document();
41.             out = new FileOutputStream(filePath);
42.             PdfWriter.getInstance(document, out);
43.             document.open();
44.         } catch (FileNotFoundException e) {
45.             // TODO Auto-generated catch block
46.             e.printStackTrace();
47.         } catch (DocumentException e) {
48.             // TODO Auto-generated catch block
49.             e.printStackTrace();
50.         }
51.
52.     }
53.
54.     public void close() {
55.         try {
56.             document.close();
57.             out.close();
58.         } catch (IOException e) {
59.             // TODO Auto-generated catch block
60.             e.printStackTrace();
61.         }
62.     }
63.
64. }

由于我需要在pdf中创建表格,要使用到com.lowagie.text.Cell,com.lowagie.text.Paragraph, com.lowagie.text.Table,com.lowagie.text.Cell,
com.lowagie.text.Chunk,com.lowagie.text.Font等类,cell为表格中的每个单元格的内容,paragraph为段落内容,cell的构造函数有很多,这里不一一列举了,因为我要用到中文字符,所以特别使用了cell(Element e)这个构造函数,Element为一个接口,实现此接口的类有很多,包含chunk,meta等,表明cell里可以添加很多不同的内容,可以实现自己的定制,chunk的构造函数为Chunk(String content,Font f),在这里我定制了自己的cell,代码如下:
1. /*
2. * Created on 2005-7-1
3. *
4. * TODO To change the template for this generated file go to
5. * Window - Preferences - Java - Code Style - Code Templates
6. */
7. package javax.print.PDF;
8.
9. import com.lowagie.text.BadElementException;
10. import com.lowagie.text.Cell;
11. import com.lowagie.text.Chunk;
12. import com.lowagie.text.Font;
13.
14. /**
15. * @author jcoder
16. * 
17. * TODO To change the template for this generated type comment go to Window -
18. * Preferences - Java - Code Style - Code Templates
19. */
20. public class PDFCell extends Cell {
21.
22.     public PDFCell(String content, int rowspan, int colspan)
23.             throws BadElementException {
24.         super(new Chunk(content, PDFChineseFont
25.                 .createChineseFont(10, Font.NORMAL)));
26.         setRowspan(rowspan);
27.         setColspan(colspan);
28.         setHeader(false);
29.     }
30. }

稍许解释一下,rowspan和colspan为Cell的两个属性,写过网页的朋友都知道,表格中的行和列有的时候有必要进行合并,这里就实现了这个功能。

Paragraph类我也进行了封装:
1. /*
2. * Created on 2005-7-5
3. *
4. * TODO To change the template for this generated file go to
5. * Window - Preferences - Java - Code Style - Code Templates
6. */
7. package javax.print.PDF;
8.
9. import com.lowagie.text.Element;
10. import com.lowagie.text.Font;
11. import com.lowagie.text.Paragraph;
12.
13. /**
14. * @author Administrator
15. * 
16. * TODO To change the template for this generated type comment go to Window -
17. * Preferences - Java - Code Style - Code Templates
18. */
19. public class PDFParagragh extends Paragraph {
20.
21.     public PDFParagragh(String content, int alignment, int fontSize) {
22.         super(content, PDFChineseFont.createChineseFont(fontSize, Font.NORMAL));
23.         setAlignment(alignment);
24.     }
25.
26.     public static final int CENTER = Element.ALIGN_CENTER;
27.     public static final int LEFT = Element.ALIGN_LEFT;
28.     public static final int RIGHT = Element.ALIGN_RIGHT;
29.     public static final int TOP = Element.ALIGN_TOP;
30.     public static final int MIDDLE = Element.ALIGN_MIDDLE;
31.     public static final int BOTTOM = Element.ALIGN_BOTTOM;
32.
33. }


从以上两个代码段中可以看到PDFChineseFont.createChineseFont(int fontSize,int fontStyle)函数 这个也进行了封装,为自定义函数:
1. /*
2. * Created on 2005-7-1
3. *
4. * TODO To change the template for this generated file go to
5. * Window - Preferences - Java - Code Style - Code Templates
6. */
7. package javax.print.PDF;
8.
9. import java.io.IOException;
10.
11. import com.lowagie.text.DocumentException;
12. import com.lowagie.text.Font;
13. import com.lowagie.text.pdf.BaseFont;
14.
15. /**
16. * @author jcoder
17. * 
18. * TODO To change the template for this generated type comment go to Window -
19. * Preferences - Java - Code Style - Code Templates
20. */
21. public class PDFChineseFont {
22.     private static Font chineseFont;
23.
24.     public final static Font createChineseFont(int size, int style) {
25.         try {
26.             chineseFont = new Font(BaseFont.createFont("STSong-Light",
27.                     "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), size, style);
28.         } catch (DocumentException e) {
29.             // TODO Auto-generated catch block
30.             e.printStackTrace();
31.         } catch (IOException e) {
32.             // TODO Auto-generated catch block
33.             e.printStackTrace();
34.         }
35.         return chineseFont;
36.     }
37. }
如果无此函数定义,生成的pdf文件中的中文字符将不显示。

最后实现自己定制好的pdf文档格式
1. /*
2. * Created on 2005-7-1
3. *
4. * TODO To change the template for this generated file go to
5. * Window - Preferences - Java - Code Style - Code Templates
6. */
7. package javax.print.PDF;
8.
9. import com.lowagie.text.BadElementException;
10. import com.lowagie.text.DocumentException;
11. import com.lowagie.text.Table;
12.
13. /**
14. * @author jcoder
15. * 
16. * TODO To change the template for this generated type comment go to Window -
17. * Preferences - Java - Code Style - Code Templates
18. */
19. public class MyWriter extends PDFWriter {
20.     public MyWriter(String path) {
21.         super(path);
22.         try {
23.             header = new PDFParagraph("仪器设备调拨单");
24.             document.add(header);
25.             table = new Table(14);
26. table.setBorderWidth(0);
27.             table.addCell(new PDFCell("(单价:500元以上含500元)", 1, 5));
28.             table.addCell(new PDFCell("2005年7月1号", 1, 9));
29.             document.add(table);
30.             table = new Table(14);
31. table.setBorderWidth(1);
32.             table.addCell(new PDFCell("设备编号", 1, 2));
33.             table.addCell(new PDFCell("设备名称", 1, 3));
34.             table.addCell(new PDFCell("型号规格", 1, 2));
35.             table.addCell(new PDFCell("数量", 1, 1));
36.             table.addCell(new PDFCell("单价", 1, 1));
37.             table.addCell(new PDFCell("总价", 1, 1));
38.             table.addCell(new PDFCell("附件", 1, 2));
39.             table.addCell(new PDFCell("备注", 1, 2));
40.             table.endHeaders();//换行
41.             table.addCell(new PDFCell("0126242245", 1, 2));
42.             table.addCell(new PDFCell("IBM大型机", 1, 3));
43.             table.addCell(new PDFCell("5465-445GH", 1, 2));
44.             table.addCell(new PDFCell("3", 1, 1));
45.             table.addCell(new PDFCell("299,000", 1, 1));
46.             table.addCell(new PDFCell("2,230,200", 1, 1));
47.             table.addCell(new PDFCell("无", 1, 2));
48.             table.addCell(new PDFCell("软件学院买入", 1, 2));
49.             table.endHeaders();
50.             table.addCell(new PDFCell("调出单位意见:", 1, 11));
51.             table.addCell(new PDFCell("院(系)签章", 1, 3));
52.             table.endHeaders();
53.             table.addCell(new PDFCell("申请调入单位意见:", 1, 11));
54.             table.addCell(new PDFCell("院(系)签章", 1, 3));
55.             table.endHeaders();
56.             table.addCell(new PDFCell("设备管理科审批:", 1, 5));
57.             table.addCell(new PDFCell("实验室与设备管理处审批", 1, 4));
58.             table.addCell(new PDFCell("校部审批:", 1, 5));
59.             table.endHeaders();
60.             document.add(table);
61.             close();//别忘记关闭
62.         } catch (BadElementException e) {
63.             // TODO Auto-generated catch block
64.             e.printStackTrace();
65.         } catch (DocumentException e) {
66.             // TODO Auto-generated catch block
67.             e.printStackTrace();
68.         }
69.     }
70. }


测试类:
1. /*
2. * Created on 2005-7-1
3. *
4. * TODO To change the template for this generated file go to
5. * Window - Preferences - Java - Code Style - Code Templates
6. */
7. package javax.print.PDF;
8.
9. /**
10. * @author jcoder
11. * 
12. * TODO To change the template for this generated type comment go to Window -
13. * Preferences - Java - Code Style - Code Templates
14. */
15. public class Test {
16.
17.     public static void main(String[] args) {
18.         PDFWriter pdf = new MyWriter("mine.pdf");
19.     }
20. }


写iText需要iText包 下载地址为http://prdownloads.sourceforge.net/itext/itext-1.3.jar
如果要加入中文,请再下载一个包,地址为:http://itext.sourceforge.net/downloads/iTextAsian.jar

写的比较浅,希望对大家会有帮助

http://www.javaresearch.org/article/31218.htm


分享到:
评论

相关推荐

    希望杯五年级精品课学生书.pdf

    本篇PDF文档为“希望杯五年级精品课学生书”,主要围绕五年级学生的数学学习需求,以希望杯数学竞赛为背景,涵盖了计算专题、应用题专题、几何专题、方法和原理专题、综合专题等多个领域的内容,旨在帮助学生提高...

    研究生精品课程建设的探索与实践——“现代CAD技术”课程的改革.pdf

    在研究生精品课程建设中,"现代CAD技术"课程的改革是一项重要的实践探索。CAD技术,即计算机辅助设计(computer-aided design),是利用计算机系统辅助工程师和设计师进行产品设计和绘图的高效技术手段,广泛应用于...

    《自动控制原理》全套精品PDF讲稿

    全套精品PDF讲稿提供了深入浅出的讲解,有助于学习者系统地掌握这一领域的核心知识。 1. **经典控制理论**:这部分内容主要包括根轨迹法、频率响应法和状态空间法。根轨迹法通过分析系统的开环极点和零点分布,研究...

    《PLC基础与应用》精品在线开放课程建设探讨与思考.pdf

    《PLC基础与应用》课程自2005年开设以来,通过院级精品课程立项和结题验收,不断更新教学内容和方法,以满足自动化生产制造业对人才的需求。 2. 实践教学条件的建设与使用:实践是学习PLC不可或缺的部分。PLC实训室...

    2021精品苏教版八年级物理下册全册课件.pdf

    【标题】: "2021精品苏教版八年级物理下册全册课件.pdf" 这本2021年的精品苏教版八年级物理下册全册课件是针对初中二年级学生设计的教学资源,旨在深入浅出地讲解物理学的基本概念和原理。苏教版教材以其严谨性和...

    最新人教版四年级语文下册《快乐读书吧》精品教案-.pdf

    "最新人教版四年级语文下册《快乐读书吧》精品教案-.pdf" 本资源是一个四年级语文下册的精品教案,主要目标是鼓励学生阅读《十万个为什么》,在交流阅读感受的过程中体会阅读的乐趣,引导学生体会《十万个为什么》...

    新Scratch教案精品收集.pdf

    【新Scratch教案精品收集.pdf】是一份针对初学者的Scratch编程教程,旨在通过趣味性的教学活动激发学生对编程的兴趣。课程分为多个环节,逐步引导学生掌握Scratch编程的基本步骤和方法。 教学目标: 1. 通过在...

    精品课程系统设计报告.pdf

    - 教学手段与方法:阐述课程采用的教学方法和技术手段。 - 教学条件:说明开展课程所需的学习资源和设施条件。 - 教学效果:评估课程的实际教学效果,提供学生评价反馈。 - 特色与政策支持:介绍课程特色以及...

    工业机器人应用技术精品课程建设探索.pdf

    综上所述,工业机器人应用技术精品课程的建设是一项系统工程,需要在课程内容、教学方法、校企合作、评价体系和教师发展等方面进行全面规划和实施。通过这样的精品课程,不仅可以提升学生的专业技能,还能培养他们的...

    2020大学毕业生租住蓝皮书-人民网-2020082020精品报告.pdf

    不过,我可以根据标题“2020大学毕业生租住蓝皮书-人民网-***精品报告.pdf”和描述中的“行业咨询”标签,推断出这份报告可能涉及到的知识点,并基于此构建一个符合要求的详细分析。 ### 2020大学毕业生租住蓝皮书...

    基于Oracle ADF的数字测图原理与方法精品课程网站设计与实现.pdf

    在本文中,作者探讨了如何利用Oracle ADF来设计和实现一个基于数字测图原理与方法的精品课程网站。 首先,精品课程网站是教育信息化的重要组成部分,它能够将优质的教学资源通过网络共享,扩大课程的受众范围,提高...

    加减混合精品公开课共6页.pdf.zip

    很抱歉,根据您提供的信息,"加减混合精品公开课共6页.pdf.zip"这个文件标题和描述似乎与IT行业专业知识不直接相关。它们更倾向于教育或数学领域,特别是关于加减法的教学材料。标签和压缩包内的文件名称"赚钱项目...

    2021精品最新湘教版三年级英语下册(湘鲁版)电子课本课件.pdf

    "2021精品最新湘教版三年级英语下册(湘鲁版)电子课本课件.pdf" 基于给定的文件信息,我们可以生成以下相关知识点: 知识点1:英语教学资源 湘教版三年级英语下册电子课本课件.pdf是一个英语教学资源,旨在帮助三...

    2018年大学生心理健康教育全套精品教案.pdf

    《2018年大学生心理健康教育全套精品教案》是一份针对大学生心理健康教育的重要参考资料,旨在帮助大学生理解心理健康的重要性,掌握心理健康的理论知识,并识别和处理常见的心理问题。本教案主要包含三个部分:心理...

    基于神经网络的网络学习评价系统——以广东省精品资源共享课程《数据结构》为例.pdf

    本篇文档以广东省精品资源共享课程《数据结构》为例,介绍了构建基于神经网络的学习评价系统的方法,并通过实验验证了其有效性。 在教育教学论坛文章中,作者提到网络学习评价是一个需要解决的重要问题。网络学习...

    【精品】C语言学生成绩管理系统设计(28页).pdf

    4. 调试与测试:包括调试方法、测试结果分析与讨论、测试过程中遇到的主要问题及采取的解决措施 5. 源程序清单和执行结果:清单中应有足够的注释 系统的主要功能包括: 1. 学生基本信息及成绩录入 2. 基本信息的...

    高职高专精品课程建设研究与实践系列之二 课程开发是高职高专精品课程建设的基础——以高职高专“数据结构”精品课程建设为例.pdf

    根据提供的文件信息,我们可以提炼出以下几个关于高职高专精品课程建设的核心知识点: 1. 高职高专精品课程建设的...通过上述方法和理论的运用,高职高专院校能够更有效地开发出符合市场需求和学生发展的精品课程。

    建筑CAD精品课程建设的几点思考.pdf

    建筑CAD精品课程建设的要点涉及了教育技术、教学方法和课程内容的创新等多个方面。以下是建筑CAD精品课程建设需要重点掌握的知识点: 1. 精品课程建设总体思想与目标:精品课程的建设需要紧随教育改革的步伐,体现...

    《机械CAD_CAM》精品课程建设.pdf

    以上知识点详细说明了《机械CAD/CAM》精品课程的建设过程,从教材编制到教学方法的创新,再到考核方式的改革以及实践教学体系的完善,最终到教学制度的建设和行业合作,形成了一套全面、系统的课程建设方案,旨在...

    精品社会调研报告范文2021大学生追星调查报告.pdf

    本次调查报告的主题是针对大学生追星现象进行的深入分析与研究。追星文化作为一种青年文化现象,已经成为了当今社会的一种普遍现象,尤其在大学校园中,追星行为更为明显。本次调查旨在了解当前大学生的追星状况,...

Global site tag (gtag.js) - Google Analytics