`
zhy584520
  • 浏览: 183539 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JAVA利用iText导出PDF

    博客分类:
  • j2ee
 
阅读更多

最新项目中客户要求把一些表格导成PDF发邮件形式发送给特定的用户,本文是利用iText生成PDF,采用策略模式解藕。

所需要引入的包:iText-2.0.8.jar

PdfUtilsBean接口类代码如下:

/**
 *@author liudonggan Email:ldg123456@sina.com
 *@date 2011-7-18 上午10:47:53
 *@version v1.0
 **/
public interface PdfUtilsBean {

	public void CreatePdf(String fileName,String picPath,int id);
}

 PdfRoadKbUtilsBean实现类(implements PdfUtilsBean)代码如下:

package com.ys.product.bean;

import java.awt.Color;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.Image;
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;
import com.ys.product.service.ISgKbRoadDetailService;
import com.ys.util.Utils;

/**
 *@author liudonggan Email:ldg123456@sina.com
 *@date 2011-7-18 上午10:53:31
 *@version v1.0
 **/
public class PdfRoadKbUtilsBean implements PdfUtilsBean {

	private SgKbRoadDetail sgKbRoadDetail=new SgKbRoadDetail();
	private ISgKbRoadDetailService sgKbRoadDetailService;
	public PdfRoadKbUtilsBean(ISgKbRoadDetailService sgKbRoadDetailService)
	{
		this.sgKbRoadDetailService=sgKbRoadDetailService;
	}

	private final int CELLHIGHT=30;//行高
	public void CreatePdf(String fileName,String picPath,int id) {
		// TODO Auto-generated method stub
		File file=new File(fileName);
		FileOutputStream out = null;
		sgKbRoadDetail=sgKbRoadDetailService.findKbRoad(id);
		try
		{
			Document document=new Document(PageSize.A4, 50, 50, 50, 50);
		   out = new FileOutputStream(file);
		   PdfWriter writer = PdfWriter.getInstance(document, out);
		   document.open();
		   
		   Image img=Image.getInstance(picPath+"\\gdcd.jpg");
		   img.scalePercent(70f);
		   img.setAlignment(Element.ALIGN_CENTER);
		   document.add(img);
		   Paragraph title1 = new Paragraph("\n");
		   document.add(title1);
		   
		   img=Image.getInstance(picPath+"\\gdcd1.jpg");
		   img.scalePercent(70f);
		   img.setAlignment(Element.ALIGN_CENTER);
		   document.add(img);
		   
		   Font font = FontFactory.getFont(FontFactory.HELVETICA,
				     18, Font.BOLD, new Color(0, 0, 0));
		   BaseFont bfChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);//设置中文字体

		   //中文大小为20,加粗
		   font = new Font(bfChinese, 20, Font.BOLD);
		   Paragraph title = new Paragraph("XX标题",font);
		   title.setAlignment(Element.ALIGN_CENTER);
		   document.add(title);
		   title1 = new Paragraph("\n");
		   document.add(title1);
		   //创建表格对象
		   PdfPTable table = new PdfPTable(6);
		   int[] cellsWidth = {10,10,10,10,10,10};
		   table.setWidths(cellsWidth);
		   table.setWidthPercentage(100);
		   table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
		   table.getDefaultCell().setVerticalAlignment(Element.ALIGN_MIDDLE);
		   table.getDefaultCell().setFixedHeight(CELLHIGHT);
		   //设置表格边框颜色
		   table.getDefaultCell().setBackgroundColor(new Color(0, 0, 0));
		   //设置单元格的边距间隔等
		   table.getDefaultCell().setPadding(0);
		   table.getDefaultCell().setBorderWidth(0);
		   //单元格对象
		   PdfPCell cell = new PdfPCell();

	    	Font font1 = new Font(bfChinese, 9, Font.HELVETICA);
	 
	    	
	    	Paragraph cel = new Paragraph("填报单位:"+sgKbRoadDetail.getUnitName(),font1);
	    	cel.setAlignment(Element.ALIGN_CENTER);
	    	cell=new PdfPCell(cel);
	    	cell.setHorizontalAlignment(Element.ALIGN_LEFT);
	    	cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
	    	cell.setColspan(6);
	    	cell.setBorder(0);
	    	table.addCell(cell);
	    	
	    	cel = new Paragraph("事故基本情况",font1);
	    	cel.setAlignment(Element.ALIGN_CENTER);
	    	cell=new PdfPCell(cel);
	    	cell.setHorizontalAlignment(Element.ALIGN_CENTER);//设置内容水平居中显示
	    	cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
	    	cell.setColspan(6);
	    	cell.setFixedHeight(CELLHIGHT);
	    	table.addCell(cell);
	    	
	    	cel = new Paragraph("事故发生时间",font1);
	    	cel.setAlignment(Element.ALIGN_CENTER);
	    	cell=new PdfPCell(cel);
	    	cell.setHorizontalAlignment(Element.ALIGN_CENTER);//设置内容水平居中显示
	    	cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
	    	cell.setColspan(1);
	    	cell.setFixedHeight(CELLHIGHT);
	    	table.addCell(cell);
	    	
	    	cel = new Paragraph(Utils.getMinute2(sgKbRoadDetail.getFssj()),font1);
	    	cel.setAlignment(Element.ALIGN_CENTER);
	    	cell=new PdfPCell(cel);
	    	cell.setColspan(3);
	    	cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
	    	cell.setNoWrap(true);
	    	table.addCell(cell);
	    	
	    	cel = new Paragraph("天气情况",font1);
	    	cel.setAlignment(Element.ALIGN_CENTER);
	    	cell=new PdfPCell(cel);
	    	cell.setHorizontalAlignment(Element.ALIGN_CENTER);//设置内容水平居中显示
	    	cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
	    	cell.setColspan(1);
	    	table.addCell(cell);
	    	
	    	cel = new Paragraph(sgKbRoadDetail.getTqqk(),font1);
	    	cel.setAlignment(Element.ALIGN_CENTER);
	    	cell=new PdfPCell(cel);
	    	cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
	    	cell.setColspan(1);
	    	table.addCell(cell);
	    	
	    	cel = new Paragraph("事故地点",font1);
	    	cel.setAlignment(Element.ALIGN_CENTER);
	    	cell=new PdfPCell(cel);
	    	cell.setHorizontalAlignment(Element.ALIGN_CENTER);//设置内容水平居中显示
	    	cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
	    	cell.setColspan(1);
	    	cell.setFixedHeight(CELLHIGHT);
	    	table.addCell(cell);
	    	
	    	cel = new Paragraph(sgKbRoadDetail.getSgdd(),font1);
	    	cel.setAlignment(Element.ALIGN_CENTER);
	    	cell=new PdfPCell(cel);
	    	cell.setColspan(3);
	    	cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
	    	cell.setFixedHeight(CELLHIGHT);
	    	cell.setNoWrap(true);
	    	table.addCell(cell);
	
	    	
	    	
		   //将表格对象添加到小节对象中
		   document.add(table);
		   document.close();

		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			   if (out != null){

				    try {

				     //关闭输出文件流
				     out.close();
				    } catch (IOException e1) {

				    }
			   }
		}
	}

}

 

PdfUtils类 代码如下

import java.io.File;

/**
 *@author liudonggan Email:ldg123456@sina.com
 *@date 2011-7-18 上午10:50:48
 *@version v1.0
 **/
public class PdfUtils {

	private PdfUtilsBean pdfUtilsBean=null;
	private String fileName="";
	private String picPath="";
	private int id=-1;
	public PdfUtils(PdfUtilsBean pdfUtilsBean,String fileName,String picPath,int id)
	{
		this.pdfUtilsBean=pdfUtilsBean;
		this.fileName=fileName;
		this.picPath=picPath;
		this.id=id;
	}
	public void CreatePdf()
	{
		this.pdfUtilsBean.CreatePdf(fileName,picPath,id);
	}
	public void DeletePdf() throws Exception
	{
		File file=new File(fileName);
		if(file.exists())
		{
			file.delete();
		}
	}
}

 

4
2
分享到:
评论
9 楼 wenm168 2016-12-15  
这里有iText 5.5导出pdf, 比较常用的功能及表格画斜线、文档插入绝对位置图片等:http://www.anyrt.com/blog/list/itextpdf.html
8 楼 mao_siyu 2014-09-25  
这个jar 包 和 这代码里面的类 不一致了,楼主 能改一下吗? 因为我刚刚学习这功能,都不知道应该怎么去修改。
7 楼 ae6623 2013-11-25  
zhy584520 写道
ae6623 写道
高并发的时候,会内存溢出。

并发这块没有测试过,现在你解决了没有,方便的话透露下怎么解决的啦


http://blog.csdn.net/ae6623/article/details/11590611


【Itext】解决Itext5大并发大数据量下输出PDF发生内存溢出outofmemery异常

 //for循环中添加如下代码
 int _MAX_ROWS = 1000;//最大行数,之后清理
 int row_count = 0;//初始值
 if (++row_count % _MAX_ROWS == 0) {
                            //datatable是我的一个PdfPTable的new出来的一个实例                           
                            // add table to Document
                            document.add(datatable);
                            // delete _MAX_ROWS from table to free memory
                            datatable.deleteBodyRows();
                            // let iText manage when table header written
                            datatable.setSkipFirstHeader(true);//防止释放后一页出现两次表头。
 } 


6 楼 zhy584520 2013-10-21  
ae6623 写道
高并发的时候,会内存溢出。

并发这块没有测试过,现在你解决了没有,方便的话透露下怎么解决的啦
5 楼 ae6623 2013-09-06  
高并发的时候,会内存溢出。
4 楼 zhy584520 2011-12-12  
hubinDong 写道
麻烦楼主把效果图发上来看下。。。初学

你把代码拷下来就可以跑的,稍改一下
3 楼 hubinDong 2011-12-09  
麻烦楼主把效果图发上来看下。。。初学
2 楼 zhy584520 2011-07-27  
幻想的sky 写道
嘿嘿,写的蛮好的。值得研究!

经常过来支持下哇
1 楼 幻想的sky 2011-07-26  
嘿嘿,写的蛮好的。值得研究!

相关推荐

    java使用itext导出PDF文本绝对定位(实现方法)

    java使用iText导出PDF文本绝对定位(实现方法) iText是一个流行的Java类库,用于生成PDF文档。下面我们将探讨如何使用iText在Java中导出PDF文本,并实现绝对定位。 iText简介 iText是一个开源的Java类库,用于...

    java 用iText导出PDF小例子

    本文将介绍一个使用iText库导出PDF的小例子。 首先,介绍iText库的基本知识。iText是一个开源的Java库,允许开发者创建和操纵PDF文档。它包括生成PDF文件、合并或分割现有PDF文件、添加文本或图像等功能。iText广泛...

    java使用IText导出PDF(包含图片、表格、文字等等Demo和依赖包)

    Java使用IText库导出PDF是一项常见的任务,特别是在需要生成报告、文档或发票等静态内容时。IText是一个强大的PDF库,它允许开发者在Java环境中创建、修改和处理PDF文档。下面将详细介绍如何使用IText库来实现这个...

    JAVA ITEXT 导出试卷

    本项目名为“JAVA ITEXT 导出试卷”,其核心功能是使用Java和iText库来自动化生成PDF格式的试卷。 首先,我们需要了解iText库的基本用法。iText提供了许多API,允许开发者添加文本、图像、表格、链接等元素到PDF文...

    adobe pdf编辑器 java利用itextpdf根据模板导出pdf配套资源

    在Java开发中,我们经常需要生成或修改PDF文档,这时可以利用开源库如iTextPDF。iTextPDF是一个强大的PDF库,它允许开发者通过编程方式创建、修改和操作PDF文档。这个库特别适用于根据模板导出PDF,可以高效地实现...

    java使用itext实现pdf文件下载

    Itext是一个强大的库,它允许开发者在Java环境中创建、编辑和修改PDF文档。本教程将详细讲解如何使用Itext库实现PDF文件的下载,包括通过系统路径下载和通过浏览器下载两种方式。 首先,我们需要了解Itext的基本...

    Java通过IText导出word和pdf所有jar

    标题提到的"Java通过IText导出word和pdf所有jar",意味着这个压缩包可能包含了一系列必要的Java库,这些库用于通过IText库导出PDF以及可能通过其他库(如Apache POI)导出Word文档。"包括spring相关jar"表明这个包还...

    itextpdf 导出pdf 表格 自动分页中文 目录

    iTextPDF是一个Java库,专门用于创建、编辑和处理PDF文档,而`iText-asian-5.2.0.jar`和`itextpdf-5.5.5.jar`是iText库的不同版本,用于支持中文字符和其他亚洲语言。 1. **iTextPDF**: iTextPDF是iText项目的一...

    JAVA使用itextpdf实现HTML转PDF

    本主题聚焦于使用Java的iTextPDF库来完成这个任务。iTextPDF是一个强大的Java库,允许开发人员创建、修改和优化PDF文档。 首先,我们需要了解HTML和PDF之间的差异。HTML是一种标记语言,用于构建和设计网页,而PDF...

    java itext导出PDF github

    根据所提供的标题“java itext导出PDF github”以及描述“导出PDF例子,供网友参考”,我们可以推测该文档主要介绍如何利用Java编程语言结合iText库来创建PDF文件。iText是一款非常强大的用于生成和操作PDF文件的开源...

    Itext导出PDF,中文不显示字体

    Itext导出PDF,中文不显示字体,在body上设置font-family: "Arial Unicode MS",同时在java中引入fontResolver.addFont("/ARIALUNI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 就可以显示中文了

    velocity+itext导出pdf

    总结起来,"Velocity+Itext导出PDF"是一种高效且灵活的方式,可以将动态数据和预定义的模板结合,生成高质量的PDF文档。通过熟练掌握这两个工具的使用,开发者可以创建出满足各种需求的PDF文档生成系统。

    itextpdf按模版导出PDF(表单,表格,条码,二维码)

    **ITextPDF库在Java中的应用:创建模板化的PDF文档** `iTextPDF`是一个流行的开源Java库,用于创建、编辑和操作PDF文档。在这个场景中,我们将探讨如何使用iTextPDF来根据模板生成包含表单、表格、条形码和二维码的...

    itext导出PDF所需jar包

    在标题中提到的"itext导出PDF所需jar包"是指使用iText库来生成PDF文件时所需的Java类库。iText允许开发者通过编程方式生成高质量的PDF文档,包括文本、图像、表格、链接等多种元素,适用于各种业务场景,如报表生成...

    利用itext操作pdf从数据库导出大量数据

    在这个场景中,我们需要利用iText来从数据库导出大量数据并生成PDF文件。以下是关于这个主题的详细知识: 1. **iText简介**: iText是一个开源的Java库,它提供了创建、读取、更新和签署PDF文档的功能。它支持多种...

    itext导出pdf不显示中文 ITextRenderer不显示中文

    "iText导出pdf不显示中文 ITextRenderer不显示中文"这个问题,通常是由于字体配置不当或者缺失支持中文的字体资源导致的。下面我们将深入探讨这个问题及其解决方案。 首先,我们需要理解iText的工作原理。iText创建...

    java使用itext解析pdf并生成文本文件—eclipse工程

    在这个“java使用iText解析pdf并生成文本文件—eclipse工程”中,我们将探讨如何利用iText库在Java环境中,特别是在Eclipse集成开发环境中,解析PDF文档并将其内容导出为文本文件。 首先,我们需要理解PDF...

    itext 导出pdf 例子

    本示例将深入讲解如何利用iText库来导出PDF文件,以满足特定的需求。 首先,确保已将iText库添加到项目依赖中。通常,可以通过Maven或Gradle来引入。对于Maven项目,可以在pom.xml文件中添加以下依赖: ```xml ...

    使用iText生成PDF.doc

    iText 是一个强大的 Java 类库,专为生成和编辑PDF文档而设计。它以其灵活性和易用性在开发社区中广受欢迎。通过iText,开发者可以轻松创建包含文本、图像、表格等各种元素的PDF文件。以下是一些关于如何使用iText...

Global site tag (gtag.js) - Google Analytics