`
IrenBJ
  • 浏览: 27889 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

pdfbox&iText生成PDF文件格式及读取PDF文件内容的小示例--完美支持中文版

    博客分类:
  • java
阅读更多

    最近项目中有个需求需要将数据库中的数据导出到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整合搜索等功能没有包含,有可能你要问我为什么不把这几个功能都写完整了呢?很简单,因为我也不会呀~。待我研究研究哈。

   注:分享劳动成果的感觉是非常美好滴!

分享到:
评论
1 楼 allenversion 2011-05-05  
例子能够成功运行,注释也写的比较清楚。
我最近也在做有关导出PDF文档的功能,谢谢分享哈。不过还有一些其他的功能,如插入图片、新建表格等功能没有加入,希望LZ有时间可以写写相关的内容。

相关推荐

    利用ITEXT、PDFBOX将PDF转为图片

    在我们的场景中,ITEXT主要用于读取PDF文档的内容。 接下来,PDFBOX是Apache软件基金会的一个开源项目,它提供了一系列API来处理PDF文档。PDFBOX的功能包括创建、编辑、显示PDF文档,以及将PDF转换为其他格式,如...

    Java 解析 PDF, pdfbox读取PDF内容

    在本示例中,我们将专注于如何使用PDFBox读取PDF的内容。 首先,你需要在你的项目中引入PDFBox库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.apache.pdfbox <artifactId>...

    ItextpdfboxPDFword生成和读取各种例子最详细的打包

    在这个压缩包中,你可能会找到一系列示例代码,展示了如何使用这两个库进行各种操作,包括读取PDF、解析PDF、生成PDF、生成Word文件以及解决中文乱码问题。 首先,让我们详细了解一下IText库。IText是一个开源的...

    itext7 pdf转图片

    - PDF文档的结构:PDF由多个对象组成,如页、字体、图像、注释等,这些对象在PDF文件中以XML式的语法存储。 - 转换PDF:除了基本的创建和编辑功能,iText 7还允许开发者将PDF文档转换为其他格式,例如HTML、XML或...

    java+pdf生成.zip

    与iText相比,PDFBox更注重读取和处理已有PDF文件,但同样可以用于生成新的PDF。以下是一个使用PDFBox生成PDF的基本示例: ```java import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox....

    打开PDF文件_labview打开pdf_打开PDF_labview_

    这些库提供了与LabVIEW接口的方法,使得我们可以通过LabVIEW调用相应的函数来打开和读取PDF文件。 2. **LabVIEW接口设计**:使用LabVIEW编写程序时,首先需要创建一个VI(Virtual Instrument),在这个VI中设计前...

    有关pdfbox-1.3.1中Identity-H编码为乱码的解决方法

    PDFBox是Apache软件基金会的一个开源项目,用于处理PDF文档。在使用PDFBox 1.3.1版本时,你可能遇到一个常见的问题:当处理含有非ASCII字符的文本时,Identity-H编码可能会导致显示为乱码。Identity-H是一种Unicode...

    PDFbox IcePdf pdf转图片

    1. 加载PDF文档:首先,你需要创建一个`PDDocument`对象来加载PDF文件。 2. 创建PDF渲染器:使用`PDFRenderer`类创建一个渲染器对象,传入`PDDocument`实例。 3. 将PDF页面转换为图像:调用`PDFRenderer`的`...

    用Java读取pdf中的数据

    以下是一个基本的示例代码,展示如何使用iText的`PdfReader`读取PDF文件: ```java import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.parser.PdfTextExtractor; public class ...

    用Java生成pdf文件组件

    Java生成PDF文件是一种常见的需求,尤其在企业级应用中,用于生成报告、发票、合同等文档。PDF(Portable Document Format)格式因其跨平台、可移植性强的特点,被广泛使用。本篇文章将深入探讨如何利用Java来创建...

    JAVA删除PDF空白页

    对于删除PDF空白页,我们可以通过读取PDF页面的内容,检查其是否为空,然后决定是否删除。iTextPDF中的`PdfReader`和`PdfStamper`类是关键。`PdfReader`用于打开PDF文档,获取所有页面的信息,而`PdfStamper`则可以...

    JAVA读取PDF中的文件内容需要的jar

    以下是一个使用Apache PDFBox读取PDF文件内容的基本示例: ```java import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.text.PDFTextStripper; public class ReadPDF { public static void ...

    JAVA带格式生成pdf文件

    在Java开发中,生成PDF文件是一项常见的需求,特别是在需要将网页内容导出或者报告打印时。本篇文章将详细探讨如何使用Java技术,结合HTML、CSS和图像,来按网页格式生成PDF文件,并介绍相关的库和步骤。 首先,...

    C#生成PDF 读取PDF文本内容 获取PDF内图片

    本项目聚焦于使用C#进行PDF操作,包括生成PDF、读取PDF文本内容以及提取PDF内的图片。 首先,我们要了解如何使用C#生成PDF。在.NET环境中,可以借助第三方库如iTextSharp或PDFsharp来实现。iTextSharp提供了一个...

    java语言实现Text格式转换成pdf文件

    它提供了丰富的API,可以方便地创建、编辑和读取PDF文件。在本示例中,我们将主要依赖PDFBox来完成转换任务。 步骤1:引入PDFBox库 要使用PDFBox,首先需要将其添加到项目依赖中。如果是Maven项目,可以在pom.xml...

    JAVA生成pdf文件

    在Java编程环境中生成PDF文件是一项常见的任务,尤其在企业级应用中,如报表生成、文档输出等场景。PDF(Portable Document Format)是一种跨平台的文件格式,能够保持文档的原始排版和样式,使得文件在不同设备间...

    JavaFx 浏览PDF

    2. 加载PDF文件:使用库提供的API读取PDF文件,获取其内容。 3. 渲染PDF页面:将PDF页面转换为图像或SVG格式,以便于JavaFX可以显示。 4. 显示PDF:在JavaFX的Scene中添加ImageView或类似的组件,设置其图像源为...

    itext生成word

    生成Word文档通常涉及到将PDF文档转换为Microsoft Word支持的格式,如DOC或DOCX。 要开始使用iText生成Word文档,你需要先确保已经添加了iText库到你的项目中。如果是Java项目,可以通过Maven或Gradle来引入依赖。...

    JAVA利用poi完成word转pdf,内容包括两个现成工具类和使用到的所有jar包

    3. 调用Docx4j的`WordprocessingMLPackage.toPDF()`方法,生成一个基于OpenXML的PDF文件。 4. 如果需要进一步优化PDF的格式和样式,可以使用iText或PDFBox进行处理。 在实际项目中,为了方便重复使用,可以封装这些...

    java代码pdf解析成xml.rar

    在Java中,iTextPDF是一个强大的库,用于创建、编辑和读取PDF文件。它提供了API来解析PDF文档,访问其内容,包括文本、图像、表格等,并可以将这些内容转换为其他格式,如XML。 要使用iTextPDF解析PDF并生成XML,你...

Global site tag (gtag.js) - Google Analytics