使用 OpenOffice 和 iText 生成 PDF

红薯 发布于 2011/06/09 22:35
阅读 2K+
收藏 11

领取 1000元人民币SageMaker大礼包!>>>

此文译自这里

之前我接到一个使用模板来动态创建 PDF 文档的任务,最终选择了 iText 和 OpenOffice Draw 来生成模板化的 PDF。

下面是介绍如何使用 OpenOffice Draw 创建 PDF 表单

Save PDF to folder where you have your program or just change path for input source in program

然后使用以下代码通过 iText 来填充 PDF 中的变量

package com.linkwithweb.reports;

import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;

/**
 * @author Ashwin Kumar
 *
 */
public class ITextStamperSample {

	/**
	 * @param args
	 * @throws IOException
	 * @throws DocumentException
	 */
	public static void main(String[] args) throws IOException,
			DocumentException {
		// createSamplePDF();
		generateAshwinFriends();
	}

	/**
	 *
	 */
	private static void generateAshwinFriends() throws IOException,
			FileNotFoundException, DocumentException {
		PdfReader pdfTemplate = new PdfReader("mytemplate.pdf");
		FileOutputStream fileOutputStream = new FileOutputStream("test.pdf");
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		PdfStamper stamper = new PdfStamper(pdfTemplate, fileOutputStream);
		stamper.setFormFlattening(true);

		stamper.getAcroFields().setField("name", "Ashwin Kumar");
		stamper.getAcroFields().setField("id", "1\n2\n3\n");
		stamper.getAcroFields().setField("friendname",
				"kumar\nsirisha\nsuresh\n");
		stamper.getAcroFields().setField("relation", "self\nwife\nfriend\n");

		stamper.close();
		pdfTemplate.close();

	}

}

接下来是 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.linkwithweb.reports</groupId>
  <artifactId>ReportTemplateTutorial</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>ReportTemplateTutorial</name>
  <description>ReportTemplateTutorial</description>
  <dependencies>
  	<dependency>
  		<groupId>com.lowagie</groupId>
  		<artifactId>itext</artifactId>
  		<version>2.1.7</version>
  	</dependency>
  </dependencies>
</project>

最终生成 test.pdf 如下


加载中
0
旗舰
旗舰
中文支持怎么样
穿衣服比较麻烦
穿衣服比较麻烦
中文没问题,itext需要下载个什么包来着,不知道新版的怎么样了。
0
寒羁人
寒羁人
呵呵,俺用的也是这个办法,不过用的是adobe acrobat做表单
0
旗舰
旗舰
以前用过jasperreport + ireport 设计并导出pdf,功能是很强大,但是难于使用
返回顶部
顶部