前几天偶然在网上看到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");
}
}
分享到:
相关推荐
### iText入门基础教程 #### 一、iText简介 ##### 1) What is iText®? iText 是一个强大的 Java 类库,专门用于生成 PDF 文件。与传统的使用 Adobe Acrobat 或 Adobe InDesign 这样的图形设计工具手动或半自动...
本教程将带你入门IText,通过一系列实例深入理解其主要功能。 首先,"iText2.06.chm"是IText 2.0.6版本的官方帮助文档,包含了详细的技术参考和使用指南。你可以从中了解到IText的基本结构、类库和方法,以及如何...
这篇博客文章“Java操作PDF之iText超入门”会引导初学者进入iText的世界。 首先,要使用iText,你需要在项目中引入它的依赖。如果是Maven项目,可以在pom.xml文件中添加如下依赖: ```xml <groupId>...
在Java开发中,生成PDF文档是一项常见的需求,特别是在报表、合同和电子书籍等场景下。iText是一个强大的库,专门...这个简单的代码示例可以帮助开发者快速入门iText库,并了解如何在实际项目中生成包含中文的PDF文档。
在实际开发中,`iText操作Pdf简单整理.txt`可能包含了关于如何使用这些功能的示例代码和说明,通过学习和实践,开发者能够熟练掌握iText,满足各种PDF文档处理需求。 总的来说,iText是一款功能丰富的PDF处理工具,...
最后,`iText中文帮助.doc`是网友提供的中文版iText简介,对于中文使用者来说,这是一份非常实用的快速入门指南。它可能包含了iText的基本概念、常用方法的简要说明,以及一些常见问题的解答。虽然篇幅可能不如官方...
总结来说,iText是一个强大且灵活的PDF处理库,通过掌握其基本使用方法,如创建`Document`、添加`Paragraph`,可以轻松入门并逐步精通PDF文档的生成。在这个"Hello World"的例子中,我们了解了如何使用iText创建一个...
在学习过程中,读者可以通过书中给出的示例代码,结合实际的rar压缩包文件《iText.in.action.pdf》,进行同步练习和代码调试,以加深理解和应用能力。这本书不仅适合初学者入门,也对有一定经验的开发者提供了宝贵的...
这一章节是iText新手的入门指南,解释了PDF的基本概念以及iText如何帮助开发者创建PDF文档。 - **第2章:使用iText的基本构建模块** 讨论了iText中最基础的类和对象,如Document、Paragraph、Font等,并展示了...
2. **iText入门**:文档可能介绍了如何安装和引入iText库到Java项目中,以及如何创建第一个简单的PDF文件。这通常涉及到创建`Document`对象,使用`PdfWriter`类连接到输出流,以及添加`Paragraph`和`Chunk`等元素。 ...
通过以上内容可以看出,《iText In Action Second Edition》是一本全面而深入的技术书籍,不仅适合初学者快速入门iText的使用方法,也适合有经验的开发者深入研究PDF文档的创建和管理。本书通过丰富的示例和清晰的...
通过丰富的实例和详尽的解释,本书不仅适合iText初学者入门,也适用于经验丰富的开发者进一步提升技能。 以上内容基于提供的文件摘要进行了详细的知识点总结与扩展,希望能够帮助读者更好地理解和掌握《iText in ...
2. **iText入门**:接下来,会逐步引导读者安装和配置iText库,并展示如何创建一个简单的PDF文档。这可能包括设置页面大小、添加文字和图像等基本操作。 3. **高级特性**:书中可能会深入探讨iText的高级特性,如...
在实战中,`iText.in.Action`这个部分,作者会通过具体的示例代码来展示如何使用这些功能。书中会涵盖如何创建简单的PDF文档,如何处理表格和图像,以及如何进行更高级的操作,如逻辑结构的建立、表单处理、链接和超...
清单中还提到了一系列与HelloWorld相关的Java文件,这通常是编程入门的第一个示例,用于演示基本的“Hello World”程序。在此上下文中,这些文件可能用来展示如何用iText创建一个简单的PDF文件。文件名中的...