<!--start of article content -->
最近由于项目需要,开始使用iText写PDF文件,从网上搜索到一些信息,但都是零碎的一些,现在稍微整理一下,仅限于写pdf文件部分。
首先创建一个pdfWriter的模板
-
/*
-
* Created on 2005-7-1
-
*
-
* TODO To change the template for this generated file go to
-
* Window - Preferences - Java - Code Style - Code Templates
-
*/
-
package javax.print.PDF;
-
import java.io.FileNotFoundException;
-
import java.io.FileOutputStream;
-
import java.io.IOException;
-
import com.lowagie.text.Cell;
-
import com.lowagie.text.Document;
-
import com.lowagie.text.DocumentException;
-
import com.lowagie.text.Paragraph;
-
import com.lowagie.text.Rectangle;
-
import com.lowagie.text.Table;
-
import com.lowagie.text.pdf.PdfWriter;
-
/**
-
* @author jcoder
-
*
-
* TODO To change the template for this generated type comment go to Window -
-
* Preferences - Java - Code Style - Code Templates
-
*/
-
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) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (DocumentException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- public void close() {
- try {
- document.close();
- out.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
由于我需要在pdf中创建表格,要使用到com.lowagie.text.Cell,com.lowagie.text.Paragraph, com.lowagie.text.Table,com.lowagie.text.Cell, com.lowagie.text.Chunk,com.lowagie.text.Font等类,cell为表格中的每个单元格的内容,paragraph为段落内容,cell的构造函数有很多,这里不一一列举了,因为我要用到中文字符,所以特别使用了cell(Element e)这个构造函数,Element为一个接口,实现此接口的类有很多,包含chunk,meta等,表明cell里可以添加很多不同的内容,可以实现自己的定制,chunk的构造函数为Chunk(String content,Font f),在这里我定制了自己的cell,代码如下:
-
/*
-
* Created on 2005-7-1
-
*
-
* TODO To change the template for this generated file go to
-
* Window - Preferences - Java - Code Style - Code Templates
-
*/
-
package javax.print.PDF;
-
import com.lowagie.text.BadElementException;
-
import com.lowagie.text.Cell;
-
import com.lowagie.text.Chunk;
-
import com.lowagie.text.Font;
-
/**
-
* @author jcoder
-
*
-
* TODO To change the template for this generated type comment go to Window -
-
* Preferences - Java - Code Style - Code Templates
-
*/
-
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);
- }
- }
稍许解释一下,rowspan和colspan为Cell的两个属性,写过网页的朋友都知道,表格中的行和列有的时候有必要进行合并,这里就实现了这个功能。
Paragraph类我也进行了封装:
-
/*
-
* Created on 2005-7-5
-
*
-
* TODO To change the template for this generated file go to
-
* Window - Preferences - Java - Code Style - Code Templates
-
*/
-
package javax.print.PDF;
-
import com.lowagie.text.Element;
-
import com.lowagie.text.Font;
-
import com.lowagie.text.Paragraph;
-
/**
-
* @author Administrator
-
*
-
* TODO To change the template for this generated type comment go to Window -
-
* Preferences - Java - Code Style - Code Templates
-
*/
-
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;
- }
从以上两个代码段中可以看到PDFChineseFont.createChineseFont(int fontSize,int fontStyle)函数 这个也进行了封装,为自定义函数:
-
/*
-
* Created on 2005-7-1
-
*
-
* TODO To change the template for this generated file go to
-
* Window - Preferences - Java - Code Style - Code Templates
-
*/
-
package javax.print.PDF;
-
import java.io.IOException;
-
import com.lowagie.text.DocumentException;
-
import com.lowagie.text.Font;
-
import com.lowagie.text.pdf.BaseFont;
-
/**
-
* @author jcoder
-
*
-
* TODO To change the template for this generated type comment go to Window -
-
* Preferences - Java - Code Style - Code Templates
-
*/
-
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);
- } catch (DocumentException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return chineseFont;
- }
- }
如果无此函数定义,生成的pdf文件中的中文字符将不显示。
最后实现自己定制好的pdf文档格式
-
/*
-
* Created on 2005-7-1
-
*
-
* TODO To change the template for this generated file go to
-
* Window - Preferences - Java - Code Style - Code Templates
-
*/
-
package javax.print.PDF;
-
import com.lowagie.text.BadElementException;
-
import com.lowagie.text.DocumentException;
-
import com.lowagie.text.Table;
-
/**
-
* @author jcoder
-
*
-
* TODO To change the template for this generated type comment go to Window -
-
* Preferences - Java - Code Style - Code Templates
-
*/
-
public class MyWriter extends PDFWriter {
- public MyWriter(String path) {
- super(path);
- try {
- header = new PDFParagraph("仪器设备调拨单");
- document.add(header);
- table = new Table(14);
- table.setBorderWidth(0);
- table.addCell(new PDFCell("(单价:500元以上含500元)", 1, 5));
- table.addCell(new PDFCell("2005年7月1号", 1, 9));
- document.add(table);
- table = new Table(14);
- table.setBorderWidth(1);
- 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("0126242245", 1, 2));
- table.addCell(new PDFCell("IBM大型机", 1, 3));
- table.addCell(new PDFCell("5465-445GH", 1, 2));
- table.addCell(new PDFCell("3", 1, 1));
- table.addCell(new PDFCell("299,000", 1, 1));
- table.addCell(new PDFCell("2,230,200", 1, 1));
- table.addCell(new PDFCell("无", 1, 2));
- table.addCell(new PDFCell("软件学院买入", 1, 2));
- table.endHeaders();
- table.addCell(new PDFCell("调出单位意见:", 1, 11));
- table.addCell(new PDFCell("院(系)签章", 1, 3));
- table.endHeaders();
- table.addCell(new PDFCell("申请调入单位意见:", 1, 11));
- table.addCell(new PDFCell("院(系)签章", 1, 3));
- table.endHeaders();
- table.addCell(new PDFCell("设备管理科审批:", 1, 5));
- table.addCell(new PDFCell("实验室与设备管理处审批", 1, 4));
- table.addCell(new PDFCell("校部审批:", 1, 5));
- table.endHeaders();
- document.add(table);
- close();//别忘记关闭
- } catch (BadElementException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (DocumentException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
测试类:
-
/*
-
* Created on 2005-7-1
-
*
-
* TODO To change the template for this generated file go to
-
* Window - Preferences - Java - Code Style - Code Templates
-
*/
-
package javax.print.PDF;
-
/**
-
* @author jcoder
-
*
-
* TODO To change the template for this generated type comment go to Window -
-
* Preferences - Java - Code Style - Code Templates
-
*/
-
public class Test {
- public static void main(String[] args) {
- PDFWriter pdf = new MyWriter("mine.pdf");
- }
- }
|
|
相关推荐
本篇文章将详细介绍如何利用iText库操作PDF,从数据库中导出大量数据。 首先,我们需要理解iText的基本概念和功能。iText提供了丰富的API,可以用于创建新的PDF文档、添加文本、图像、表格、链接等元素,以及对已有...
iText 是一个强大的Java库,专门用于创建和修改PDF文档。...通过以上步骤和注意事项,你就能利用iText有效地生成PDF目录,提升文档的可读性和用户体验。不断探索iText的功能,你会发现更多创建专业PDF文档的技巧。
implementation 'com.itextpdf:itextg:5.5.13' } ``` 接下来,我们来讨论如何生成PDF。在Android中,通常会使用`Document`类作为PDF的容器,`Paragraph`和`Font`类用于构造文本内容。以下是一个简单的例子,展示...
在Java编程环境中,我们可以利用ITEXT和PDFBOX这两个库来实现这个功能。这两个库都是处理PDF的强大工具,各有其特点和优势。 首先,ITEXT是一个用于创建、修改和阅读PDF文档的Java库。它可以用于生成PDF报告、填充...
在这个场景中,我们看到一个关于如何使用Java编程语言实现此功能的资源包:“利用poi+itextpdf进行word转pdf.rar”。这个压缩包包含源码、依赖库以及转换效果的示例,表明它提供了一种无需额外插件的解决方案。下面...
这篇博客"利用iText操作PDF从数据库导出大量数据--汇总(一)"显然讨论了如何利用iText将数据库中的数据高效地导出到PDF文件中,这对于报告生成、数据分析或者报表制作等场景非常有用。 首先,我们需要了解iText的...
在IT行业中,iText是一个广泛使用的Java和.NET库,用于创建、编辑和处理PDF文档。在最新的版本iText 7中,它提供了丰富的功能,包括将PDF文档转换为图像。这个话题涉及到PDF处理和图像转换两个核心领域。下面将详细...
import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfWriter; import java.io.FileOutputStream; import java...
在使用iText时,首先需要引入相应的库文件,如压缩包中的`itextpdf-5.5.1.jar`,这是iText的主要库,包含了处理PDF文档的核心功能。如果需要处理中文字符或者亚洲语言,还需要引入`itext-asian-5.1.0.jar.zip`解压后...
"Itext删除PDF的图层"是一个针对PDF处理的专题,特别是涉及到如何使用Itext库来移除PDF文档中的特定图层。Itext是一个开源Java库,专为处理PDF文档设计,提供了一系列API用于创建、编辑和阅读PDF文件。 **Itext库...
在Java开发中,我们经常需要生成或修改PDF文档,这时可以利用开源库如iTextPDF。iTextPDF是一个强大的PDF库,它允许开发者通过编程方式创建、修改和操作PDF文档。这个库特别适用于根据模板导出PDF,可以高效地实现...
iText 是一个强大的 Java 类库,专为生成和编辑PDF文档而设计。它以其灵活性和易用性在开发社区中广受欢迎。通过iText,开发者可以轻松创建包含文本、图像、表格等各种元素的PDF文件。以下是一些关于如何使用iText...
在这个场景中,我们将讨论如何利用Itext库在不修改源代码的情况下,实现HTML到PDF的转换,并处理换行问题。 首先,我们需要理解Itext不直接支持HTML到PDF的转换,但它可以通过其他方式间接实现。通常,我们会借助一...
iTextPDF,这个名字源自荷兰语“tekst”,意为“文本”,它由iText Software公司开发,是一个开放源代码的PDF库,主要支持Java和.NET平台。iTextPDF提供了一整套API,使得开发者能够轻松创建、修改和处理PDF文档,...
标题中的“iText_pdf.rar_iText pdf_itext PDF类”表明这是一个关于iText的压缩包,包含了与创建PDF相关的源代码和示例。 iText的核心功能包括但不限于以下几点: 1. **文本和图像处理**:你可以使用iText向PDF中...
itext对pdf进行编辑.使用Adobe对pdf创建表单,itext对表单填充,下拉选,单选,文本框.复选框.itext对pdf进行编辑.使用Adobe对pdf创建表单,itext对表单填充,下拉选,单选,文本框.复选框
将word转换成pdf确实有很多种方案!最近正好需要做一个这样的功能,需求是将word模板进行签名后转换为pdf。...这里记录一下最终的方案:利用poi+itextpdf进行word转pdf。此资源按包含源码和maven依赖。
在“iText实现PDF打印之二”这篇博文中,作者可能进一步介绍了如何利用iText来打印PDF文件,这通常涉及到以下几个关键步骤: 1. **初始化PDFDocument对象**:这是创建PDF文档的第一步,我们需要实例化一个...
在实际开发中,这四个jar包通常一起使用,以实现从数据源获取信息,通过iReport设计报表模板,然后利用iText将报表导出为PDF格式。这种组合方式在企业级应用中非常常见,特别是在需要生成大量定制化报告的场景下。 ...