PDF2
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的更多相关文章
- HTML5与CSS3权威指南.pdf2
第三章 HTML5的结构 article元素更强调独立性,section元素强调分段,div元素强调css的套用,aretcle元素和section元素在核实的情况下可以调换 nav元素用作页面导航的 ...
- HTML5 Canvas核心技术—图形、动画与游戏开发.pdf2
事件处理: HTML5应用程序是以事件来驱动的,可以在canvas中增加一个事件监听器,当事件发生时,浏览器就会调用这个监听器 //方法一canvas.onmousedown=function(e){ ...
- jQuery技术内幕预览版.pdf2
第二章 构造jQuery对象 jQuery对象是一个类数组对象,含有连续的整型属性.length属性和大量的jQuery方法,$()是jQuery()的缩写 构造函数jQuery() 如果调用构造函数 ...
- C# 合并及拆分PDF文件
C# 合并及拆分PDF文件 有时我们可能会遇到下图这样一种情况 — 我们需要的资料或教程被分成了几部分存放在多个PDF文件中,不管是阅读还是保存都不是很方便,这时我们肯定想要把这些PDF文件合并为一个 ...
- C#生成PDF总结
(一)C#生成PDF总结 (1)iTextSharp控件对iTextSharp研究还可以表格.文字.各种GDI对象,图片,水印,文字旋转(2)aspose的控件(3)PDF Library这个类库(只 ...
- Magento PDF发票,支持中文,以及修改的办法
Magento PDF发票,支持中文,以及修改的办法. 如果让magento的PDF发票支持中文.Magento生成PDF发票.使用的是zend framework的zend_pdf类. 下面是一 ...
- iOS基础问答面试
<简书社区 — Timhbw>iOS基础问答面试题连载(一)-附答案:http://www.jianshu.com/p/1ebf7333808d <简书社区 — Timhbw> ...
- 初识 Asp.Net内置对象之Application对象
Application对象 Applocation对象用于共享应用程序级信息,即多个用户可以共享一个Applocation对象. 用户在请求Asp.Net文件时,将启动应用程序并且创建Applicat ...
- C#教程之打印和打印预览
最近研究一了一下关于PDF打印和打印预览的功能,在此小小的总结记录一下学习过程. 实现打印和打印预览的方法,一般要实现如下的菜单项:打印.打印预览.页面设置. PrintDocument类 Print ...
随机推荐
- 网络-->监控-->交换机端口流量监控
一.取交换机端口流量OID 针对交换机接口速率在100M及以下: in方向:1.3.6.1.2.1.2.2.1.10 out方向:1.3.6.1.2.1.2.2.1.16 针对交换机端口速率在百兆以上 ...
- redis 在linux下的安装
背景:在项目互联网项目开发中我们经常需要缓存热点数据,在做热点数据缓存时有2个常用的方案 redis简介redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型 ...
- 【随笔】从gitHub上获取源码
有时候,需要从gitHub上获取源码,下面介绍几个方法: 1.获取链接: 打开gitHub代码库的页面,能在右边看到这个: 点击红圈里的标记,该链接就会复制下来. 然后,如果安装了小乌龟(Tortoi ...
- 实战录 | 一起唠唠那些常见的DDoS攻击
<实战录>导语 云端卫士<实战录>栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益.本期分享人为云端卫士系统架构师高鹏,将带来常见的DDo ...
- UITableViewCell的highlighted 和selected 属性1
将UITableViewCell的selectedBackgroundView设置为按下图片的状态,同时不支持多选的情况下,遇到如下问题: 如果默认第一个cell处于selected状态,然后再点击其 ...
- Hadoop入门之安装配置(hadoop-0.20.2)
Hadoop,简单理解为HDFS(分布式存储)+Mapreduce(分布式处理),专为离线和大规模数据分析而设计. Hadoop可以把很多linux的廉价PC组成分布式结点,然后编程人员也不需要知道分 ...
- 设置secureCRT的鼠标右键为弹出文本操作菜单功能
options菜单下的 global options 页面的 terminal 中的 mouse 子菜单对 paste on right button 的选项取消勾选即可.
- SQL触发器实例讲解
SQL触发器实例1 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Inser ...
- Oracle sys和system用户、sysdba 和sysoper系统权限、sysdba和dba角色的区别
sys和system用户区别 1)最重要的区别,存储的数据的重要性不同 sys所有oracle的数据字典的基表和视图都存放在sys用户中,这些基表和视图对于oracle的运行是至关重要的,由数据库自己 ...
- 收藏的 500多个开源的Git源码
由dkhamsing发起的Open-Source iOS Apps收集了各种开源的iOS App,并进行了详细的分类,比如游戏.社交.健康.键盘.定位.多媒体.新闻.办公.安全以及小工具类等.截至目前 ...