- 浏览: 154567 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
wcnmbbbb:
com.lowagie.text 对应的包呢?
根据数据库注释自动生成数据库文档【支持Oracle和Mysql】 -
greatwqs:
序列化算法这篇不错 : http://greatwqs.ite ...
Java IO 中对象的序列化操作 -
litao11046:
为什么使用get的时候要把具体的方法名加入hidden作为隐藏 ...
Struts DispatchAction基本的请求分发
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中的文字并插入图片
2018-10-18 11:30 1206package gaizhang; import ja ... -
hibernate使用sqlquery原生查询转换到自定义实体
2018-07-03 15:47 728如果使用原生sql语句进行query查询时,hiberna ... -
使用Maven构建一个开源项目的代码结构
2017-01-18 12:29 921本文仅适合maven初学者,适合那些像我一样平时不使用mav ... -
Let's Encrypt 免费SSL证书申请以及nginx和tomcat的应用
2017-01-10 20:00 0一:免费SSL证书的申请 申请地址:htt ... -
Java Des算法实现高速文件加密解密
2016-06-01 15:09 1646import java.io.FileInputStream ... -
利用泛解析和Filter实现动态二级域名
2015-12-26 20:13 2250itEye等网站有个很不错的机制,就是每个用户都有一个永久 ... -
解决com.atomikos.datasource.ResourceException: Error in recovery
2015-09-02 11:36 1260项目架构是struts2+spring+jdbc 启动报错 ... -
Java比较两个数据库中所有表的区别【支持Oracle和SQLServer】
2014-12-09 14:37 4957开发过程中一般是一开发数据库 一生产数据库。 有时候在开发 ... -
根据数据库注释自动生成数据库文档【支持Oracle和Mysql】
2014-11-28 11:02 4102公司项目比较乱,很多时候都是需要先完成项目再准备文档。 数 ... -
根据SVN日志自动生成补丁包[基于Tomcat的JavaEE项目]
2014-11-25 10:08 2322项目开发过程中代码变化很频繁,需要更新文件时,每次都需要手 ... -
用批处理文件为JavaSE项目快速简单的的加载jar包
2014-02-22 10:39 615JavaSE小项目,有时候需要引入很多jar包,但是手动去修 ... -
JSP自定义标签
2011-11-14 07:24 9951.基本定义<%@ taglib uri="& ... -
java中WebService的HelloWorld
2011-11-14 07:24 1632WebService的HelloWorld 首先,在MyEc ... -
Swing中的JOptionPane类
2011-11-14 07:24 1725Swing中的JOptionPane类详解JOptionPan ... -
Java生成图片验证码
2011-11-14 07:24 2801Java生成图片验证码部分代码参考自网易博客白云城主的大作制作 ... -
java生成缩略图
2011-11-11 20:12 1053公司一些项目中经常把用户上传的原图用IMG标签改变尺寸后直接在 ... -
java读取和输出Excel
2011-11-11 20:11 1233Excel读取和输入要用到JXL包 输出Excel的代码示例 ... -
Java中Cookie的操作
2011-11-11 20:07 762一般浏览器只保存200-300个Cookie 每个站点最多20 ... -
Apache-IO实现文件上传
2011-11-11 20:06 815一般在没有部署Struts的小项目中使用 HTML表单 & ... -
ApacheClient模拟浏览器GET和POST请求
2011-11-11 20:04 2043ApacheClient简介HttpClient ...
相关推荐
java解析PDF格式的文件demo。JAVA实现PDF解析,对PDF文件中的文本内容可输出仅供参考学习,不喜勿喷。
本代码实现使用Java程序读取word文档成网页,将word文档按原样在网页输出。项目编码为UTF-8,文件编码也是utf8,再不要说乱码这种骚话了,选择utf8加载项目就不会乱码
概述:比对PDF全文内容,输出差异结果,过滤特定元素【只能比对简单文件】 测试用例: 1:比对交互式PDF全文内容,输出差异结果; 2:比对交互式PDF全文内容,输出差异结果,过滤特定元素不比对; 3:比对静态PDF...
JAVA输出soap报文.pdf
PDFBox是一个开源的可以操作PDF文档的Java PDF类库。它可以创建一个新PDF文档,操作现有PDF文档并提取文档中的内容。 它具有以下特性: 1.将一个PDF文档转换输出为一个文本文件。 2.可以从文本文件创建一个PDF文档。 ...
使用pdf格式的形式打印,支持客户端显示或者以文档下载的方式显示
iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。...
iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。
========使用java代码生成json文件和word文档!=======
其SDK版通过Java调用SDK方式仅需三行代码集成pdf文档转换功能,可返回转换文本,也提供 pdf文档截取合并等实用的 pdf 编辑功能接口。 此示例基于32 位jre 版本。如如果是64位jre,需替换pdfparser_1.dll、pdfparser_...
本人最近在做word生成,网上找了很多,都有各种问题,懒得码字,粘贴了介绍,代码是自己的demo,本地服务器都没有什么问题,目前测试没有什么问题
利用itext读取PDF后使用pdfbox将PDF转为图片。压缩包内附有相应JAR文件
第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流的相关信息,主要包括IO流的按照不同维度的分类、节点流、处理流、输入输出流的处理过程、抽象基类的使用等细节内容
PDF文件JAVA去水印源码Muhimbi PDF Converter 在线服务 关于 这是一项基于 REST 的服务,可以轻松地将文档转换、合并、水印、保护和光学字符识别 (OCR) 添加到大多数编程语言、操作系统和开发平台。 此服务也可作为...
相关教程 iText 简介 iText创建文档简介 iText入门实例 IText使用PDF模板输出报表的实践 我和iText第一次亲密接触 相关JAR iText-2.1.7.jar(核心) iTextAsian.jar(中文支持) iText-rups-2.1.7.jar iText-rtf-...
echarts-java 通过phantomjs java后台生成echats图表,echartspoi相关jar包及phantomjs都在压缩包内
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...