`

页面点击<a href>,生成pdf,当前页面不会跳转

    博客分类:
  • pdf
阅读更多
package com.nfcswp.common.util;

import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.util.List;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import com.itextpdf.text.Document;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.nfcswp.common.model.ResultReport;
import com.nfcswp.entity.ResultInfo;
import com.opensymphony.xwork2.ActionSupport;

/**
 * 
 * 描述:根据投保单号   生成pdf<br>
 * 作者:lihengjun <br>
 * 修改日期:2012-9-14上午10:38:15 <br>
 * E-mail:
 */
public class PdfUtil extends ActionSupport{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String pdfName;
	
	/**
	 * 
	 * 描述:生成电子投保凭证
	 * @author lihengjun
	 * 修改日期:2012-9-14上午09:50:47
	 * @param policyNo 投保单号
	 */
	public void createPdf(HttpServletResponse response,ResultReport resReport) throws Exception{
    	response.reset();
    	OutputStream os = response.getOutputStream();// 取得输出流
    	response.setContentType("application/pdf");//可以在网页中用pdf reader打开
    	String fname="TestReport"+DateUtil.currentDate2YMDMethod();
    	Document document = new Document();
    	ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    	PdfWriter.getInstance(document, buffer);

    	response.setHeader("Content-disposition", "attachment; filename=" + new String(("123123.pdf").getBytes(), "iso-8859-1"));
    	
		try {
			// 设定文档的远东字符集
			BaseFont bfChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
			Font FontChinese = new Font(bfChinese, 9, Font.NORMAL);// 小五号黑体
			Font FontChineseFooter = new Font(bfChinese, 10, Font.BOLD);// 五号黑体加粗
			Font FontChineseUnderline = new Font(bfChinese, 9, Font.UNDERLINE);// 小五号黑体下划线
			FontChineseUnderline.setColor(0, 0, 255);
			Font FontHeadBold = new Font(bfChinese, 18, Font.BOLD);// 小二号黑体加粗
			Font FontBold = new Font(bfChinese, 9, Font.BOLD);// 小五号黑体加粗
			Font FontContent = new Font(bfChinese, 7, Font.NORMAL);// 小六号黑体

			// 打开文档
			document.open();
			/** 保险止期 */
			// 设定文档的标题
			Paragraph Title = new Paragraph("Automated Testing Report", FontHeadBold);

			Paragraph row021 = new Paragraph("2013/07/02", FontBold);

			Paragraph row031 = new Paragraph("Statistical Information", FontBold);

			Paragraph row041 = new Paragraph("scenes name", FontBold);
			Paragraph row042 = new Paragraph("create time", FontBold);
			Paragraph row043 = new Paragraph("total executed", FontBold);
			Paragraph row044 = new Paragraph("pass", FontBold);
			Paragraph row045 = new Paragraph("fail", FontBold);
			
			Paragraph row051 = new Paragraph(resReport.getScenesName(),FontChinese);
			Paragraph row052 = new Paragraph(resReport.getTimeTag(),FontChinese);
			Paragraph row053 = new Paragraph(String.valueOf(resReport.getTotalNum()),FontChinese);
			Paragraph row054 = new Paragraph(resReport.getSuccessResultNum()+"",FontChinese);
			Paragraph row055 = new Paragraph(resReport.getFailResultNum()+"",FontChinese);
			
			
			Paragraph row061 = new Paragraph("Test Case Information", FontBold);
			
			Paragraph row071 = new Paragraph("case name", FontBold);
			Paragraph row072 = new Paragraph("case number", FontBold);
			Paragraph row073 = new Paragraph("test result", FontBold);
			Paragraph row074 = new Paragraph("error message", FontBold);
			
			PdfPTable tableScenes = new PdfPTable(5);
			tableScenes.setHorizontalAlignment(Element.ALIGN_MIDDLE);
			int hws[] = {15,15,15,15,15};
			tableScenes.setWidths(hws);
			tableScenes.setTotalWidth(15);
			tableScenes.setSpacingBefore(30);
			
			// 设定头
			PdfPCell cell = new PdfPCell(Title);
			cell.setUseDescender(true);
			cell.setHorizontalAlignment(1);
			cell.setBorderWidth(0);
//			cell.setHeader(true);
			cell.setRowspan(2);
			cell.setColspan(5);
			tableScenes.addCell(cell);

			// 第二行第一列
			cell = new PdfPCell(row021);
			cell.setHorizontalAlignment(Element.ALIGN_LEFT);
			cell.setUseDescender(true);
			cell.setBorderWidth(0);
//			cell.setBorderWidthBottom(1);
			cell.setColspan(5);
			tableScenes.addCell(cell);

			// 第三行第一列
			cell = new PdfPCell(row031);
			cell.setHorizontalAlignment(Element.ALIGN_LEFT);
			cell.setUseDescender(false);
			cell.setBorderWidth(0);
			cell.setColspan(5);
			tableScenes.addCell(cell);

			// 第四行第一列
			cell = new PdfPCell(row041);
			cell.setHorizontalAlignment(Element.ALIGN_CENTER);
			cell.setUseDescender(true);
			cell.setBorderWidth(1);
			cell.setColspan(1);
			tableScenes.addCell(cell);
			// 第四行第二列
			cell = new PdfPCell(row042);
			cell.setHorizontalAlignment(Element.ALIGN_CENTER);
			cell.setUseDescender(true);
			cell.setBorderWidth(1);
			cell.setColspan(1);
			tableScenes.addCell(cell);
			// 第四行第三列
			cell = new PdfPCell(row043);
			cell.setHorizontalAlignment(Element.ALIGN_CENTER);
			cell.setUseDescender(true);
			cell.setBorderWidth(1);
			cell.setColspan(1);
			tableScenes.addCell(cell);
			// 第四行第四列
			cell = new PdfPCell(row044);
			cell.setHorizontalAlignment(Element.ALIGN_CENTER);
			// cell.setNoWrap(true);
			cell.setUseDescender(true);
			cell.setBorderWidth(1);
			cell.setColspan(1);
			tableScenes.addCell(cell);
			// 第四行第五列
			cell = new PdfPCell(row045);
			cell.setHorizontalAlignment(Element.ALIGN_CENTER);
			cell.setUseDescender(true);
			cell.setBorderWidth(1);
			cell.setColspan(1);
			tableScenes.addCell(cell);

			// 第五行第一列
			cell = new PdfPCell(row051);
			cell.setHorizontalAlignment(Element.ALIGN_CENTER);
			cell.setUseDescender(true);
			cell.setBorderWidth(1);
			cell.setColspan(1);
			tableScenes.addCell(cell);
			// 第五行第二列
			cell = new PdfPCell(row052);
			cell.setHorizontalAlignment(Element.ALIGN_CENTER);
			cell.setUseDescender(true);
			cell.setBorderWidth(1);
			cell.setColspan(1);
			tableScenes.addCell(cell);
			// 第五行第三列
			cell = new PdfPCell(row053);
			cell.setHorizontalAlignment(Element.ALIGN_CENTER);
			cell.setUseDescender(true);
			cell.setBorderWidth(1);
			cell.setColspan(1);
			tableScenes.addCell(cell);
			// 第五行第四列
			cell = new PdfPCell(row054);
			cell.setHorizontalAlignment(Element.ALIGN_CENTER);
			cell.setUseDescender(true);
			cell.setBorderWidth(1);
			cell.setColspan(1);
			tableScenes.addCell(cell);
			// 第五行第五列
			cell = new PdfPCell(row055);
			cell.setHorizontalAlignment(Element.ALIGN_CENTER);
			cell.setUseDescender(true);
			cell.setBorderWidth(1);
			cell.setColspan(1);
			tableScenes.addCell(cell);
			
			PdfPTable tableCase = new PdfPTable(4);
			tableCase.setHorizontalAlignment(Element.ALIGN_MIDDLE);
			int hws2[] = {15,15,15,15};
			tableCase.setWidths(hws2);
			tableCase.setTotalWidth(15);
			tableCase.setSpacingBefore(30);
			
			// 第六行第一列
			cell = new PdfPCell(row061);
			cell.setHorizontalAlignment(Element.ALIGN_LEFT);
			cell.setUseDescender(true);
			cell.setBorderWidth(0);
			cell.setColspan(4);
			tableCase.addCell(cell);
			
			// 第七行第一列
			cell = new PdfPCell(row071);
			cell.setHorizontalAlignment(Element.ALIGN_CENTER);
			cell.setUseDescender(true);
			cell.setBorderWidth(1);
			cell.setColspan(1);
			tableCase.addCell(cell);
			// 第七行第二列
			cell = new PdfPCell(row072);
			cell.setHorizontalAlignment(Element.ALIGN_CENTER);
			cell.setUseDescender(true);
			cell.setBorderWidth(1);
			cell.setColspan(1);
			tableCase.addCell(cell);
			// 第七行第三列
			cell = new PdfPCell(row073);
			cell.setHorizontalAlignment(Element.ALIGN_CENTER);
			cell.setUseDescender(true);
			cell.setBorderWidth(1);
			cell.setColspan(1);
			tableCase.addCell(cell);
			// 第七行第四列
			cell = new PdfPCell(row074);
			cell.setHorizontalAlignment(Element.ALIGN_CENTER);
			cell.setUseDescender(true);
			cell.setBorderWidth(1);
			cell.setColspan(1);
			tableCase.addCell(cell);
			

			 List<ResultInfo> tmpResList =  resReport.getResultList();
		        if(tmpResList!=null && tmpResList.size()>0){
		        	for(int i=0;i<tmpResList.size();i++){ 
		        		Paragraph row_caseResult_1 = new Paragraph(tmpResList.get(i).getCase_info().getName()+"", FontChinese);
		        		Paragraph row_caseResult_2 = new Paragraph(tmpResList.get(i).getCase_info().getCase_number()+"", FontChinese);
		        		Paragraph row_caseResult_3 = new Paragraph(tmpResList.get(i).getRun_state().getName()+"", FontChinese);
		        		Paragraph row_caseResult_4 = new Paragraph(tmpResList.get(i).getError_message(), FontChinese);
		                
		        		cell = new PdfPCell(row_caseResult_1);
		    			cell.setHorizontalAlignment(Element.ALIGN_CENTER);
		    			cell.setUseDescender(true);
		    			cell.setBorderWidth(1);
		    			cell.setColspan(1);
		    			tableCase.addCell(cell);
		    			
		    			cell = new PdfPCell(row_caseResult_2);
		    			cell.setHorizontalAlignment(Element.ALIGN_CENTER);
		    			cell.setUseDescender(true);
		    			cell.setBorderWidth(1);
		    			cell.setColspan(1);
		    			tableCase.addCell(cell);
		    			
		    			cell = new PdfPCell(row_caseResult_3);
		    			cell.setHorizontalAlignment(Element.ALIGN_CENTER);
		    			cell.setUseDescender(true);
		    			cell.setBorderWidth(1);
		    			cell.setColspan(1);
		    			tableCase.addCell(cell);
		    			
		    			cell = new PdfPCell(row_caseResult_4);
		    			cell.setHorizontalAlignment(Element.ALIGN_CENTER);
		    			cell.setUseDescender(true);
		    			cell.setBorderWidth(1);
		    			cell.setColspan(1);
		    			tableCase.addCell(cell);
		            } 
		        }
		        
			document.add(tableScenes);
			document.add(tableCase);
			document.close();
			
			response.setHeader("Expires", "0");
			response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
			response.setHeader("Pragma", "public");
         
			response.setContentLength(buffer.size());
			//创建servletoutputstream流对象,即为response。getoutputstream
			ServletOutputStream out = response.getOutputStream();
			buffer.writeTo(out);//将字节输出流写入到servletoutputstream
			out.flush();//out。flush输出内容
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public String getPdfName() {
		return pdfName;
	}


	public void setPdfName(String pdfName) {
		this.pdfName = pdfName;
	}
	
	public static void main(String[] args) {
		PdfUtil pdf = new PdfUtil();
		//pdf.createPdf();
		System.exit(0);
		}
}

 

分享到:
评论

相关推荐

    html+css基础知识.pdf

    - `href`属性指定链接的目标地址,文本内容被点击后跳转到该地址。 8. 下拉框`&lt;select&gt;`: - `option`定义选项,`value`设置值,`selected`指定默认选中项。 9. 表格`&lt;table&gt;`: - `table`属性包括`bgcolor`, `...

    HTML(上).pdf

    锚点链接允许在长页面中创建快速跳转点,使用方法是通过id属性来标记页面中的锚点位置,然后在&lt;a&gt;标签的href属性中引用这个id。 HTML注释允许开发者在代码中添加说明,不会被浏览器展示给最终用户。注释的格式是&lt;!-...

    计算机应用基础二网页制作完整.pdf

    49. 创建锚点链接通过&lt;a&gt;标签的name属性和href属性实现,用于页面内部跳转。 50. 创建电子邮件超链接使用mailto:协议,如&lt;a href="mailto:email@example.com"&gt;发送邮件&lt;/a&gt;。 51. 创建空链接使用&lt;a href="#"&gt;。&lt;/...

    《计算机应用基础2-网页制作》(完整).pdf

    51. 创建锚点链接使用&lt;a href="#name"&gt;,作用是实现页面内部跳转。 52. 电子邮件超链接使用&lt;a href="mailto:email@example.com"&gt;。 53. 空链接使用&lt;a href="#"&gt;。 54. 超链接标签&lt;a&gt;的属性包括href(链接地址)、...

    重要知识struts2标签详解.pdf

    这里 `&lt;s:url value="/css/tutorial.css"/&gt;` 会生成实际的 URL 地址,这样即使页面的路径发生改变,也不会影响到 CSS 文件的引用。 ##### 2. 直接链接 直接链接用于直接指向某个 Action,这可以方便地实现页面间的...

    Java Web 应用程序设计.doc

    `&lt;A&gt;`标签的`href`属性定义了链接的目标地址,`target`属性则决定了新页面是在当前窗口打开还是在新窗口打开。 1.3.7节涉及列表标记,包括无序列表`&lt;UL&gt;`、有序列表`&lt;OL&gt;`和定义列表`&lt;DL&gt;`,它们用于组织信息并提高...

    文字:TEI编码的文字

    &lt;li&gt;&lt;a href="#{generate-id()}"&gt;&lt;xsl:value-of select="."/&gt;&lt;/a&gt;&lt;/li&gt; &lt;/xsl:for-each&gt; &lt;/ul&gt; &lt;/body&gt; &lt;/html&gt; &lt;/xsl:template&gt; &lt;/xsl:stylesheet&gt; ``` 当你应用这个XSLT到TEI文档上时,它会生成一个包含...

    日语计算机用语.pdf

    2. 链接标签&lt;a&gt;的使用:该标签用于创建超链接,使用户能够点击跳转到其他页面或网站。其基本格式为&lt;a href="目标网址"&gt;链接文本&lt;/a&gt;,其中href属性指定了链接的目标URL。 3. IP地址概念:互联网协议(IP)地址是...

    202x电大Dreamweaver网页设计题库全.pdf

    - `&lt;a&gt;` 标签用于创建链接,`href` 属性定义链接指向的URL地址,`target` 属性定义链接如何打开,例如`_blank`打开新窗口。 - `#` 通常用于创建锚点链接,实现页面内的快速跳转。 7. **层叠和继承**: - CSS样式...

    PHP分页代码详解教程.pdf

    page=".($page+1)."'&gt;下一页&lt;/a&gt; | &lt;a href='?page=".$page_count."'&gt;尾页&lt;/a&gt;"; } // 获取数据 if( $amount ) { $sql = "SELECT * FROM table LIMIT ".(($page-1)*$PageSize).", $PageSize"; $result = mysql_...

    教案最详细的Struts学习标签.pdf

    它可以动态地绑定到一个Action,如示例所示,`&lt;s:a href="login.action"&gt;登陆&lt;/s:a&gt;`会跳转到名为"login.action"的Action。 2. **action标签**:`&lt;s:action&gt;`标签允许直接在JSP页面中调用Action,例如`&lt;s:action ...

    Tapestry字典0.1.pdf

    - **示例**: `Map&lt;String, Object&gt; validationRules = new HashMap&lt;&gt;();` - **应用场景**: 动态设置校验规则。 **2.2 变量自动转换/校验变量类型** - **自动转换**: 使用`@Property`注解指定字段类型,Tapestry会...

    jsp文件中引用外部.css或.js文件的路径问题.pdf

    &lt;link type="text/css" rel="stylesheet" href="../styles/main.css" /&gt; &lt;script type="text/javascript" src="../scripts/dtree.js"&gt;&lt;/script&gt; ``` 这种方式在直接访问`test.jsp`时有效,但当通过其他路径(如...

    Laravel开发-ecpay-invoice

    &lt;a href="{{ route('invoice.download', $invoice-&gt;id) }}"&gt;{{ $invoice-&gt;invoiceNo }}&lt;/a&gt; &lt;!-- 其他信息展示... --&gt; &lt;/li&gt; @endforeach &lt;/ul&gt; ``` 对应的`download`方法会通过ECPAY API获取PDF发票文件并提供...

    025获取多层文件夹下文件名并创建超链接共2页.pdf.z

    在Python中,如果你正在创建HTML文档,可以使用`a`标签来创建链接,如`&lt;a href="file_path"&gt;文件名&lt;/a&gt;`。如果是创建Word文档或PDF,可能需要使用特定的库,如Python的`docx`库或`PyPDF2`库。对于PDF,可能还需要...

    freemarker分页

    &lt;a href="/list?page=${page}"&gt;${page}&lt;/a&gt; &lt;/#list&gt; ``` 4. **样式和交互**:虽然Freemarker主要负责生成静态HTML,但为了让分页看起来更美观,我们还需要CSS来定义样式。同时,可能需要JavaScript来实现点击...

    JAVA开发SSH图文详细开发介绍借鉴.pdf

    在项目中创建index.jsp页面,添加一个链接到login.jsp,如`&lt;a href="login.jsp"&gt;Login&lt;/a&gt;`。然后创建Forward类indexForword,设置"Name"为"indexForword","Path"为"/index.jsp"。 在LoginAction.java中,我们需要...

    滴滴(28问).pdf

    当通过JavaScript禁止&lt;a&gt;标签的默认行为后,可以使用window.location.href或history.pushState()等方法来进行页面跳转而不刷新页面。 4. React层面的性能优化: 性能优化可通过多种手段实现,如使用...

Global site tag (gtag.js) - Google Analytics