最近项目中有个需求需要将数据库中的数据导出到PDF文件中,所以在网上查找了相关的开源框架——pdfbox&itext
于是乎写了一个简单的工具类,如有需要的可以直接拿去用,切勿跟俺客气~。
本工具类所用到的相关jar包及版本有:
1.pdfbox-1.5.0.jar
2.fontbox-1.5.0.jar
3.jempbox-1.5.0.jar
4.iText-5.0.6.jar;
5.SIMHEI.TTF()——黑体常规字体,可以去C:\\windows\\Fonts目录下去找,并放在工程的src目录下面~
写小入门的帖子我喜欢开门见山,直接上代码,其中的注释已经非常清楚,main方法中有使用实例,代码结构讲太多了显得自己很啰嗦,或者觉得自己不太善于讲。没有直接上代码来得爽快!有喜欢的拿回去自己好好研究一下,运行之前记得先将之上列出的jar补齐了就OK~。
package com.test.common.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chapter;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.List;
import com.itextpdf.text.ListItem;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.Section;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
/**
* 功能 PDF读写类
* @CreateTime 2011-4-14 下午02:44:11
*/
public class PDFUtil {
// public static final String CHARACTOR_FONT_CH_FILE = "SIMFANG.TTF"; //仿宋常规
public static final String CHARACTOR_FONT_CH_FILE = "SIMHEI.TTF"; //黑体常规
public static final Rectangle PAGE_SIZE = PageSize.A4;
public static final float MARGIN_LEFT = 50;
public static final float MARGIN_RIGHT = 50;
public static final float MARGIN_TOP = 50;
public static final float MARGIN_BOTTOM = 50;
public static final float SPACING = 20;
private Document document = null;
/**
* 功能:创建导出数据的目标文档
* @param fileName 存储文件的临时路径
* @return
*/
public void createDocument(String fileName) {
File file = new File(fileName);
FileOutputStream out = null;
document = new Document(PAGE_SIZE, MARGIN_LEFT, MARGIN_RIGHT, MARGIN_TOP, MARGIN_BOTTOM);
try {
out = new FileOutputStream(file);
// PdfWriter writer =
PdfWriter.getInstance(document, out);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
// 打开文档准备写入内容
document.open();
}
/**
* 将章节写入到指定的PDF文档中
* @param chapter
* @return
*/
public void writeChapterToDoc(Chapter chapter) {
try {
if(document != null) {
if(!document.isOpen()) document.open();
document.add(chapter);
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
/**
* 功能 创建PDF文档中的章节
* @param title 章节标题
* @param chapterNum 章节序列号
* @param alignment 0表示align=left,1表示align=center
* @param numberDepth 章节是否带序号 设值=1 表示带序号 1.章节一;1.1小节一...,设值=0表示不带序号
* @param font 字体格式
* @return Chapter章节
*/
public static Chapter createChapter(String title, int chapterNum, int alignment, int numberDepth, Font font) {
Paragraph chapterTitle = new Paragraph(title, font);
chapterTitle.setAlignment(alignment);
Chapter chapter = new Chapter(chapterTitle, chapterNum);
chapter.setNumberDepth(numberDepth);
return chapter;
}
/**
* 功能:创建某指定章节下的小节
* @param chapter 指定章节
* @param title 小节标题
* @param font 字体格式
* @param numberDepth 小节是否带序号 设值=1 表示带序号 1.章节一;1.1小节一...,设值=0表示不带序号
* @return section在指定章节后追加小节
*/
public static Section createSection(Chapter chapter, String title, Font font, int numberDepth) {
Section section = null;
if(chapter != null) {
Paragraph sectionTitle = new Paragraph(title, font);
sectionTitle.setSpacingBefore(SPACING);
section = chapter.addSection(sectionTitle);
section.setNumberDepth(numberDepth);
}
return section;
}
/**
* 功能:向PDF文档中添加的内容
* @param text 内容
* @param font 内容对应的字体
* @return phrase 指定字体格式的内容
*/
public static Phrase createPhrase(String text,Font font) {
Phrase phrase = new Paragraph(text,font);
return phrase;
}
/**
* 功能:创建列表
* @param numbered 设置为 true 表明想创建一个进行编号的列表
* @param lettered 设置为true表示列表采用字母进行编号,为false则用数字进行编号
* @param symbolIndent
* @return list
*/
public static List createList(boolean numbered, boolean lettered, float symbolIndent) {
List list = new List(numbered, lettered, symbolIndent);
return list;
}
/**
* 功能:创建列表中的项
* @param content 列表项中的内容
* @param font 字体格式
* @return listItem
*/
public static ListItem createListItem(String content, Font font) {
ListItem listItem = new ListItem(content, font);
return listItem;
}
/**
* 功能:创造字体格式
* @param fontname
* @param size 字体大小
* @param style 字体风格
* @param color 字体颜色
* @return Font
*/
public static Font createFont(String fontname, float size, int style, BaseColor color) {
Font font = FontFactory.getFont(fontname, size, style, color);
return font;
}
/**
* 功能: 返回支持中文的字体---仿宋
* @param size 字体大小
* @param style 字体风格
* @param color 字体 颜色
* @return 字体格式
*/
public static Font createCHineseFont(float size, int style, BaseColor color) {
BaseFont bfChinese = null;
try {
bfChinese = BaseFont.createFont(CHARACTOR_FONT_CH_FILE,BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return new Font(bfChinese, size, style, color);
}
/**
* 最后关闭PDF文档
*/
public void closeDocument() {
if(document != null) {
document.close();
}
}
/**
* 读PDF文件,使用了pdfbox开源项目
* @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文件的文本内容如下:");
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) {
}
}
}
}
/**
* 测试pdf文件的创建
* @param args
*/
public static void main(String[] args) {
String fileName = "E:\\tmp\\pdf\\test11.pdf"; //这里先手动把绝对路径的文件夹给补上。
PDFUtil pdfUtil = new PDFUtil();
Font chapterFont = PDFUtil.createCHineseFont(20, Font.BOLD, new BaseColor(0, 0, 255));//文章标题字体
Font sectionFont = PDFUtil.createCHineseFont(16, Font.BOLD, new BaseColor(0, 0, 255));//文章小节字体
Font textFont = PDFUtil.createCHineseFont(10, Font.NORMAL, new BaseColor(0, 0, 0));//小节内容字体
pdfUtil.createDocument(fileName);
Chapter chapter = PDFUtil.createChapter("糖尿病病例1", 1, 1, 0, chapterFont);
Section section1 = PDFUtil.createSection(chapter, "病例联系人信息", sectionFont,0);
Phrase text1 = PDFUtil.createPhrase("如您手中有同类现成病例,在填写完以上基础信息后,传病例附件",textFont);
section1.add(text1);
Section section2 = PDFUtil.createSection(chapter, "病例个人体会", sectionFont,0);
Phrase text2 = PDFUtil.createPhrase("1.下载病例生成PDF文档",textFont);
// text2.setFirstLineIndent(20); //第一行空格距离
section2.add(text1);
section2.add(text2);
List list = PDFUtil.createList(true, false, 20);
String tmp = "还有什么能够文档。文档是 PDF 文档的所有元素的容器。 ";
ListItem listItem1 = PDFUtil.createListItem(tmp,textFont);
ListItem listItem2 = PDFUtil.createListItem("列表2",textFont);
list.add(listItem1);
list.add(listItem2);
section2.add(list);
pdfUtil.writeChapterToDoc(chapter);
pdfUtil.closeDocument();
}
}
有了这个小工具类,您就不用担心怎样将数据库中的数据导出到PDF文件中了,另外这只是文本文件的导出,还有有关图片导出,标签建立、与lucene整合搜索等功能没有包含,有可能你要问我为什么不把这几个功能都写完整了呢?很简单,因为我也不会呀~。待我研究研究哈。
注:分享劳动成果的感觉是非常美好滴!
分享到:
相关推荐
NULL 博文链接:https://snowdymy.iteye.com/blog/1114344
利用itext读取PDF后使用pdfbox将PDF转为图片。压缩包内附有相应JAR文件
itext5.5.12源码、pdfbox2.012源码。 itext官方文档(英文)。 itext签名验签官方文档(英文)。 itext解析PDF结构工具。 pdfbox解析PDF结构工具。
java 读取PDF文件中的内容 java 读取PDF文件中的内容
原生java代码,导入到eclipse就能运行,这是研究了两天研究出来的,比网上的用什么doc转pdf,还有pdfbox之类的有效多了 而且没有乱码。绝对有效。所需的模板在另一地址下载:...
用于将pdf文件生成其缩略图以供显示时使用,很实用的类似于百度文库中的文档里列表的图片一样
PDFBox是一个开源的可以操作PDF文档的Java PDF类库。它可以创建一个新PDF文档,操作现有PDF文档并提取文档中的内容。 它具有以下特性: 1.将一个PDF文档转换输出为一个文本文件。 2.可以从文本文件创建一个PDF文档。 ...
C#中使用PDFBox读取PDF的内容,转换成TXT文件保存。
利用pdfbox读取pdf内容 ,对于大部分未加过密或不是用图片生成的pdf能读出来. 引入pdfbox-app-2.0.12, IKVM.Runtime, IKVM.OpenJDK.Util, IKVM.OpenJKD.Text IKVM.OpenJKD.SwingAWT IKVM.OpenJKD.Core 后运行按照...
itext pdfbox 详细的例子,其中包含 读取 解析pdf wrod 生成画格子 以及解决中文乱码问题 很多例子打包成一起 详细的注释
Apache PDFBox是一个开源Java库,支持PDF文档的开发和转换。 我们可以使用PDFBox开发可以创建,转换和操作PDF文档的Java程序。PDFBox的主要功能: Extract Text – 使用PDFBox,您可以从PDF文件中提取Unicode文本。 ...
本资源是基于PDFBox组件,根据PDF模板文件生成PDF文档的Java代码,代码中包含宋体字体文件,替换PDF模板文件内容的源代码文件。
itext+pdfbox的jar,java实现pdf转图片;itext+pdfbox的jar,java实现pdf转图片
icepdf pdfbox 技术将pdf转换为图片 多页PDF也可支持。内附有jar包 保证运行可用
用keytool生成数字证书,利用itext生成签名pdf,完整工程代码。
利用pdfbox实现图片转pdf 和pdf转图片功能,网络上有大部分源码,我只是个搬运工,如果你没积分请别懒,自行百度谷歌bing。图片可按比例转换成pdf。方法很简单只有几句代码没有写注释。
1. itextpdf(CreatePdf) 不太推荐需要在代码内部编写PDF格式,如果要使用,建议写个基类,将同一版本 或者同一类型的公共方法写入,差异化的抽象,一个模板一个子类,子类使用@Component命名,使用反射的方式获取...
java实现pdf文件电子签名,可以直接在eclipse上运行,采用itextpdf,pdfbox 两种方式实现!!!
pdfbox-3.0.0-RC1 PDFBox是Java实现的PDF文档协作类库,提供PDF文档的创建、处理以及文档内容提取功能,也包含了一些命令行实用工具。
原生Java打印pdf时,不支持一些打印机,使用2.08版pdfbox打印PDF,包含代码,jar。