- 浏览: 216042 次
- 性别:
- 来自: 北京
文章分类
最新评论
Java和iText导出pdf文档
一:工程截图:
二:项目运行截图:
三:源代码:
Book.java
package com.iText.bean; public class Book { private int bookId;// 图书编号 private String name;// 图书名称 private String author;// 图书作者 private float price;// 图书价格 private String isbn;// 图书ISBN private String pubName;// 图书出版社 private byte[] preface;// 封面图片 public Book() { super(); } public Book(int bookId, String name, String author, float price, String isbn, String pubName, byte[] preface) { super(); this.bookId = bookId; this.name = name; this.author = author; this.price = price; this.isbn = isbn; this.pubName = pubName; this.preface = preface; } public int getBookId() { return bookId; } public void setBookId(int bookId) { this.bookId = bookId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } public String getIsbn() { return isbn; } public void setIsbn(String isbn) { this.isbn = isbn; } public String getPubName() { return pubName; } public void setPubName(String pubName) { this.pubName = pubName; } public byte[] getPreface() { return preface; } public void setPreface(byte[] preface) { this.preface = preface; } }
Student.java
package com.iText.bean; import java.util.Date; public class Student { private long id;// 学号 private String name;// 姓名 private int age;// 年龄 private boolean sex;// 性别 private Date birthday;// 出生日期 public Student() { super(); } public Student(long id, String name, int age, boolean sex, Date birthday) { super(); this.id = id; this.name = name; this.age = age; this.sex = sex; this.birthday = birthday; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean getSex() { return sex; } public void setSex(boolean sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
StrHelp.java
package com.iText.util; import java.io.UnsupportedEncodingException; /** * 以上是两个帮助封装类,都是为了对付iText的中文问题的 * @author zhaoxinguo * */ public class StrHelp { public static String getChinese(String s) { try { return new String(s.getBytes("gb2312"), "iso-8859-1"); } catch (UnsupportedEncodingException e) { return s; } } }
PdfParagraph.java
package com.iText.util; import java.io.IOException; import com.lowagie.text.BadElementException; import com.lowagie.text.Cell; import com.lowagie.text.Chunk; import com.lowagie.text.DocumentException; import com.lowagie.text.Font; import com.lowagie.text.Paragraph; import com.lowagie.text.Phrase; import com.lowagie.text.pdf.BaseFont; /** * 下载地址:http://sourceforge.net/projects/itext/files/latest/download * * @author zhaoxinguo * */ public class PdfParagraph extends Paragraph { /** * */ private static final long serialVersionUID = 8852816419489363243L; public PdfParagraph(String content) { super(content, getChineseFont(12, false)); } public PdfParagraph(String content, int fontSize, boolean isBold) { super(content, getChineseFont(fontSize, isBold)); } // 设置字体-返回中文字体 protected static Font getChineseFont(int nfontsize, boolean isBold) { BaseFont bfChinese; Font fontChinese = null; try { bfChinese = BaseFont.createFont("c://windows//fonts//simsun.ttc,1",BaseFont.IDENTITY_H, BaseFont.EMBEDDED); if (isBold) { fontChinese = new Font(bfChinese, nfontsize, Font.BOLD); } else { fontChinese = new Font(bfChinese, nfontsize, Font.NORMAL); } } catch (DocumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return fontChinese; } // 转化中文 protected Cell ChangeCell(String str, int nfontsize, boolean isBold) throws IOException, BadElementException, DocumentException { Phrase ph = ChangeChinese(str, nfontsize, isBold); Cell cell = new Cell(ph); return cell; } // 转化中文 protected Chunk ChangeChunk(String str, int nfontsize, boolean isBold) throws IOException, BadElementException, DocumentException { Font FontChinese = getChineseFont(nfontsize, isBold); Chunk chunk = new Chunk(str, FontChinese); return chunk; } // 转化中文 protected Phrase ChangeChinese(String str, int nfontsize, boolean isBold) throws IOException, BadElementException, DocumentException { Font FontChinese = getChineseFont(nfontsize, isBold); Phrase ph = new Phrase(str, FontChinese); return ph; } }
ExportPdf.java
package com.iText.util; import java.awt.Color; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Iterator; import javax.swing.JOptionPane; import com.iText.bean.Book; import com.lowagie.text.Cell; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowagie.text.Element; import com.lowagie.text.HeaderFooter; import com.lowagie.text.Image; import com.lowagie.text.PageSize; import com.lowagie.text.Phrase; import com.lowagie.text.Rectangle; import com.lowagie.text.pdf.PdfPCell; import com.lowagie.text.pdf.PdfPTable; import com.lowagie.text.pdf.PdfWriter; /** * 利用开源组件IText2.0.4动态导出PDF文档 转载时请保留以下信息,注明出处! * * @author zhaoxinguo * @version v1.0 * @param <T>应用泛型,代表任意一个符合javabean风格的类 * 注意这里为了简单起见,boolean型的属性xxx的get器方式为getXxx(),而不是isXxx() * byte[]表图片数据,注意合适的大小 */ public class ExportPdf<T> { public void exportPdf(Collection<T> dataset, OutputStream out) { exportPdf("测试iText导出PDF文档", null, dataset, out, "yyyy-MM-dd"); } public void exportPdf(String[] headers, Collection<T> dataset, OutputStream out) { exportPdf("测试iText导出PDF文档", headers, dataset, out, "yyyy-MM-dd"); } public void exportPdf(String[] headers, Collection<T> dataset, OutputStream out, String pattern) { exportPdf("测试iText导出PDF文档", headers, dataset, out, pattern); } /** * 这是一个通用的方法,利用了JAVA的反射机制,可以将放置在JAVA集合中并且符号一定条件的数据以PDF 的形式输出到指定IO设备上 * * @param title * 表格标题名 * @param headers表格属性列名数组 * @param dataset需要显示的数据集合 * ,集合中一定要放置符合javabean风格的类的对象。此方法支持的javabean属性的数据类型有基本数据类型及String * ,Date,byte[](图片数据) * @param out与输出设备关联的流对象 * ,可以将PDF文档导出到本地文件或者网络中 * @param pattern如果有时间数据 * ,设定输出格式。默认为"yyy-MM-dd" */ public void exportPdf(String title, String[] headers, Collection<T> dataset, OutputStream out, String pattern) { // 作为报表的PDF文件,一定要适合打印机的输出打印 Rectangle rectPageSize = new Rectangle(PageSize.A4);// 定义A4页面大小 // rectPageSize = rectPageSize.rotate();// 加上这句可以实现A4页面的横置 Document document = new Document(rectPageSize, 50, 50, 50, 50);// 其余4个参数,设置了页面的4个边距 try { // 将PDF文档写出到out所关联IO设备上的书写对象 PdfWriter.getInstance(document, out); // 添加文档元数据信息 document.addTitle(StrHelp.getChinese(title)); document.addSubject("export information"); document.addAuthor("leno"); document.addCreator("leno"); document.addKeywords("pdf itext"); // 定义页头和页尾 HeaderFooter header = new HeaderFooter(new PdfParagraph(title, 20, true), false); header.setAlignment(Element.ALIGN_CENTER); HeaderFooter footer = new HeaderFooter(new Phrase( "This is page "), new Phrase(".")); footer.setAlignment(Element.ALIGN_CENTER); document.setHeader(header); document.setFooter(footer); // 打开PDF文档 document.open(); // 添加一张表格,使用Table或者PdfPTable // Table table = new Table(headers.length); // table.setWidth(16*headers.length); // //table.setWidths(new float[]{20,20,20,30}); // table.setCellsFitPage(true); // table.setAutoFillEmptyCells(true); // table.setAlignment(Table.ALIGN_CENTER); // table.setBackgroundColor(Color.yellow); // table.setBorderColor(Color.green); PdfPTable table = new PdfPTable(headers.length); // table.setHorizontalAlignment(Element.ALIGN_CENTER); table.setWidthPercentage(16 * headers.length); // 产生表格标题行 for (int i = 0; i < headers.length; i++) { PdfPCell cell = new PdfPCell(new PdfParagraph(headers[i], 14, true)); cell.setHorizontalAlignment(Cell.ALIGN_CENTER); cell.setVerticalAlignment(Cell.ALIGN_MIDDLE); cell.setBackgroundColor(Color.cyan); cell.setBorderColor(Color.green); table.addCell(cell); } // 遍历集合数据,产生数据行 Iterator<T> it = dataset.iterator(); int index = 0; while (it.hasNext()) { index++; T t = (T) it.next(); // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值 Field[] fields = t.getClass().getDeclaredFields(); for (short i = 0; i < fields.length; i++) { PdfPCell cell = null; Field field = fields[i]; String fieldName = field.getName(); String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); try { Class tCls = t.getClass(); Method getMethod = tCls.getMethod(getMethodName, new Class[] {}); Object value = getMethod.invoke(t, new Object[] {}); // 判断值的类型后进行强制类型转换 String textValue = null; if (value instanceof Boolean) { boolean bValue = (Boolean) value; textValue = "男"; if (!bValue) { textValue = "女"; } } else if (value instanceof Date) { Date date = (Date) value; SimpleDateFormat sdf = new SimpleDateFormat(pattern); textValue = sdf.format(date); } else if (value instanceof byte[]) { byte[] bsValue = (byte[]) value; Image img = Image.getInstance(bsValue); cell = new PdfPCell(img); } else { textValue = value.toString(); } // 如果不是图片数据,就当做文本处理 if (textValue != null) { cell = new PdfPCell(new PdfParagraph(textValue)); } cell.setHorizontalAlignment(Cell.ALIGN_CENTER); cell.setVerticalAlignment(Cell.ALIGN_MIDDLE); cell.setBorderColor(Color.green); table.addCell(cell); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { // 清理资源 } } } document.add(table); document.close(); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) throws Exception { // 测试学生 /*ExportPdf<Student> ex = new ExportPdf<Student>(); String[] headers = { "学号", "姓名", "年龄", "性别", "出生日期" }; java.util.List<Student> dataset = new ArrayList<Student>(); dataset.add(new Student(10000001, "张三", 20, true, new Date())); dataset.add(new Student(20000002, "李四", 24, false, new Date())); dataset.add(new Student(30000003, "王五", 22, true, new Date())); OutputStream out = new FileOutputStream("E://Student.pdf"); ex.exportPdf(headers, dataset, out); out.close(); JOptionPane.showMessageDialog(null, "pdf导出成功!");*/ /****************************************************************************/ // 测试图书 ExportPdf<Book> ex2 = new ExportPdf<Book>(); String[] headers2 = { "图书编号", "图书名称", "图书作者", "图书价格", "图书ISBN","图书出版社", "封面图片" }; java.util.List<Book> dataset2 = new ArrayList<Book>(); try { BufferedInputStream bis = new BufferedInputStream(new FileInputStream("book_1.jpg")); byte[] buf = new byte[bis.available()]; while ((bis.read(buf)) != -1) { // } dataset2.add(new Book(1, "jsp", "leno", 300.33f, "1234567", "清华出版社", buf)); dataset2.add(new Book(2, "java编程思想", "brucl", 300.33f, "1234567", "阳光出版社", buf)); dataset2.add(new Book(3, "DOM艺术", "lenotang", 300.33f, "1234567", "清华出版社", buf)); dataset2.add(new Book(4, "c++经典", "leno", 400.33f, "1234567", "清华出版社", buf)); dataset2.add(new Book(5, "c#入门", "leno", 300.33f, "1234567", "汤春秀出版社", buf)); OutputStream out2 = new FileOutputStream("E://Book.pdf"); ex2.exportPdf(headers2, dataset2, out2); out2.close(); JOptionPane.showMessageDialog(null, "pdf导出成功!"); System.out.println("pdf导出成功!"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
相关推荐
在Java代码中使用itext生成PDF文档,实现PDF文档的导出。
java使用itext实现pdf文件下载小案例,通过系统路径下载,和通过浏览器下载
java实现html转pdf,包含后端代码,html测试页面,pom依赖,jar包,如页面过于复杂需调整页面,有些样式itextpdf不支持,请寻找其它样式替换。
使用IText生成PDF和WORD文档 包括源码和IText所需jar包
此文档主要讲述了使用Java组件iText来生成PDF,操作PDF
java 利用itext操作pdf从数据库导出大量数据,有详细文档。
Java使用iText PDF插件导出PDF文档时,需引入中文字体文件,并创建不同大小风格的中文字体
根据业务需要,需要在服务器端生成可动态配置的PDF文档,方便数据可视化查看。此文的测试是在客户端通过java程序的测试,直接运行java类获得成功!
NULL 博文链接:https://quicker.iteye.com/blog/548835
使用itextpdf将html模板生成pdf文档,poi导出excel,freemarker导出excel,pdf添加文字水印。
在Java代码中使用itext生成PDF文档,实现PDF文档的导出。
主要介绍了Java使用itext5实现PDF表格文档导出,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
java使用itext导出pdf,可以生成表格、文字、图片等,demo中详细介绍了使用的版本,可能出现的问题,以及生成模板的方法。全网最全!!
itext是一款实现java导出word的第三方插件,可以通过PDF转word的方式时间word导出功能
iText有很强大的PDF处理能力,但是样式和排版不好控制,直接写PDF文档,数据的动态渲染很麻烦。 FreeMarker能配置动态的html模板,正好解决了样式、动态渲染和排版问题。 JFreeChart有这方便的画图API,能画出简单的...
iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 iText的安装非常方便,下载iText.jar文件后,...
根据业务需要,需要在服务器端生成可动态配置的PDF文档,方便数据可视化查看。此文的测试是在客户端通过java程序的测试,直接运行java类获得成功!
Java生成PDF完整示例,并解决中文乱码问题, 内有生成PDF相关的三个包, iText-2.0.8.jar, iTextAsian.jar, iTextAsianCmaps.jar
9、PDF文件修改权限限制,实现文档只可读取的权限 10、PDF文件增加文字或图片水印功能,要求文字或图片在整个页面清晰可见。增加的水印信息不能使PDF文件大小增长超过5%。 11、对PDF文件进行加密
对pdf文件进行读取,根据传入的文字去寻找指定位置信息,根据位置信息添加图片,其中样式格式可自定义,具体可查看jar包的操作文档,地址可百度。实现签字或者盖章操作,文件中包括源码和架包。