使用flying-saucer,利用HTML来生成PDF文件(裴东辉)

1、导入maven依赖

<flyingSaucer.version>9.1.0</flyingSaucer.version>

<!-- flying-saucer -->
<dependency>
    <groupId>org.xhtmlrenderer</groupId>
    <artifactId>flying-saucer-pdf</artifactId>
    <version>${flyingSaucer.version}</version>
</dependency>
<dependency>
    <groupId>org.xhtmlrenderer</groupId>
    <artifactId>flying-saucer-core</artifactId>
    <version>${flyingSaucer.version}</version>
</dependency>

2、利用Html来导出简单的PDF文件

@RequestMapping("/pdfLoad")
    public void pdfLoad(@RequestParam("pdfHtmlData")String pdfHtmlData,@RequestParam("fileName")String fileName,@RequestParam("borswerInfo")String borswerInfo,
    		HttpServletRequest request,HttpServletResponse response){
    	log.info("pdfHtmlData:"+pdfHtmlData+";fileName:"+fileName+";borswerInfo:"+borswerInfo);
    	InputStream in=null;
    	OutputStream out=null;
    	try {
    		String tempPdfFile=FileUploadRestController.class.getResource("/").getPath();
    		tempPdfFile=tempPdfFile+"/public/upload/"+System.currentTimeMillis()+".pdf";
    		File dest=new File(tempPdfFile);
	        //检测是否存在目录
	        if(!dest.getParentFile().exists()){
	            dest.getParentFile().mkdirs();
	        }
    		FileOutputStream tempout=new FileOutputStream(tempPdfFile);
			//构建一个html页面(前台通过js来控制传递)
	    	//根据Html页面来构建一个Document
	     	DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
			Document doc = builder.parse(new ByteArrayInputStream(pdfHtmlData.getBytes("UTF-8")));
			//根据Document来填充iTextRenderer
			ITextRenderer iTextRenderer=new ITextRenderer();
			iTextRenderer.setDocument(doc, null);
			ITextFontResolver fontResolver = iTextRenderer.getFontResolver();
			String pdfFontPath=FileUploadRestController.class.getResource("/plugins/pdf-font/simsun.ttf").getPath();//request.getSession().getServletContext().getRealPath("upload/pdf/font");
			fontResolver.addFont(pdfFontPath,BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
			iTextRenderer.layout();
			//利用iTextRenderer生成pdf文件
			iTextRenderer.createPDF(tempout);
			tempout.flush();
			tempout.close();
			//文件下载
			File downloadFile = new File(tempPdfFile);
			//文件名
			JSONObject borswerInfoObj=JSONObject.parseObject(borswerInfo);
			if (null!=borswerInfoObj&&"ie".equals(borswerInfoObj.get("browser"))) {
				fileName=java.net.URLEncoder.encode(fileName, "UTF-8");
				fileName=fileName.replace("+", "%20"); //IE下文件名称带空格会转换为加号
				response.setHeader("charset", "charset=UTF-8");
			} else {
				fileName=new String(fileName.getBytes(),Charset.forName("ISO8859-1"));
				response.setHeader("charset", "charset=ISO8859-1");
			}
			//输出设置
			response.setHeader("content-type", "application/octet-stream");
			response.setContentType("application/octet-stream");
			response.setHeader("Content-Disposition","attachment;filename="+fileName);
	        response.setContentLengthLong(downloadFile.length());
	        in=new FileInputStream(downloadFile);
	        out=response.getOutputStream();
	        IOUtils.copy(in,out);
	        response.flushBuffer();
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
            IOUtils.closeQuietly(in);
            IOUtils.closeQuietly(out);
        }
    }

  

3、pdfHtmlData参数为

//导出PDF文件
			$(‘body‘).delegate(".pdfLoad","click",function(){
				WebIndex.queryParam.limit=10000;
				Logger.info(WebIndex.queryParam);
				$.ajax({type:‘post‘,url:webIface.rootUrl+‘/fileManager/list/‘,dataType: ‘json‘,data:WebIndex.queryParam}).done(function(data){
					Logger.info(data);
					if(data.code==1){
						var ifile=$(‘body‘).find(‘#load-pdf‘);
				    	var fileName="文件上传和下载列表.pdf";
				    	//构造pdf打印html数据
				    	var pdfHtmlData=‘‘;
				    	pdfHtmlData+=‘<html>‘;
				    	pdfHtmlData+=‘ <head>‘;
				    	pdfHtmlData+=‘ <title>2015-2016年度信息统计</title>‘;
				    	pdfHtmlData+=‘  <style type="text/css">‘;
				    	pdfHtmlData+=‘	 body{font-family:SimSun;margin: 5px;font-size:12px;text-align:center;}‘;
				    	pdfHtmlData+=‘	 table{border:0;border-top:1px solid #000;border-left:1px solid #000;width:100%;line-height:20px}‘;
				    	pdfHtmlData+=‘	 table thead{background-color:#EEE}‘;
				    	pdfHtmlData+=‘	 table td{border:0;border-bottom:1px solid #000;border-right:1px solid #000;padding:5px;white-space:nowrap}‘;
				    	pdfHtmlData+=‘	 .title{padding-bottom:20px;font-size:16px;text-align:center;width:100%;line-height:20px;}‘;
				    	pdfHtmlData+=‘	 .fl{padding-left:20px;text-align:left;}‘;
				    	pdfHtmlData+=‘   @page{size:297mm 210mm;}‘;
				    	pdfHtmlData+=‘  </style>‘;
				    	pdfHtmlData+=‘ </head>‘;
				    	pdfHtmlData+=‘ <body>‘;
				    	pdfHtmlData+=‘  <div class="title">文件上传和下载列表统计(第1页)</div>‘;
				    	pdfHtmlData+=‘  <table  cellpadding="0px" cellspacing="0px" >‘;
				    	pdfHtmlData+=‘    <thead><td width="10%">标号</td><td width="40%">文件名</td><td width="15%">上传人</td><td  width="20%">上传时间</td><td width="15%">下载次数</td></thead>‘;
				    	$.each(data.list,function(num,detail){
				    		if(num!=0&&num%20==0){
				    			pdfHtmlData+=‘  </table>‘;
				    			pdfHtmlData+=‘  <div style="height:1px;"></div>‘;
				    			pdfHtmlData+=‘  <div class="title">文件上传和下载列表统计(第‘+(num/20+1)+‘页)</div>‘;
				    			pdfHtmlData+=‘  <table  cellpadding="0px" cellspacing="0px" >‘;
						    	pdfHtmlData+=‘    <thead><td width="10%">标号</td><td width="40%">文件名</td><td width="15%">上传人</td><td  width="20%">上传时间</td><td width="15%">下载次数</td></thead>‘;
				    		}
				    		pdfHtmlData+=‘<tr><td>‘+(num+1)+‘</td><td class="fl">‘+detail.fileName+‘</td><td>‘+detail.uploader+‘</td><td>‘+detail.loadDate+‘</td><td>‘+detail.downLoadCount+‘</td></tr>‘;
				    	});
				    	pdfHtmlData+=‘  </table>‘;
				    	pdfHtmlData+=‘ </body>‘;
				    	pdfHtmlData+=‘</html>‘;
				    	var borswerInfo=JSON.stringify(getBrowserInfo());
				    	var time=Date.parse(new Date())/1000;
				    	if(ifile.length==0){
				    		var loadhtml=‘‘;
				    		loadhtml+=‘<form method="post" id="load-pdf" action="‘+webIface.rootUrl+‘/fileUpload/pdfLoad/" style="display:none">‘;
				    		loadhtml+=‘		<input class="load-pdfHtmlData"  name="pdfHtmlData" >‘;
				    		loadhtml+=‘		<input class="load-fileName" 	 name="fileName" 	>‘;
				    		loadhtml+=‘		<input class="load-borswerInfo"  name="borswerInfo" >‘;
				    		loadhtml+=‘		<input class="load-time" 		 name="time" 		>‘;
				    		loadhtml+=‘</form>‘;
				    		$(‘body‘).append(loadhtml);
				    		ifile=$(‘body‘).find(‘#load-pdf‘);
				    	}
				    	ifile.find(‘.load-pdfHtmlData‘).attr("value",pdfHtmlData);
			    		ifile.find(‘.load-fileName‘).attr("value",fileName);
			    		ifile.find(‘.load-borswerInfo‘).attr("value",borswerInfo);
			    		ifile.find(‘.load-time‘).attr("value",time);
				    	ifile.submit();
					}
	       		}).fail(function(erorEvent){
	       			alert(erorEvent.statusText);
	       		});
				WebIndex.queryParam.limit=8;
			});

  

4、预览pdf效果。



时间: 2024-12-28 03:12:38

使用flying-saucer,利用HTML来生成PDF文件(裴东辉)的相关文章

怎么用PHP在HTML中生成PDF文件

原文:Generate PDF from html using PHP 译文:使用PHP在html中生成PDF 译者:dwqs 利用PHP编码生成PDF文件是一个非常耗时的工作.在早期,开发者使用PHP并借助FPDF来生成PDF文件.但是如今,已经有很多函数库可以使用了,并且能够从你提供的HTML文件生成PDF文档.这让原先耗时的工作变得非常简单了. FPDF是很早就被使用的,其特点如下: FPDF FPDF是一个允许使用纯PHP生成PDF文档的PHP类,换句话说,没有使用PDFlib 函数库.

Java Itext 生成PDF文件

利用Java Itext生成PDF文件并导出,实现效果如下: PDFUtil.java package com.jeeplus.modules.order.util; import java.io.OutputStream; import java.math.BigDecimal; import java.net.URL; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Arr

利用Java动态生成 PDF 文档

利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那么目前最佳的解决方案,你可能会想到 iText ,对没错... iText+(Velocity / Freemarker)可以实现.不过据我熟悉,iText本身提供的HTML解析器还是不够强大,许多HTML标签和属性无法识别,更悲催的是简单的CSS它不认识,排版调整样式会让你头大的.不要失望,接下来

java调用wkhtmltopdf生成pdf文件,美观,省事

最近项目需要导出企业风险报告,文件格式为pdf,于是搜了一大批文章都是什么Jasper Report,iText ,flying sauser ,都尝试了一遍,感觉不是我想要的效果, 需要自己调整好多东西,样式,字体等等,好麻烦,毕竟博主这么懒的人,哈哈.-------jstarseven 言归正传: java生成pdf文件,方式很多,以上提到的哪几种方式具体可以参考这篇文章<讲解很详细>:http://blog.csdn.net/ouyhong123/article/details/2640

利用private font改变PDF文件的字体

利用private font改变PDF文件的字体 前几天做项目,需要使用未安装的字体来改变PDF的文件.以前并没有实现过类似的功能,幸运的是我在网上找到了类似的教程,并成功实现了这个功能. 下面就跟大家分享一下我是如何实现的. 1.首先我先下载了一个系统字体库中没有的字体,独立的DeeDeeFlowers.TTF字体文件,打开预览如下图: 2.我们接下来要做的是就是在一个新建的PDF文件中输入一些内容,然后把字体替换为DeeDeeFlowers.TTF. 我在他们的网站上下载了这个组件的最新Ho

php如何利用python实现对pdf文件的操作(读写、合并分割)

php如何利用python实现对pdf文件的操作 需求:在PHP里实现了把8.pdf的前4页pdf文件截取出来生成新的pdf文件. 详细步骤如下: 1. 安装python第三方库PyPDF2 前提:python必须是3.x版本以上,必要时需要升级pip3,命令如下:pip3 install --upgrade pipPyPDF 自 2010年 12月开始就不在更新了,PyPDF2 接棒 PyPDF, 在此使用PyPDF2. 安装命令:pip install PyPDF2 2.编写python脚本

thinkphp整合系列之tcpdf类生成pdf文件

php生成pdf文件的需求是不怎么常见的:当然也是有的: 既然已经整合使用了:那就写篇博客来讲解下吧: 示例项目:http://git.oschina.net/shuaibai123/thinkphp-bjyadmin 一:引入tcpdf /ThinkPHP/Library/Vendor/Tcpdf 把tcpdf整个目录拷到自己的项目中: 二:函数 /Application/Common/Common/function.php /** * 生成pdf * @param  string $html

.NET生成PDF文件

C#未借助第三方组件,自己封装通用类,生成PDF文件. 调用方式: //路径 string path = @"C:\yuannwu22.pdf"; //内容 string strContent = "ddd3232342434d"; new PDFGenerator.PDFGenerator(path, strContent).Create(); 下载地址: http://pan.baidu.com/s/1kTIchev?

ThinkPHP3.2.3扩展之生成PDF文件(MPDF)

目前是PHP生成PDF文件最好的插件了,今天介绍下在ThinkPHP3.2.3里如何使用. 先安照路径放好如图. 下面是使用方法 public function pdf(){ //引入类库 Vendor('mpdf.mpdf'); //设置中文编码 $mpdf=new \mPDF('zh-cn','A4', 0, '宋体', 0, 0); //html内容 $html='<h1><a name="top"></a>一个PDF文件</h1>