`
namezhou
  • 浏览: 154567 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java输出PDF文档

 
阅读更多

PDF输出用到iText包,由于PDF文档的特殊性,有可能需要一些本地的字体支持,在web应用中可能需要在服务器端放置一些字体包

常见的输出PDF有两种方式

第一种是需要建立一个固定的模版,把模版经过adobe lifecycle 处理,在需要填充文字的地方添加
一些文本框(只能是固定大小),再把文本框的边框去掉,并把属性改成readonly,注意设置好page的名字和文本框的name,注意就是,一定要保证文字不要太多,否则文本框不足以显示完全,如果中文不能显示,请尝试在lifecycle中设置文本框字体为中文字体。示例代码如下:

File file = new File("d:\\aaa.pdf");//定义一个文件
		OutputStream os = new FileOutputStream(file);//定义一个输出流,如果是jsp的话,可以直接从response中获取输出流
		PdfReader reader = new PdfReader("d:/Untitled3.pdf", null); //读入pdf模板
		PdfStamper ps = new PdfStamper(reader, os); //定义一个PdfStamper对象
		AcroFields af = ps.getAcroFields();// 获取pdf中所有的域
		//给域赋值
		BaseFont bfchinese = BaseFont.createFont("SIMFANG.TTF",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);//定义一个字体
		af.setFieldProperty("Page1.t1", "textfont",bfchinese, null);//设置字体
		af.setFieldProperty("Page1.t1","textsize",11,null); //设置文字大小
		af.setField("Page1.t1","程序员"); //定义文本框文字
		
		af.setFieldProperty("Page1.t2", "textfont",bfchinese, null);//设置字体
		af.setFieldProperty("Page1.t2","textsize",11,null); //设置文字大小
		af.setField("Page1.t2","周哥哥"); //定义文本框文字
		
		af.setFieldProperty("Page1.t3", "textfont",bfchinese, null);//设置字体
		af.setFieldProperty("Page1.t3","textsize",11,null); //设置文字大小
		af.setField("Page1.t3","24"); //定义文本框文字
		//关闭资源
		ps.close();
		os.flush();
		os.close();
		//done
		System.out.println("done..");

 

第二种方式是直接由代码生成PDF文件,操作稍微繁琐一些,不需要模版支持,示例代码如下:

import java.awt.Color;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Date;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;

public class MyPdfEncoder {

	public static void main(String[] args) throws Exception{
		new MyPdfEncoder().create();
		System.out.println("done...");
	}
	private Document pdfDocument;
	private PdfWriter pdfWriter;
	private OutputStream os;
	private String out = "2011.6 大学毕业\n2011.6 ";
	/**
	 * 总方法
	 */
	public void create() throws Exception {
		pdfDocument = new Document (PageSize.A4);//创建一个A4幅面的PDF文档
		os = new FileOutputStream(new File("d:\\"+new Date().getTime()+".pdf"));
		pdfWriter = PdfWriter.getInstance (pdfDocument, os);
		pdfDocument.setMargins(20,20,100,30);//设置边距:
		pdfDocument.open(); 
		loadTitle();
		close();
	}
	/**
	 * 添加PDF内容
	 * @throws Exception 
	 */
	public void loadTitle() throws Exception{
		//输出标题
		Paragraph titleParagraph = new Paragraph("面试表", this.getFont2(16));
		titleParagraph.setAlignment(Paragraph.ALIGN_CENTER);
		titleParagraph.setSpacingAfter(15f);//标题下面稍微空一部分
		pdfDocument.add(titleParagraph);
		
		PdfPTable table = new PdfPTable(new float[]{90,90,90,90,90,90,90,90});
		//第一行
		table.addCell(createCellCol("面试职位",22,12,"仿宋"));
		table.addCell(createCellCol("程序员",22,12,"仿宋"));
		table.addCell(createCellCol("姓名",22,12,"仿宋"));
		table.addCell(createCellCol("周哥哥",22,12,"仿宋"));
		table.addCell(createCellCol("年龄",22,12,"仿宋"));
		table.addCell(createCellCol("23",22,12,"仿宋"));
		table.addCell(createCellCol("面试编号",22,12,"仿宋"));
		table.addCell(createCellCol("001",22,12,"仿宋"));
		//第二行
		table.addCell(createCellCol("居住地",22,12,"仿宋"));
		table.addCell(createCellColColSpan("xxx",22,12,"仿宋",3));
		table.addCell(createCellColColSpan("联系方式",22,12,"仿宋",2));
		table.addCell(createCellColColSpan("131111111",22,12,"仿宋",2));
		//第三行
		table.addCell(createCellCol("时间",22,12,"仿宋"));
		table.addCell(createCellCol("2011-1-1",22,12,"仿宋"));
		table.addCell(createCellColColSpan("毕业学校",22,12,"仿宋",2));
		table.addCell(createCellColColSpan("111111",22,12,"仿宋",2));
		table.addCell(createCellCol("专长",22,12,"仿宋"));
		table.addCell(createCellCol("游戏",22,12,"仿宋"));
		//第四行
		table.addCell(createCellCol("学历",22,12,"仿宋"));
		table.addCell(createCellCol("博士",22,12,"仿宋"));
		table.addCell(createCellColColSpan("期望月薪",22,12,"仿宋",2));
		table.addCell(createCellColColSpan("100000",22,12,"仿宋",2));
		table.addCell(createCellCol("专业",22,12,"仿宋"));
		table.addCell(createCellCol("上网",22,12,"仿宋"));
		//第五行
		table.addCell(createCellColColSpan("工作经历",22,12,"仿宋",8));
		//第六行
		table.setSplitLate(false);//设置单元格可以自动增高
		table.setSplitRows(true);//设置单元格可以自动增高
		PdfPCell cellx = createCellContent(out,8,90,10);
		table.addCell(cellx);
		//第七行
		table.addCell(createCellColColSpan("",22,12,"仿宋",8));
		//第八行
		table.addCell(createCellColColSpan("问    题",22,12,"仿宋",3));
		table.addCell(createCellColColSpan("回    答",22,12,"仿宋",3));
		table.addCell(createCellColColSpan("评价(分数)",22,12,"仿宋",2));
		//第九行
		table.addCell(createCellColColSpan("1",44,12,"仿宋",3));
		table.addCell(createCellColColSpan("Perfect!",44,12,"仿宋",3));
		//9行右侧子表
		PdfPTable c9 = new PdfPTable(new float[]{20,70});
		c9.addCell(createCellColColSpan("5 4 3 2 1 ",22,8,"仿宋",2));
		c9.addCell(createCellCol("理由",22,8,"仿宋"));
		c9.addCell(createCellCol("Perfect!",22,8,"仿宋"));
		PdfPCell cell = new PdfPCell(c9);
		cell.setFixedHeight(44);
		cell.setLeading(1, 1.2f);
		cell.setHorizontalAlignment(PdfPCell.ALIGN_LEFT);
		cell.setVerticalAlignment(PdfPCell.TOP);
		cell.setColspan(2);
		table.addCell(cell);
		
		//第10行
		table.addCell(createCellColColSpan("2",44,12,"仿宋",3));
		table.addCell(createCellColColSpan("Perfect!",44,12,"仿宋",3));
		//10行右侧子表
		PdfPTable c10 = new PdfPTable(new float[]{20,70});
		c10.addCell(createCellColColSpan("5 4 3 2 1 ",22,8,"仿宋",2));
		c10.addCell(createCellCol("理由",22,8,"仿宋"));
		c10.addCell(createCellCol("Perfect!",22,8,"仿宋"));
		PdfPCell cell2 = new PdfPCell(c10);
		cell2.setFixedHeight(44);
		cell2.setLeading(1, 1.2f);
		cell2.setHorizontalAlignment(PdfPCell.ALIGN_LEFT);
		cell2.setVerticalAlignment(PdfPCell.TOP);
		cell2.setColspan(2);
		table.addCell(cell2);
		
		//第11行
		table.addCell(createCellColColSpan("3",44,12,"仿宋",3));
		table.addCell(createCellColColSpan("Perfect!",44,12,"仿宋",3));
		//11行右侧子表
		PdfPTable c11 = new PdfPTable(new float[]{20,70});
		c11.addCell(createCellColColSpan("5 4 3 2 1 ",22,8,"仿宋",2));
		c11.addCell(createCellCol("理由",22,8,"仿宋"));
		c11.addCell(createCellCol("Perfect!",22,8,"仿宋"));
		PdfPCell cell3 = new PdfPCell(c11);
		cell3.setFixedHeight(44);
		cell3.setLeading(1, 1.2f);
		cell3.setHorizontalAlignment(PdfPCell.ALIGN_LEFT);
		cell3.setVerticalAlignment(PdfPCell.TOP);
		cell3.setColspan(2);
		table.addCell(cell3);
		
		//最后一行
		table.addCell(createCellColColSpan("综合评议(分数)\nA B C D E",44,12,"仿宋",3));
		table.addCell(createCellColColSpan("考官评语",44,12,"仿宋",3));
		//12行右侧子表
		PdfPTable c12 = new PdfPTable(new float[]{20,70});
		c12.addCell(createCellCol("分数\n总计",44,8,"仿宋"));
		c12.addCell(createCellCol("100",44,8,"仿宋"));
		PdfPCell cell4 = new PdfPCell(c12);
		cell4.setFixedHeight(44);
		cell4.setLeading(1, 1.2f);
		cell4.setHorizontalAlignment(PdfPCell.ALIGN_LEFT);
		cell4.setVerticalAlignment(PdfPCell.TOP);
		cell4.setColspan(2);
		table.addCell(cell4);
		pdfDocument.add(table);
	}
	/**
	 * 创建一个可以随内容多少而自动增高的单元格
	 * @param text
	 * @param colspan
	 * @param height
	 * @param fontSize
	 * @return
	 */
	public static PdfPCell createCellContent(String text,int colspan,int height,int fontSize)
	{
		PdfPCell cell = new PdfPCell(new Paragraph(text,getFont2(fontSize)));
		cell.setMinimumHeight(height);// 设置最小高度,也可以设置指定的高度
		cell.setIndent(20f);
		cell.setLeading(1, 1.2f);
		cell.setHorizontalAlignment(PdfPCell.LEFT);
		cell.setVerticalAlignment(PdfPCell.TOP);
		cell.setColspan(colspan);
		return cell;
	}
	/**
	 * 创建一个跨列的单元格
	 * @param text
	 * @param height
	 * @param fontSize
	 * @param fontType
	 * @param colspan
	 * @return
	 */
	public static PdfPCell createCellColColSpan(String text,int height,int fontSize,String fontType,int colspan){
		PdfPCell cell = new PdfPCell(new Paragraph(text,getFont(fontType,fontSize)));
		cell.setFixedHeight(height);
		cell.setLeading(1, 1.2f);
		cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
		cell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
		cell.setColspan(colspan);
		return cell;
	}
	/**
	 * 创建一个不跨列的单元格
	 * @param text
	 * @param height
	 * @param fontSize
	 * @param fontType
	 * @return
	 */
	public static PdfPCell createCellCol(String text,int height,int fontSize,String fontType)
	{
		PdfPCell cell = new PdfPCell(new Paragraph(text,getFont(fontType,fontSize)));
		cell.setFixedHeight(height);
		cell.setLeading(1, 1.2f);
		cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
		cell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
		return cell;
	}
	/**
	 * 获取字体
	 * @param type
	 * @param fontSize
	 * @return
	 */
	public static Font getFont(String type, int fontSize) {
		Font font = null;
		try {
			if ("仿宋".equals(type)) {
				BaseFont bf = BaseFont.createFont("SIMFANG.TTF",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
				//TTF是字体文件,载入字体
				font=new Font(bf, fontSize);
			}else if ("楷体".equals(type)) {
				BaseFont bf = BaseFont.createFont("SIMKAI.TTF",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
				font=new Font(bf, fontSize);
			}else if ("宋体".equals(type)) {
				BaseFont bf = BaseFont.createFont("SIMSUN.TTC",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
				font=new Font(bf, fontSize);
			}else if ("华文中宋".equals(type)) {
				BaseFont bf = BaseFont.createFont("STZHONGS.TTF",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
				font=new Font(bf, fontSize);
			}else if ("华文新魏".equals(type)) {
				BaseFont bf = BaseFont.createFont("STXINWEI.TTF",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
				font=new Font(bf, fontSize);
			}
			
		} catch (DocumentException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return font;
	}
	/**
	 * 关闭资源
	 * @throws Exception
	 */
	public void close() throws Exception{
		pdfDocument.close();
		os.flush();
		os.close();
	}
	/**
	 * 获取字体
	 * @param fontSize
	 * @return
	 */
	public static Font getFont2(int fontSize){
		BaseFont bfchinese;
		Font font = null;
		try {
			bfchinese = BaseFont.createFont("SIMFANG.TTF",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
			font = new Font(bfchinese, fontSize);
		} catch (DocumentException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return font;
	}
	/**
	 * 获取字体
	 * @param fontSize
	 * @return
	 */
	private Font getFont(int fontSize){
		Font font = new Font();
		font.setColor(Color.black);
		font.setSize(Float.valueOf(String.valueOf(fontSize)));
		return font;
	}
}

 

分享到:
评论

相关推荐

    java解析PDF文件

    java解析PDF格式的文件demo。JAVA实现PDF解析,对PDF文件中的文本内容可输出仅供参考学习,不喜勿喷。

    Java读取word文档内容并输出成网页(含图片,公式)

    本代码实现使用Java程序读取word文档成网页,将word文档按原样在网页输出。项目编码为UTF-8,文件编码也是utf8,再不要说乱码这种骚话了,选择utf8加载项目就不会乱码

    PDF比对全文内容,输出差异

    概述:比对PDF全文内容,输出差异结果,过滤特定元素【只能比对简单文件】 测试用例: 1:比对交互式PDF全文内容,输出差异结果; 2:比对交互式PDF全文内容,输出差异结果,过滤特定元素不比对; 3:比对静态PDF...

    JAVA输出soap报文.pdf

    JAVA输出soap报文.pdf

    pdfbox 提取 pdf文件中的图片

    PDFBox是一个开源的可以操作PDF文档的Java PDF类库。它可以创建一个新PDF文档,操作现有PDF文档并提取文档中的内容。 它具有以下特性: 1.将一个PDF文档转换输出为一个文本文件。 2.可以从文本文件创建一个PDF文档。 ...

    java 使用pdf打印输出

    使用pdf格式的形式打印,支持客户端显示或者以文档下载的方式显示

    动态创建PDF(Java)

    iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。...

    使用Java组件itext生成pdf介绍.docx

    iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。

    使用java代码生成json文件和word文档!

    ========使用java代码生成json文件和word文档!=======

    java调用SDK版pdftranspro示例

    其SDK版通过Java调用SDK方式仅需三行代码集成pdf文档转换功能,可返回转换文本,也提供 pdf文档截取合并等实用的 pdf 编辑功能接口。 此示例基于32 位jre 版本。如如果是64位jre,需替换pdfparser_1.dll、pdfparser_...

    freemarker无损生成word.pdf

    本人最近在做word生成,网上找了很多,都有各种问题,懒得码字,粘贴了介绍,代码是自己的demo,本地服务器都没有什么问题,目前测试没有什么问题

    利用ITEXT、PDFBOX将PDF转为图片

    利用itext读取PDF后使用pdfbox将PDF转为图片。压缩包内附有相应JAR文件

    JAVA语言程序设计【高清版】.pdf

    第1章 Java语言 1 1.1 Java语言简介 1 1.1.1 Java语言的问世 1 1.1.2 Java语言的组成 1 1.2 开发环境的安装 3 1.3 一个简单的Java应用程序 4 1.3.1 Java应用程序示例 4 1.3.2 使用Java核心API文档 7...

    Java基础篇:IO流.pdf

    该文档主要整理了Java IO流的相关信息,主要包括IO流的按照不同维度的分类、节点流、处理流、输入输出流的处理过程、抽象基类的使用等细节内容

    PDF文件JAVA去水印源码-PDF-Converter-Services-Online:使用基于REST的云服务转换、合并、水印、安全和OC

    PDF文件JAVA去水印源码Muhimbi PDF Converter 在线服务 关于 这是一项基于 REST 的服务,可以轻松地将文档转换、合并、水印、保护和光学字符识别 (OCR) 添加到大多数编程语言、操作系统和开发平台。 此服务也可作为...

    iText2.1.7资料大全(制作PDF的java开源框)

    相关教程 iText 简介 iText创建文档简介 iText入门实例 IText使用PDF模板输出报表的实践 我和iText第一次亲密接触 相关JAR iText-2.1.7.jar(核心) iTextAsian.jar(中文支持) iText-rups-2.1.7.jar iText-rtf-...

    java后台生成echarts图表

    echarts-java 通过phantomjs java后台生成echats图表,echartspoi相关jar包及phantomjs都在压缩包内

    java源码包---java 源码 大量 实例

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

Global site tag (gtag.js) - Google Analytics