`
namezhou
  • 浏览: 159430 次
  • 性别: 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文档

    其中`-d docDir`指定输出文档的目录,`-sourcepath srcDir`指定源代码的路径。 #### 三、注释的实践价值 1. **提高代码可读性**:良好的注释使得其他开发者能够更快地理解代码的功能和逻辑,尤其是在团队协作环境...

    java解析PDF文件

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

    java读取pdf文件属性

    PDFBox可以用来创建新的PDF文档,从现有的PDF文档中提取文本,提取元数据(如作者、标题、主题、关键词等),还可以用来渲染PDF页面到图像,以及对PDF文档进行加密和解密等操作。 ### 三、读取PDF元数据的步骤 ###...

    JAVA实现PDF转HTML

    总结来说,"JAVA实现PDF转HTML"是一个利用Java编程语言开发的后端服务,其主要功能是将PDF文档转换为HTML格式,适用于在线预览和网页展示。虽然这个服务在处理某些特殊元素如水印和印章时可能有局限性,但对常规PDF...

    动态生成PDF文档的Java实现

    ### 动态生成PDF文档的Java实现 #### 概述 PDF(Portable Document Format)是Adobe公司公布的一种用于全球电子文档分发的开放式标准。它是一种支持多种压缩方式的文件格式,能够确保文档在不同软件平台上的一致性...

    java技术文档PDF

    【Java技术文档PDF】是一份专门针对Java编程语言的技术性文档,它包含了广泛而深入的Java知识,旨在帮助读者理解并掌握这一强大的编程工具。这份文档可能是由董浏榆编撰或整理的,标签中的“PDF”表明了文档的格式,...

    java生成pdf文件分页输出并添加水印

    在Java中创建PDF文档,首先需要创建一个PdfWriter实例,然后通过这个实例创建PdfDocument对象。例如: ```java Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream(...

    java 把PDF转换成BASE64

    此主题聚焦于如何在Java环境下将PDF文档转换为BASE64字符串。PDF(Portable Document Format)是一种通用的文件格式,用于存储文档,包括文本、图像和图形。而BASE64是一种将二进制数据转化为ASCII字符的编码方法,...

    java读取PDF显示于浏览器

    Java读取PDF并显示在浏览器是一项常见的技术需求,特别是在Web应用中,用户可能需要预览或下载PDF文档。为了实现这一功能,我们需要了解几个关键知识点: 1. **PDF阅读器集成**:描述中提到的前提是本地电脑需要...

    itext生成PDF开发文档

    iText 是一个强大的 Java 库,用于生成和编辑 PDF 文档。在 Java 开发中,iText 提供了丰富的 API,使得开发者可以方便地在代码中创建 PDF 文件、添加文本、图像、表格、链接等元素,甚至进行数字签名和表单处理。在...

    Java生成PDF完整示例,解决中文乱码

    在Java编程环境中,生成PDF文档是一项常见的需求,特别是在企业级应用中,如报表、发票、合同等场景。本文将详细讲解如何使用Java生成包含中文字符的PDF文档,并解决中文乱码问题,主要涉及的库是iText库及其针对...

    JAVA删除PDF空白页

    总之,删除PDF空白页是Java开发者在处理PDF文档时可能遇到的问题,通过iTextPDF和PDFBox这两个强大的库,我们可以高效地完成这一任务。无论是利用页面内容的可视化检测还是字形分析,都能帮助我们实现目标。在实践中...

    java 读取PDF文件中的内容

    这是一个重要的步骤,因为`PDDocument`是处理PDF文档的主要类。 ```java File file = new File("path_to_your_pdf_file.pdf"); PDDocument document = PDDocument.load(file); ``` 2. **获取PDF页面**:PDF文件由...

    Java 读取PDF文件

    在Java编程环境中,读取PDF文件是一项常见的任务,特别是在开发桌面应用或需要处理PDF文档内容时。本篇文章将深入探讨如何使用Java来读取PDF文件,并将其内容展示在一个由JFrame和JPanel构建的GUI窗口中。 首先,...

    java学习文档pdf

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年...通过阅读“Java学习文档PDF”,你可以系统地掌握这个强大而灵活的编程语言,并逐步成长为一名熟练的Java开发者。

    JAVA 生成pdf文档实例代码

    2. **创建PDF文档**:创建一个`Document`对象作为PDF文档的基础,然后使用`PdfWriter`将其与输出流关联,例如输出到文件或网络流。 ```java import com.itextpdf.text.Document; import ...

    java使用pdf模板套打二维码,文字,表格示例

    在Java开发中,生成PDF文档是一项常见的任务,尤其在需要创建报告、发票或者证书等应用场景。本示例主要探讨如何利用Java技术实现PDF模板套打,包括二维码、文字和表格的插入。PDF作为一种通用的文档格式,具有良好...

    java pdf,java生成pad文档

    在Java中生成PDF文档,开发者可以实现从数据源如数据库、文本或HTML转换为高质量的PDF输出,适用于报告、发票、证书等多种场景。 Java生成PDF文档,通常借助于一些开源库,如iText、Apache PDFBox、 Flying Saucer...

    java生成pdf文件包含表格

    总结起来,生成包含表格的PDF文件在Java中涉及的关键技术点包括使用iText库,理解PDF文档的结构,掌握表格的创建和填充方法。如果你按照上述步骤并结合提供的代码资源,应该能够顺利地在Java项目中实现这一功能。...

    java生成pdf

    iText是一个流行的Java库,用于创建和编辑PDF文档,特别适合动态生成文档。在这个小例子中,我们可能看到了如何设置文本、字体、页面布局以及可能的图像插入等基本操作。 首先,我们需要理解PDF文档的基本结构。PDF...

Global site tag (gtag.js) - Google Analytics