`
林维煜
  • 浏览: 11735 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

iText入门示例

    博客分类:
  • Java
阅读更多
   前几天偶然在网上看到iText输出PDF格式这一技术,今天下午心血澎湃就尝试了一下。
中间碰到了一个创建字体的问题:
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); 
console错误提示"Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized"


   google一下,处理方式可以采用windos自带字库:
BaseFont bf = BaseFont.CreateFont("c:\\windows\\fonts\\simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);



   下面是在对网上一例的代码整理:

/**
 * 创建pdfWriter模板
 * 
 * @Field cell表示表格中每个单元格的内容,paragraph为段落内容
 * @date 2009年01月13日
 * @author 林维煜
 */
abstract public class PDFWriter {

	protected Document document = null;
	protected FileOutputStream out = null;
	protected Rectangle pageSize = null;
	protected String filePath = null;

	protected Cell cell = null;
	protected Paragraph header = null;
	protected Paragraph prg = null;
	protected Table table = null;
	
	public PDFWriter(String filePath) {
		try {
			this.filePath = filePath;
			document = new Document();
			out = new FileOutputStream(filePath);//文档输出路径信息
			PdfWriter.getInstance(document, out);
			document.open();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}

	public void close() {
		try {
			document.close();
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


import com.lowagie.text.BadElementException;
import com.lowagie.text.Cell;
import com.lowagie.text.Chunk;
import com.lowagie.text.Font;

/**
 * 定制单元格
 * 
 * @date 2009年01月13日
 * @author 林维煜
 */
public class PDFCell extends Cell {

	public PDFCell(String content, int rowspan, int colspan)
			throws BadElementException {
		super(new Chunk(content, PDFChineseFont.createChineseFont(10,
				Font.NORMAL)));
		setRowspan(rowspan);
		setColspan(colspan);
		setHeader(false);
	}
}


import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;

/**
 * 定制段落
 * 
 * @date 2009年01月13日
 * @author 林维煜
 */
@SuppressWarnings("serial")
public class PDFParagragh extends Paragraph {

	public PDFParagragh(String content, int alignment, int fontSize) {
		super(content, PDFChineseFont.createChineseFont(fontSize, Font.NORMAL));
		setAlignment(alignment);
	}

	public static final int CENTER = Element.ALIGN_CENTER;
	public static final int LEFT = Element.ALIGN_LEFT;
	public static final int RIGHT = Element.ALIGN_RIGHT;
	public static final int TOP = Element.ALIGN_TOP;
	public static final int MIDDLE = Element.ALIGN_MIDDLE;
	public static final int BOTTOM = Element.ALIGN_BOTTOM;
}


import java.io.IOException;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.pdf.BaseFont;

/**
 * 如果无此函数定义,生成的pdf文件中的中文字符将不会显示
 * 
 * @date 2009年01月13日
 * @author 林维煜
 */
public class PDFChineseFont {

	private static Font chineseFont;

	public final static Font createChineseFont(int size, int style) {
		try {
//			chineseFont = new Font(BaseFont.createFont("STSong-Light",
//					"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), size, style);
			
			//使用windos自带字库:
			chineseFont = new Font(BaseFont.createFont("c:\\windows\\fonts\\simsun.ttc,1",
					BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED), size, style);
		} catch (DocumentException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return chineseFont;
	}
}


import com.lowagie.text.BadElementException;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Table;

/**
 * 定制PDF文档格式
 * 
 * @date 2009年01月13日
 * @author 林维煜
 */
public class MyWriter extends PDFWriter {

	public MyWriter(String path) {
		super(path);
		try {
			header = new Paragraph("练习文档");
		//	header = new PDFParagraph("练习文档"); 

			document.add(header);
			table = new Table(14);
			table.setBorderWidth(0);
			table.addCell(new PDFCell("(单价:1毛)", 1, 5));
			table.addCell(new PDFCell("2009年01月13号", 1, 9));
			document.add(table);
			table = new Table(14);
			table.setBorderWidth(0);
			table.addCell(new PDFCell("公司名称", 1, 2));
			table.addCell(new PDFCell("网址", 1, 3));
			table.addCell(new PDFCell("型号规格", 1, 2));
			table.addCell(new PDFCell("数量", 1, 1));
			table.addCell(new PDFCell("单价", 1, 1));
			table.addCell(new PDFCell("总价", 1, 1));
			table.addCell(new PDFCell("附件", 1, 2));
			table.addCell(new PDFCell("备注", 1, 2));
			table.endHeaders();// 换行
			table.addCell(new PDFCell("广拓芯", 1, 2));
			table.addCell(new PDFCell("www.thepartnumber.com", 1, 3));
			table.addCell(new PDFCell("1860", 1, 2));
			table.addCell(new PDFCell("3", 1, 1));
			table.addCell(new PDFCell("0.3", 1, 1));
			table.addCell(new PDFCell("2000", 1, 1));
			table.addCell(new PDFCell("无", 1, 2));
			table.addCell(new PDFCell("无", 1, 2));
			table.endHeaders();		
			document.add(table);
			close();// 别忘记关闭
		} catch (BadElementException e) {
			e.printStackTrace();
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
}


/**
 * 测试类
 * 
 * @date 2009年01月13日
 * @author 林维煜
 */
public class Test {

	public static void main(String[] args) {
		PDFWriter pdf = new MyWriter("gtxin.pdf");
	}
}

分享到:
评论
2 楼 deng1259070 2009-08-26  
如果页面有flash怎么导出?
1 楼 slieer 2009-08-21  
好好,很有价值。

相关推荐

    iText入门基础教程

    ### iText入门基础教程 #### 一、iText简介 ##### 1) What is iText®? iText 是一个强大的 Java 类库,专门用于生成 PDF 文件。与传统的使用 Adobe Acrobat 或 Adobe InDesign 这样的图形设计工具手动或半自动...

    IText入门开发文档

    本教程将带你入门IText,通过一系列实例深入理解其主要功能。 首先,"iText2.06.chm"是IText 2.0.6版本的官方帮助文档,包含了详细的技术参考和使用指南。你可以从中了解到IText的基本结构、类库和方法,以及如何...

    Java操作PDF之iText超入门

    这篇博客文章“Java操作PDF之iText超入门”会引导初学者进入iText的世界。 首先,要使用iText,你需要在项目中引入它的依赖。如果是Maven项目,可以在pom.xml文件中添加如下依赖: ```xml <groupId>...

    java使用itext生成pdf的代码示例

    在Java开发中,生成PDF文档是一项常见的需求,特别是在报表、合同和电子书籍等场景下。iText是一个强大的库,专门...这个简单的代码示例可以帮助开发者快速入门iText库,并了解如何在实际项目中生成包含中文的PDF文档。

    iText操作Pdf简单整理

    在实际开发中,`iText操作Pdf简单整理.txt`可能包含了关于如何使用这些功能的示例代码和说明,通过学习和实践,开发者能够熟练掌握iText,满足各种PDF文档处理需求。 总的来说,iText是一款功能丰富的PDF处理工具,...

    iText API + iText in Action 2nd Edition + 中文帮助

    最后,`iText中文帮助.doc`是网友提供的中文版iText简介,对于中文使用者来说,这是一份非常实用的快速入门指南。它可能包含了iText的基本概念、常用方法的简要说明,以及一些常见问题的解答。虽然篇幅可能不如官方...

    itext-hello word 已实现

    总结来说,iText是一个强大且灵活的PDF处理库,通过掌握其基本使用方法,如创建`Document`、添加`Paragraph`,可以轻松入门并逐步精通PDF文档的生成。在这个"Hello World"的例子中,我们了解了如何使用iText创建一个...

    iText.in .action.pdf

    在学习过程中,读者可以通过书中给出的示例代码,结合实际的rar压缩包文件《iText.in.action.pdf》,进行同步练习和代码调试,以加深理解和应用能力。这本书不仅适合初学者入门,也对有一定经验的开发者提供了宝贵的...

    iText in Action 2nd Edition slide

    这一章节是iText新手的入门指南,解释了PDF的基本概念以及iText如何帮助开发者创建PDF文档。 - **第2章:使用iText的基本构建模块** 讨论了iText中最基础的类和对象,如Document、Paragraph、Font等,并展示了...

    iText中文帮助文档.zip

    2. **iText入门**:文档可能介绍了如何安装和引入iText库到Java项目中,以及如何创建第一个简单的PDF文件。这通常涉及到创建`Document`对象,使用`PdfWriter`类连接到输出流,以及添加`Paragraph`和`Chunk`等元素。 ...

    iText In Action Second Edition

    通过以上内容可以看出,《iText In Action Second Edition》是一本全面而深入的技术书籍,不仅适合初学者快速入门iText的使用方法,也适合有经验的开发者深入研究PDF文档的创建和管理。本书通过丰富的示例和清晰的...

    iText in Action 2nd Edition Oct.2010

    通过丰富的实例和详尽的解释,本书不仅适合iText初学者入门,也适用于经验丰富的开发者进一步提升技能。 以上内容基于提供的文件摘要进行了详细的知识点总结与扩展,希望能够帮助读者更好地理解和掌握《iText in ...

    iText in action

    2. **iText入门**:接下来,会逐步引导读者安装和配置iText库,并展示如何创建一个简单的PDF文档。这可能包括设置页面大小、添加文字和图像等基本操作。 3. **高级特性**:书中可能会深入探讨iText的高级特性,如...

    [iText实战(第2版)].(iText.in.Action).Bruno.Lowagie.文字版

    在实战中,`iText.in.Action`这个部分,作者会通过具体的示例代码来展示如何使用这些功能。书中会涵盖如何创建简单的PDF文档,如何处理表格和图像,以及如何进行更高级的操作,如逻辑结构的建立、表单处理、链接和超...

    iText实战第二版_源代码阅读

    清单中还提到了一系列与HelloWorld相关的Java文件,这通常是编程入门的第一个示例,用于演示基本的“Hello World”程序。在此上下文中,这些文件可能用来展示如何用iText创建一个简单的PDF文件。文件名中的...

Global site tag (gtag.js) - Google Analytics