itex生成PDF文档示例

package dao.other;

import java.awt.Color; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;

import org.pdfbox.pdfparser.PDFParser; import org.pdfbox.pdmodel.PDDocument; import org.pdfbox.util.PDFTextStripper;

import com.lowagie.text.Cell; import com.lowagie.text.Chapter; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.Font; import com.lowagie.text.FontFactory; import com.lowagie.text.List; import com.lowagie.text.ListItem; import com.lowagie.text.PageSize; import com.lowagie.text.Paragraph; import com.lowagie.text.Section; import com.lowagie.text.Table; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.pdf.PdfWriter;

public class PDFTest {

/**   * 很多应用程序要求动态生成 PDF 文档。这类应用程序包括银行生成用于电子邮件投递的客户报表,到读者购买特定图书章节并以 PDF   * 格式接收这些文档。例子罗列下去是很多的。在本文中,将使用 iText Java 库生成 PDF   * 文档,并引导您完成一个示例应用程序,以使您能够更好地理解和使用 iText。 iText 是 Lowagie.com 站点(请参阅   * 参考资料)免费提供的 Java 库。iText 库的功能很强大,支持 HTML、RTF 和 XML 文档的生成,此外还能够生成 PDF   * 文档。可以从多种字体中选择文档中所使用的字体。同时,iText 的结构允许使用相同的代码生成以上任意类型的文档。   * http://www.lowagie.com/iText/ iText API:近距离观察 com.lowagie.text.Document   * 是生成 PDF   * 的主要的类。它是需要使用的第一个类。一旦开始创建文档,将需要一个写入器向文档中写入内容。com.lowagie.text.pdf.PdfWriter   * 就是一个 PDF 写入器。下面列出了通常需要使用的类: com.lowagie.text.Paragraph —— 这个类表示一个缩进的段落。   * com.lowagie.text.Chapter —— 这个类表示 PDF 文档中的章节。使用 Paragraph 作为题目并使用 int   * 作为章节号码来创建它。 com.lowagie.text.Font ——   * 这个类包含了全部的字体规范,例如字体、大小、样式和颜色。各种字体都在这个类中声明为静态常数。 com.lowagie.text.List ——   * 这个类表示一个列表,按顺序包含许多 ListItems。 com.lowagie.text.Table ——   * 这个类表示包含单元格的表,单元格有序地排列在矩阵中。   */

/**   * 写PDF文件,展示了PDF文档、章节、小节、字体、段落、表格、列表的使用 最后展示如何使用写入中文。   *    * @param fileName   */  public void writePDF(String fileName) {   File file = new File(fileName);   FileOutputStream out = null;

try {    // (1)实例化文档对象    // 第一个参数是页面大小。接下来的参数分别是左、右、上和下页边距。    Document document = new Document(PageSize.A4, 50, 50, 50, 50);

// (2)创建写入器    // 第一个参数是对文档对象的引用,第二个参数是输出的文件,将out和document连接起来    out = new FileOutputStream(file);    PdfWriter writer = PdfWriter.getInstance(document, out);    // 打开文档准备写入内容    document.open();

// (3)下面创建章节对象    // 首先创建段落对象,作为章节的标题。FontFactory用于指定段落的字体。    Font font = FontFactory.getFont(FontFactory.HELVETICA, 18,      Font.BOLDITALIC, new Color(0, 0, 255));    Paragraph chapter1_title = new Paragraph("Chapter 1", font);    // 创建了一个章节对象,标题为"Chapter 1"    Chapter chapter1 = new Chapter(chapter1_title, 1);    // 将编号级别设为 0 就不会在页面上显示章节编号    chapter1.setNumberDepth(0);

// (4)创建小节对象    // 创建小节对象的标题    font = FontFactory.getFont(FontFactory.HELVETICA, 16, Font.BOLD,      new Color(255, 0, 0));    Paragraph section1_title1 = new Paragraph("Section 1 of Chapter 1",      font);    // 创建一个小节对象,标题为"This is Section 1 in Chapter 1",属于chapter1。    Section section1 = chapter1.addSection(section1_title1);

// (5)往小节中写文本内容    Paragraph text = new Paragraph(      "This is the first text in section 1 of chapter 1.");    section1.add(text);    text = new Paragraph("Following is a 5×5 table:");    section1.add(text);

// (6)往小节中写表格    // 创建表格对象    Table table = new Table(5, 5);    // 设置表格边框颜色    table.setBorderColor(new Color(220, 255, 100));    // 设置单元格的边距间隔等    table.setPadding(1);    table.setSpacing(1);    table.setBorderWidth(1);    // 单元格对象    Cell cell = null;    // 添加表头信息    for (int colNum = 0; colNum < 5; colNum++) {     cell = new Cell("header-" + colNum);     cell.setHeader(true);     table.addCell(cell);    }    table.endHeaders();    // 添加表的内容    for (int rowNum = 1; rowNum < 5; rowNum++) {     for (int colNum = 0; colNum < 5; colNum++) {      cell = new Cell("value-" + rowNum + "-" + colNum);      table.addCell(cell);     }    }    // 将表格对象添加到小节对象中    section1.add(table);

// (7)添加列表    // 列表包含一定数量的 ListItem。可以对列表进行编号,也可以不编号。    // 将第一个参数设置为 true 表明想创建一个进行编号的列表;    // 第二个参数设置为true表示列表采用字母进行编号,为false则用数字进行编号;    // 第三个参数为列表内容与编号之间的距离。    List list = new List(true, false, 20);    ListItem item = new ListItem("First item of list;");    list.add(item);    item = new ListItem("Second item of list;");    list.add(item);    item = new ListItem("Third item of list.");    list.add(item);    // 将列表对象添加到小节对象中    section1.add(list);

// (8)添加中文    // 允许在PDF中写入中文,将字体文件放在classPath中。    // simfang.ttf是仿宋的字体文件      BaseFont bfChinese = BaseFont.createFont("STSong-Light",          "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);    // 中文大小为20,加粗    font = new Font(bfChinese, 20, Font.BOLD);    text = new Paragraph("PDF中文测试", font);    section1.add(text);

// (9)将章节对象加入到文档中    document.add(chapter1);

// (10)关闭文档    document.close();    System.out.println("PDF文件生成成功,PDF文件名:" + file.getAbsolutePath());   } catch (DocumentException e) {    System.out.println("PDF文件" + file.getAbsolutePath() + "生成失败!" + e);    e.printStackTrace();   } catch (IOException ee) {    System.out.println("PDF文件" + file.getAbsolutePath() + "生成失败!" + ee);    ee.printStackTrace();   } finally {    if (out != null) {     try {      // 关闭输出文件流      out.close();     } catch (IOException e1) {     }    }   }  }

/**   * 读PDF文件,使用了pdfbox开源项目,新的版本已经支持中文了。 上www.pdfbox.org下载读PDF的jar包   *    * @param fileName   */  public void readPDF(String fileName) {   File file = new File(fileName);   FileInputStream in = null;   try {    in = new FileInputStream(fileName);    // 新建一个PDF解析器对象    PDFParser parser = new PDFParser(in);    // 对PDF文件进行解析    parser.parse();    // 获取解析后得到的PDF文档对象    PDDocument pdfdocument = parser.getPDDocument();    // 新建一个PDF文本剥离器    PDFTextStripper stripper = new PDFTextStripper();    // 从PDF文档对象中剥离文本    String result = stripper.getText(pdfdocument);    System.out.println("PDF文件" + file.getAbsolutePath() + "的文本内容如下:");    System.out.println(result);

} catch (Exception e) {    System.out.println("读取PDF文件" + file.getAbsolutePath() + "生失败!" + e);    e.printStackTrace();   } finally {    if (in != null) {     try {      in.close();     } catch (IOException e1) {     }    }   }  }

public static void main(String[] args) {   PDFTest pdf = new PDFTest();   String fileName = "E:/source/java/youz/dist/data/tempPDF.pdf";   pdf.writePDF(fileName);   //pdf.readPDF(fileName);  }

}

PDF2的更多相关文章

  1. HTML5与CSS3权威指南.pdf2

    第三章 HTML5的结构 article元素更强调独立性,section元素强调分段,div元素强调css的套用,aretcle元素和section元素在核实的情况下可以调换 nav元素用作页面导航的 ...

  2. HTML5 Canvas核心技术—图形、动画与游戏开发.pdf2

    事件处理: HTML5应用程序是以事件来驱动的,可以在canvas中增加一个事件监听器,当事件发生时,浏览器就会调用这个监听器 //方法一canvas.onmousedown=function(e){ ...

  3. jQuery技术内幕预览版.pdf2

    第二章 构造jQuery对象 jQuery对象是一个类数组对象,含有连续的整型属性.length属性和大量的jQuery方法,$()是jQuery()的缩写 构造函数jQuery() 如果调用构造函数 ...

  4. C# 合并及拆分PDF文件

    C# 合并及拆分PDF文件 有时我们可能会遇到下图这样一种情况 — 我们需要的资料或教程被分成了几部分存放在多个PDF文件中,不管是阅读还是保存都不是很方便,这时我们肯定想要把这些PDF文件合并为一个 ...

  5. C#生成PDF总结

    (一)C#生成PDF总结 (1)iTextSharp控件对iTextSharp研究还可以表格.文字.各种GDI对象,图片,水印,文字旋转(2)aspose的控件(3)PDF Library这个类库(只 ...

  6. Magento PDF发票,支持中文,以及修改的办法

    Magento PDF发票,支持中文,以及修改的办法.   如果让magento的PDF发票支持中文.Magento生成PDF发票.使用的是zend framework的zend_pdf类. 下面是一 ...

  7. iOS基础问答面试

    <简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d <简书社区 — Timhbw> ...

  8. 初识 Asp.Net内置对象之Application对象

    Application对象 Applocation对象用于共享应用程序级信息,即多个用户可以共享一个Applocation对象. 用户在请求Asp.Net文件时,将启动应用程序并且创建Applicat ...

  9. C#教程之打印和打印预览

    最近研究一了一下关于PDF打印和打印预览的功能,在此小小的总结记录一下学习过程. 实现打印和打印预览的方法,一般要实现如下的菜单项:打印.打印预览.页面设置. PrintDocument类 Print ...

随机推荐

  1. 深度学习主机环境配置: Ubuntu16.04 + GeForce GTX 1070 + CUDA8.0 + cuDNN5.1 + TensorFlow

    深度学习主机环境配置: Ubuntu16.04 + GeForce GTX 1070 + CUDA8.0 + cuDNN5.1 + TensorFlow 最近在公司做深度学习相关的学习和实验,原来一直 ...

  2. 打造 html5 文件上传组件,实现进度显示及拖拽上传,支持秒传+分片上传+断点续传,兼容IE6+及其它标准浏览器

    老早就注册了博客园帐号,昨天才发现,连博客都没开,Github也是一样,深觉惭愧,赶紧潜个水压压惊`(*∩_∩*)′ 言归正传.大概许多人都会用到文件上传的功能,上传的库貌似也不少,比如(jQuery ...

  3. Javascript.Reactjs-5-prop-validation-and-proptypes

    Props & PropTypes 1. Props "Props are the mechanism React uses to let components communicat ...

  4. mysql日志 解析

    mysql有4种不同的日志,分别是二进制日志,查询日志,慢查询日志和错误日志,这些日记记录着数据库工作的方方面面,可以帮助我们了解数据库的不同方面的踪迹,下面先介绍二进制日志的作用和使用方法,并利用二 ...

  5. C#高级--通过类来理解学习委托

    namespace classanddelegate { class Program { static void Main(string[] args) { //这是类的实例化 Test test = ...

  6. C# 在winform或者wpf中显示控制台窗口

    这儿需要使用两个系统函数: BOOL WINAPI FreeConsole(void); //// 关闭控制台窗口,参考:http://msdn.microsoft.com/en-us/library ...

  7. git使用--git命令项目提交问题总结

    提交遇到Error  "remote ref does not exist"解决办法:git fetch -p MY_REMOTE    eg.    git fetch -p o ...

  8. mysql用户的创建

    MySQL是采用c/s方式的,需要客户端登录服务器,那么可以登录账号叫做用户,这些用户的信息都存储在mysql数据库(mysql安装时默认有的一个数据库)中的user表中, 比如用户的名称,用户的密码 ...

  9. 数据存储--沙盒sandBox

    默认情况下,每个沙盒必含有3个文件夹:Documents, Library 和 tmp 一.沙盒(sandbox)出于安全的目的,应用程序只能将自己的数据和偏好设置写入到几个特定的位置上.当应用程序被 ...

  10. gc roots 垃圾回收

    gc roots包括以下几个: 虚拟机栈(栈桢中的本地变量表)中的引用对象 方法区中的类静态属性引用的对象 方法区中的常量引用的对象 本地方法栈中JNI(即native方法)的引用的对象 java,c ...