您正在使用 IPV4 [3.231.217.209] 访问本站,您本次已经查看了 1 页
用户名: 密 码: 验证码:     用QQ登录本站
首页 软件 编程 笑话 知识 公告 台风 日历 计算器
悟空收录网       [公益]保护绿色环境,构建和谐社会      

【腾讯云】 爆款2核2G3M云服务器首年 61元,叠加红包再享折上折      
[公益] 地球是我家,绿化靠大家      
2024年 清明节 006
2024年 劳动节 033
2025年 元 旦 278
2025年 春 节 306
 
您现在的位置:首页 >> JSP >> 内容
本类新增
本类热门
动态jsp页面转PDF输出到页面的实现方法
内容摘要: Stringhtml=ServletUtils.forward(request,response,'/WEB-INF/jsp/depot/print/jhd.jsp');//转发请求到jsp,返回解析之后的内容而不是输出到浏览器//System.out.println(html);byte[]pdf=PDFUtils.html2pdf(html);respo......
Stringhtml=ServletUtils.forward(request,response,"/WEB-INF/jsp/depot/print/jhd.jsp");//转发请求到jsp,返回解析之后的内容而不是输出到浏览器

//System.out.println(html);

byte[]pdf=PDFUtils.html2pdf(html);

response.setContentType("application/pdf");

response.setHeader("Content-Length",String.valueOf(pdf.length));

response.setHeader("Connection","keep-alive");

response.setHeader("Accept-Ranges","none");

response.setHeader("X-Frame-Options","DENY");

OutputStreamout=response.getOutputStream();

out.write(pdf);

out.flush();

publicclassServletUtils{

/**

*此forward方法执行完毕之后不会输出内容到浏览器,而是把输出到字节流,最后以字符串的形式返回

*@paramrequest

*@paramresponse

*@paramsrc

*@return

*/

publicstaticStringforward(HttpServletRequestrequest,HttpServletResponseresponse,Stringsrc){

try{

/*↓↓↓↓↓重新构造response,修改response中的输出流对象,使其输出到字节数组↓↓↓↓↓*/

finalByteArrayOutputStreambyteArrayOutputStream=newByteArrayOutputStream();

finalServletOutputStreamservletOuputStream=newServletOutputStream(){

@Override

publicvoidwrite(intb)throwsIOException{

byteArrayOutputStream.write(b);

}

@Override

publicbooleanisReady(){

returnfalse;

}

@Override

publicvoidsetWriteListener(WriteListenerwriteListener){

}

};

finalPrintWriterprintWriter=newPrintWriter(newOutputStreamWriter(byteArrayOutputStream,"UTF-8"));

response=newHttpServletResponseWrapper(response){

publicServletOutputStreamgetOutputStream(){

returnservletOuputStream;

}

publicPrintWritergetWriter(){

returnprintWriter;

}

};

/*↑↑↑↑↑↑重新构造response,修改response中的输出流对象,使其输出到字节数组↑↑↑↑↑↑*/

//执行forward操作

request.getRequestDispatcher(src).forward(request,response);

//把字节流中的内容太转为字符串

returnnewString(byteArrayOutputStream.toByteArray(),"utf-8");

}

catch(Exceptione){

thrownewRuntimeException(e);

}

}

}

importcom.itextpdf.text.*;

importcom.itextpdf.text.pdf.PdfWriter;

importcom.itextpdf.tool.xml.Pipeline;

importcom.itextpdf.tool.xml.XMLWorker;

importcom.itextpdf.tool.xml.XMLWorkerFontProvider;

importcom.itextpdf.tool.xml.XMLWorkerHelper;

importcom.itextpdf.tool.xml.exceptions.CssResolverException;

importcom.itextpdf.tool.xml.html.CssAppliers;

importcom.itextpdf.tool.xml.html.CssAppliersImpl;

importcom.itextpdf.tool.xml.html.Tags;

importcom.itextpdf.tool.xml.parser.XMLParser;

importcom.itextpdf.tool.xml.pipeline.css.CSSResolver;

importcom.itextpdf.tool.xml.pipeline.css.CssResolverPipeline;

importcom.itextpdf.tool.xml.pipeline.end.PdfWriterPipeline;

importcom.itextpdf.tool.xml.pipeline.html.HtmlPipeline;

importcom.itextpdf.tool.xml.pipeline.html.HtmlPipelineContext;

importjava.io.*;

/**

*pdf工具类

*/

publicclassPDFUtils{

/**

*把html转换成pdf,以字节数组的形式返回pdf文件

*@paramhtml

*@returnpdf字节数组

*@throwsIOException

*@throwsDocumentException

*@throwsCssResolverException

*/

publicstaticbyte[]html2pdf(Stringhtml)throwsIOException,DocumentException,CssResolverException{

Documentdocument=newDocument(PageSize.A4);

ByteArrayOutputStreamos=newByteArrayOutputStream();

PdfWriterwriter=PdfWriter.getInstance(document,os);

document.open();

XMLWorkerFontProviderfontProvider=newXMLWorkerFontProvider(){

@Override

publicFontgetFont(Stringfontname,Stringencoding,floatsize,intstyle){

returnsuper.getFont(fontname==null?"宋体":fontname,encoding,size,style);

}

};

fontProvider.addFontSubstitute("lowagie","garamond");

fontProvider.setUseUnicode(true);

//使用我们的字体提供器,并将其设置为unicode字体样式

CssApplierscssAppliers=newCssAppliersImpl(fontProvider);

HtmlPipelineContexthtmlContext=newHtmlPipelineContext(cssAppliers);

htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());

CSSResolvercssResolver=XMLWorkerHelper.getInstance().getDefaultCssResolver(true);

Pipeline<?>pipeline=newCssResolverPipeline(cssResolver,newHtmlPipeline(htmlContext,newPdfWriterPipeline(document,writer)));

XMLWorkerworker=newXMLWorker(pipeline,true);

XMLParserp=newXMLParser(worker);

p.parse(newInputStreamReader(newByteArrayInputStream(html.getBytes("gbk"))));

document.close();

returnos.toByteArray();

}

}

版权声明:本内容来源于网络,如有侵犯您的版权,请联系站长,本站收到您的信息后将及时处理。
上一篇:使用jsp调用javabean实现超简单网页计算器示例

 

下一篇:JSP实现远程文件下载保存到服务器指定目录中的方法

发布日期:2023/6/12
手机扫二维码直达本页
发布时间:12:13:43
点  击:14
录  入:壹家怡园
相关文章
Baidu
YiJiaCMS 7.3.8 build231228(MSSQL) 闽ICP备05000814号-1
本空间由腾讯云(轻量应用服务器)提供,Cloudflare提供加速防护
运行时间载入中.....