2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 通过PD4ML把html转pdf(包含显示页眉页脚 插入图片 显示页数)

通过PD4ML把html转pdf(包含显示页眉页脚 插入图片 显示页数)

时间:2019-05-11 17:04:35

相关推荐

通过PD4ML把html转pdf(包含显示页眉页脚 插入图片 显示页数)

如果对格式有更高对要求建议阅读这篇文章:/weixin_39530695/article/details/96638328

package nachuan;import java.awt.Insets;import java.io.ByteArrayOutputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.StringReader;import java.security.InvalidParameterException;import org.zefer.pd4ml.PD4Constants;import org.zefer.pd4ml.PD4ML;import org.zefer.pd4ml.PD4PageMark;/**** @author nachuan**/public class PdfUtils{/*** 通过html得到一个pdf* @param strReader String读取* @param filePath 生成文件的目标路径* @param ysignpicurl 第一个加页脚的图片地址* @param bsignpicurl 第二个加页脚图片地址* @param pagehead //页眉要加的文字* @param pagefoot //页脚要加的文字* @return*/public static byte[] generatePDF( StringReader strReader,String filePath,String ysignpicurl,String bsignpicurl,String pagehead,String pagefoot) { try {FileOutputStream fos = new FileOutputStream(filePath); ByteArrayOutputStream os = new ByteArrayOutputStream();PD4ML pd4ml = new PD4ML(); pd4ml.setPageSize(PD4Constants.A4); // A4竖向显示 pd4ml.changePageOrientation(PD4Constants.A4)横向显示pd4ml.useTTF("java:fonts", true); //fonts.jar的配置文件中的值,用于中文乱码pd4ml.setDefaultTTFs("SimSun","SimHei", "YouYuan" ); //设置默认的字体pd4ml.enableDebugInfo(); //页眉页脚开始----------如果不需要页面页脚的这段可以跳过---------------//页面边距 上下左右int topValue = 10;int leftValue = 10;int rightValue = 10;int bottomValue = 10;String unitsValue = "mm";int userSpaceWidth = 780;if (unitsValue.equals("mm")) {pd4ml.setPageInsetsMM(new Insets(topValue, leftValue, bottomValue,rightValue));} else {pd4ml.setPageInsets(new Insets(topValue, leftValue, bottomValue,rightValue));}//页面宽度pd4ml.setHtmlWidth(userSpaceWidth);StringBuilder sbhead = new StringBuilder();sbhead.append("<html><span style=\"font-family:SimSun; \">" + pagehead);sbhead.append("</span><hr/></html>");String pageHeader = sbhead.toString() ;StringBuilder sb = new StringBuilder();sb.append("<html><head> <meta charset=\"UTF-8\"> </head><body>");sb.append("<div ><span style=\"font-family:SimSun; font-size:28px ;font-weight: 500;\">a:</span> <img style=\"width: 90px; height: 40px;background-color:beige; \" src=\"" + ysignpicurl);sb.append("\" /> ");sb.append("<span style=\"font-family:SimSun; font-size:28px ; font-weight: 500;\">b:</span><img style=\"width: 90px; height: 40px;background-color:beige; \" src=\"" + bsignpicurl);sb.append("\" /></div> ");sb.append("<hr/><span>" + pagefoot);sb.append("</span >");sb.append("&nbsp;");sb.append("&nbsp;");sb.append("&nbsp;");// $ 当前页数$[total] 总页数 这个找了好长时间才找到sb.append("页数$/$[total]</body></html>");System.out.println("pagefooter:" + sb.toString());String pageFooter = sb.toString();if (null != pageHeader && !"".equals(pageHeader.trim())) {PD4PageMark headerMark = new PD4PageMark();headerMark.setAreaHeight(30); //页眉高度headerMark.setInitialPageNumber(1); //页眉初始化页面页数// headerMark.setPagesToSkip(0); //页眉跳过前几页if (pageHeader.toUpperCase().startsWith("<HTML>") && pageHeader.toUpperCase().endsWith("</HTML>")) {//need page header and is HTML formatheaderMark.setHtmlTemplate(pageHeader);} else {//need page header and is text formatheaderMark.setTitleTemplate(pageHeader);}pd4ml.setPageHeader(headerMark);}if (null != pageFooter && !"".equals(pageFooter.trim())) {PD4PageMark footerMark = new PD4PageMark();footerMark.setAreaHeight(70); //页脚高度footerMark.setInitialPageNumber(1);// footerMark.setPagesToSkip(1);footerMark.setPageNumberAlignment(1);if (pageFooter.toUpperCase().startsWith("<HTML>") && pageFooter.toUpperCase().endsWith("</HTML>")) {//need page header and is HTML formatfooterMark.setHtmlTemplate(pageFooter);} else {//need page header and is text formatfooterMark.setTitleAlignment(PD4PageMark.RIGHT_ALIGN);footerMark.setTitleTemplate(pageFooter);}footerMark.setPagesToSkip(0);pd4ml.setPageFooter(footerMark);}//=============页眉页脚结束 =========================================pd4ml.render(strReader, fos);return os.toByteArray();} catch (FileNotFoundException e) {e.printStackTrace();} catch (InvalidParameterException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return null;}public static void main(String[] args) {String pdfhtml = "<!DOCTYPE html> <html> <head> </head> <body > <div id=\"\">"+ "<div class=\"content\"><div style=\"margin:0 0 20px; text-align:center;\"></div><p>文/婉约</p> "+ "<p>“自在飞花轻似<a href=\"/\" target=\"_blank\">梦</a>,无边丝<a href=\"/sanwen/yu/\" target=\"_blank\">雨</a>细如愁。”<a href=\"/\" target=\"_blank\">文人</a>墨客的心里,总<a href=\"/sanwen/love/\" target=\"_blank\">爱</a>将万千思绪和绵绵丝雨联系在一起,剪不断,理还乱之时,雨,便成了<a href=\"/sanwen/xinqing/\" target=\"_blank\">情感</a>唯一的突破口。也让后来的我们,学会了借雨<a href=\"/sanwen/shuqing/\" target=\"_blank\">抒情</a>,借雨疗伤。</p> "+ "<p>或许,天生就是一个善感的人,极易被某种事物触动,从而使<a href=\"/\" target=\"_blank\">自己</a>陷入情绪的沼泽而不能自拔。那不期而遇的雨,便如同知己一般,贴近我的内心,总是在最需要倾诉的时候,陪伴于无声。</p> "+ "<p>已经记不清,从何时起喜欢上的雨,也不知从何时起,习惯了在这样一个又一个下着雨的<a href=\"/\" target=\"_blank\">夜</a>晚,一个人站在窗前,认真地听雨。</p>"+ "<p>雨夜听雨,除了享受无边的诗意以外,也是一个<a href=\"/\" target=\"_blank\">心灵</a>被洗涤与净化的过程。在渐深渐浓的<a href=\"/\" target=\"_blank\">夜色</a>里,在渐急渐密的雨声里,在渐进渐退的思绪里,倾听内心的声音,享受<a href=\"/\" target=\"_blank\">思念</a>的自由,这片刻的清宁,与<a href=\"/\" target=\"_blank\">孤独</a>同在,恰恰好。</p>"+ "<p>说到孤独,龙应台在写给《亲爱的安德烈》中这样说:那推推挤挤同唱同乐的群体情感,那无忧无虑无猜忌的同行深情,在人的一生中也只有<a href=\"/\" target=\"_blank\">少年</a>时期有。离开这段<a href=\"/\" target=\"_blank\">纯洁</a>而明亮的阶段,路其实可能愈走愈<a href=\"/\" target=\"_blank\">孤单</a>。<span style=\"position:relative;left:-100000px;\">( <a href=\"/\" target=\"_blank\">文章</a><a href=\"/\" target=\"_blank\">阅读</a>网: )</span></p> "+ "<p>确实如此,<a href=\"/\" target=\"_blank\">人生</a>就象是一条从宽阔的草原走进森林的路,在越走越狭窄的空间,在越走越严苛的现实面前,许多人开始自顾着自赶路,许多人在寻求余生的突破,于是,许多的<a href=\"/\" target=\"_blank\">故事</a>告一段落,许多的情义毁于一旦,在有意与无意之间,结伴同行的暖,渐变成过眼的云烟。</p>"+ "<p>渴望热烈又惧怕热烈,享受<a href=\"/\" target=\"_blank\">寂寞</a>又不甘寂寞,在焦虑和犹疑中彷徨,总也走不出心的囹圄,这是<a href=\"/shige/xiandai/\" target=\"_blank\">现代</a>人的通病。尤其是在孤独无依之时,更象是走在了单行道上,前不见古人,后不见来者,念天地之悠悠,独怆然而涕下。</p> "+ "<p>为了合群,我们不知浪费了多少<a href=\"/\" target=\"_blank\">时间</a>,为了同行,我们不知耗费了多少精力,殊不知,越长大越孤单,越到后来,越发现理想与现实的差距。真心诚意换不来地久天长,踮起脚尖,你依然无法触摸到天边的彩虹。</p> "+ "<p>有人说,人之所以<a href=\"/\" target=\"_blank\">痛苦</a>,是因为追求的太多,人之所以烦恼,是因为想要的太多,人之所以不<a href=\"/z/219426-kuaile\" target=\"_blank\">快乐</a>,是因为计较的太多。我不知道我的烦恼,到底属于哪一种,但总有些时光,是知音少,弦断有谁听的<a href=\"/sanwen/shanggan/\" target=\"_blank\">悲伤</a>,总有些时光,是沉思往事立残阳的黯然。</p> "+ "<p>生而为人,没有谁不孤单。或许,只有在寂寞中学会与自己相处,才能够完全地成为自己,只有在孤独中学会与<a href=\"/suibi/shenghuo/\" target=\"_blank\">生活</a>讲和,才能够真正地寻觅到<a href=\"/\" target=\"_blank\">幸福</a>,只有在遍尝苦痛之后,才能够知晓甜蜜的滋味。</p>"+ "<p>一盏清茶,听风数雨,这,何尝不是一种生活的方式。</p> "+ "<p>总爱在落雨的黄昏,为自己沏一杯茶,然后在清澈的茶汤里,放进十几粒采自石练山中的野菊米,让茶的清香,融进菊的芬芳。看一片片绿叶在沸水中舒展,看细小的菊米如一粒粒黄玉滚动其间,万千思绪,便随着水气氤氲,泊进袅袅的茶香里。</p> "+ "<p>茶,似乎是男人的专利,可如我这样的<a href=\"/\" target=\"_blank\">女子</a>,也爱茶。尤其是雨丝飘坠的<a href=\"/\" target=\"_blank\">夜晚</a>,一杯清茶在握,便觉分外的暖。通过掌心的温度,轻嗅茶与菊的芬芳,这醇香的味道,多像是他乡遇故知,在恰好的时间,有恰好的温度。</p>"+ "<p>这,让我很容易想到了一个词:<a href=\"/\" target=\"_blank\">依赖</a>,当习惯成为了自然,依赖便自在其中。人生,若能多一些如此依赖,少一些无<a href=\"/\" target=\"_blank\">情伤</a>害,一如这给予温暖的茶,这涤尽烦恼的雨,那么纵然时光暗淡,又有何惧。</p>"+ "<p>雨夜听雨,听雨的旋律在雨夜里奏响,在茶与菊的痴缠里,在袅袅升腾的水气里,一些事慢慢忆,一些人渐渐忘……</p>"+ "<p>微信公众号:wy</p><p>首发散文网:<a href=\"/sanwen/vjlvrkqf.html\">/sanwen/vjlvrkqf.html</a></p></div> "+ " </div> </body></html>";String pdfstart = pdfhtml.substring(0,pdfhtml.lastIndexOf("</p>"));String pdfend= pdfhtml.substring(pdfhtml.lastIndexOf("</p>"));//整个pdf内容pdfhtml = pdfstart + pdfend;pdfhtml = pdfhtml.replaceAll("sans-serif", "SimSun") ;int begin = pdfhtml.indexOf("<head>");//如果对于获取到没有<meta charset=\"utf-8\"/> 的页面需要添加,否则会乱码或者字体不受控制pdfhtml = pdfhtml.substring(begin)+"<meta charset=\"utf-8\"/>"+ pdfhtml.substring(begin);StringReader stringReader = new StringReader(pdfhtml);String path = "f:/targetfile.pdf";String headPageUrl = "/1204/0034034499213463_b.jpg";String footPageUrl = "/file/0117/26360097_152544240000_2.jpg";generatePDF(stringReader,path,headPageUrl,footPageUrl,"页眉","页脚");}}

demo下载地址:/download/weixin_39530695/10434460

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。