精华内容
下载资源
问答
  • html转PDF

    2021-01-09 19:20:55
    html转PDF

    1.引入依赖

    compile ('com.itextpdf:kernel:7.0.1')
    compile ('org.xhtmlrenderer:flying-saucer-pdf-itext5:9.1.20')
    compile ("org.apache.velocity:velocity:1.7")
    

    2.PdfUtil工具类

    	public static final void htmlToPdf(String htmlContent, String filePath) throws Exception {
    		new File(filePath).getParentFile().mkdirs();
    		
    		try (OutputStream fileStream = new FileOutputStream(filePath)) {
    			ITextRenderer textRenderer = new ITextRenderer();
    			ITextFontResolver fontResolver = textRenderer.getFontResolver();
    
    			String agreementBody = htmlContent;
    			//符号替换
    			agreementBody = agreementBody.replace(" ", " ");
    			agreementBody = agreementBody.replace("–", "–");
    			agreementBody = agreementBody.replace("—", "—");
    			agreementBody = agreementBody.replace("‘", "‘"); // left single quotation mark
    			agreementBody = agreementBody.replace("’", "’"); // right single quotation mark
    			agreementBody = agreementBody.replace("‚", "‚"); // single low-9 quotation mark
    			agreementBody = agreementBody.replace("“", "“"); // left double quotation mark
    			agreementBody = agreementBody.replace("”", "”"); // right double quotation mark
    			agreementBody = agreementBody.replace("„", "„"); // double low-9 quotation mark
    			agreementBody = agreementBody.replace("′", "′"); // minutes
    			agreementBody = agreementBody.replace("″", "″"); // seconds
    			agreementBody = agreementBody.replace("‹", "‹"); // single left angle quotation
    			agreementBody = agreementBody.replace("›", "›"); // single right angle quotation
    			agreementBody = agreementBody.replace("‾", "‾"); // overline
    
    			fontResolver.addFont("/fonts/simsun.ttc", com.itextpdf.kernel.pdf.PdfName.IdentityH.getValue(), false);
    			textRenderer.setDocumentFromString(agreementBody, null);
    			textRenderer.layout();
    			textRenderer.createPDF(fileStream, true);
    		} 
    	}
    

    3.使用Velocity模板引擎进行赋值

    public static void main(String[] args){
    	//创建Velocity对象
    	VelocityEngine velocityEngine = new VelocityEngine();
    	VelocityContext context = new VelocityContext();
    	context.put("msg", "我是哈哈哈哈");
    	StringWriter stringWriter = new StringWriter();
    	velocityEngine.mergeTemplate("存放在resources/template模板下的文件", "utf-8", context,stringWriter);
    	String filePath = "文件存放路径 + 文件名";
    	try {
                PdfUtils.htmlToPdf(stringWriter.toString(), destFilePath);
            } catch (Exception e) {
                log.error("", e);
            }
    }
    

    4.最后就可以在我们相应的文件目录下看到生成的PDF文件了

    展开全文
  • html PDF

    2013-11-22 09:48:23
    html PDF
  • html转pdf

    2021-02-23 09:56:00
    html转pdf,多网页拼接 1.由于公司业务需要,想要将一些网页进行组装封卷。原有的html2pdfjs 在网页过多或者404下会报错无法使用。 2.寻找后台转换工具 wkhtmltopdf 官网链接 根据需要下载自己需要的版本(windows,...

    html转pdf,多网页拼接

    1.由于公司业务需要,想要将一些网页进行组装封卷。原有的html2pdfjs 在网页过多或者404下会报错无法使用。
    2.寻找后台转换工具 wkhtmltopdf 官网链接
    根据需要下载自己需要的版本(windows,centos)
    3.将需要转换网页链接转为数组,利用URL。openStream判断网页是否可以访问,避免在转换过程中出现错误。
    4.利用IText包里pdf拼接方法对转换好的pdf进行拼接
    5.最后对生成临时文件进行删除(避免占用服务器存储空间)

    String htmltext="1.html,2.html";
    String[] paths=htmltext.split(",");
    		String pdfpaths="";
    		String tmppath=System.getProperty("java.io.tmpdir")+"\\pdfsave\\";
    		for (int i=0;i<paths.length;i++){
    			if(!"".equals(paths[i])&&paths[i]!=null){
    				String pdfpath=tmppath+ Utils.uuid()+".pdf";
    				if (!new File(tmppath).isDirectory()) {
    					boolean b=new File(tmppath).mkdirs();
    					System.out.println("新建上传临时文件夹");
    				}
    				if(checkUrlContent(paths[i])){
    					htmlToPdf(paths[i],pdfpath);
    					if(pdfpaths.equals("")){
    						pdfpaths=pdfpath;
    					}else {
    						pdfpaths=pdfpaths+","+pdfpath;
    					}
    				}else {
    					continue;
    				}
    
    			}
    		}
    		String[] all=pdfpaths.split(",");
    		String pdfpath=System.getProperty("java.io.tmpdir")+"\\pdfsave\\"+ Utils.uuid()+".pdf";
    		boolean a=mergePdfFiles(all,pdfpath);
    		if(a){
    			DownloadFileUtils.getExcel(pdfpath,"卷宗.pdf",response);
    			File f=new File(pdfpath);
    			f.delete();
    		}
    	}
    
    public static void htmlToPdf(String htmpath,String pdfpath){
    try{
    	Process process=Runtime.getRuntime().exec(getCommand(htmpath,pdfpath));
    	//调用cmd命令根据自己方式写 我写的不一定适用(getCommand)
    	process.waitFor();
    }catch(Exception e){
    	throw new RuntimeException;
    }
    }
    
    public static boolean	checkUrlContent(String urlString){
    		long lo=System.currentTimeMillis();
    		URL url;
    		try {
    			url=new URL(urlString);
    			InputStream in=url.openStream();
    			return true;
    		} catch (Exception e) {
    			return false;
    		}
    
    	}
    
    	public static boolean mergePdfFiles(String[] files, String newfile) {
    		boolean retValue = false;
    		Document document = null;
    		try {
    			PdfReader reader1 = new PdfReader(files[0]);
    			document = new Document(reader1.getPageSize(1));
    			PdfCopy copy = new PdfCopy(document, new FileOutputStream(newfile));
    			document.open();
    			for (int i = 0; i < files.length; i++) {
    				PdfReader reader = new PdfReader(files[i]);
    				int n = reader.getNumberOfPages();
    				for (int j = 1; j <= n; j++) {
    					document.newPage();
    					PdfImportedPage page = copy.getImportedPage(reader, j);
    					copy.addPage(page);
    				}
    				reader.close();
    			}
    			reader1.close();
    			copy.close();
    			retValue = true;
    		} catch (Exception e) {
    			System.out.println(e);
    		} finally {
    			System.out.println("执行结束");
    			document.close();
    			for (int i=0;i<files.length;i++){
    				File f=new File(files[i]);
    				f.delete();
    			}
    		}
    		return retValue;
    	}
    
    
    展开全文
  • HTML转PDF

    2019-08-24 14:36:26
    最近又用到HTML转PDF的功能,而且需要对PDF进行定制,需要页眉页脚的 经过调查最终还是感觉wkhtmltopdf比较好,中间还经历了使用Google浏览器直接转pdf的,但是google不支持定制,不能接受参数,以及又自带的内容,...

    最近又用到HTML转PDF的功能,而且需要对PDF进行定制,需要页眉页脚的
    经过调查最终还是感觉wkhtmltopdf比较好,中间还经历了使用Google浏览器直接转pdf的,但是google不支持定制,不能接受参数,以及又自带的内容,最后选择了wkhtmltopdf,功能比较强大,支持参数,中间又遇到svg代码导致转换不成功的问题,后来把svg代码单独提出来然后再进行引入解决了转换的问题,

    关于在程序里面调用wkhtmltopdf
    调用也很简单,就是通过程序调用cmd窗口进行执行命令,关键代码如下

     private static  String toPdfTool = "C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe";
    
        /**
         * html转pdf
         * @param srcPath html路径,可以是硬盘上的路径,也可以是网络路径
         * @param destPath pdf保存路径
         * @param isCard
         * @return 转换成功返回true
         */
        public static boolean convert(String srcPath, String destPath, boolean isCard){
            File file = new File(destPath);
            File parent = file.getParentFile();
            // 如果pdf保存路径不存在,则创建路径
            if (!parent.exists()) {
                parent.mkdirs();
            }
            StringBuilder cmd = new StringBuilder();
            if (System.getProperty("os.name").indexOf("Windows") == -1) {
                // 非windows 系统
                toPdfTool = "/usr/local/bin/wkhtmltopdf";
            }
    
            cmd.append(toPdfTool);
            cmd.append(" --margin-bottom 10mm");
            cmd.append(" --margin-left 0mm");
            cmd.append(" --margin-right 0mm");
            //cmd.append(" --margin-top 0mm");
            cmd.append(" --disable-smart-shrinking");
            //cmd.append(" -–print-media-type");
            //cmd.append("  --header-line");// 页眉下面的线
            //cmd.append(" --header-center 这里是页眉这里是页眉这里是页眉这里是页眉 ");//页眉中间内容
            //cmd.append(" --header-spacing 5 ");// (设置页眉和内容的距离,默认0)
            //设置在中心位置的页脚内容
    
          cmd.append(" --footer-center 答题纸页码:[topage]—[page] ");
    
          cmd.append(" --header-right 页码:[topage]—[page]  ");
            cmd.append(" --header-font-name  微软雅黑 ");
            cmd.append(" --footer-font-name  微软雅黑 ");
    		//cmd.append(" --footer-line");
    		// * 显示一条线在页脚内容上)
    		//cmd.append(" --footer-spacing 5 ");
    		// (设置页脚和内容的距离)
    		cmd.append(srcPath);
    		cmd.append(" ");
    		cmd.append(destPath);
    		boolean result = true;
    		try{
    			Process process = Runtime.getRuntime().exec(cmd.toString());
    			//记录进程缓存错误信息
    			final StringBuffer errorLog = new StringBuffer();
    			//处理InputStream的线程,可以共同的抽出来,然后线程使用线程池
    			HtmlToPdfInterceptor error = new HtmlToPdfInterceptor(process.getErrorStream());
    			HtmlToPdfInterceptor output = new HtmlToPdfInterceptor(process.getInputStream());
    			error.start();
    			output.start();
    			process.waitFor();
    		}catch(Exception e){
    			result = false;
    			e.printStackTrace();
    		}
            return result;
        }
    

    wkhtmltopdf的参数就不多做解释了,官网或者别的博客都可以看到

    还有一个获取执行进程的错误流的类

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    
    public class HtmlToPdfInterceptor extends Thread {
        private InputStream is;
    
        public HtmlToPdfInterceptor(InputStream is){
            this.is = is;
    
        }
        //获取执行进程的错误流
    
        @Override
        public void run(){
            try{
                InputStreamReader isr = new InputStreamReader(is, "utf-8");
                BufferedReader br = new BufferedReader(isr);
                String line = null;
                while ((line = br.readLine()) != null) {
                    System.out.println(line.toString()); //输出内容
                }
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
    
    
    展开全文
  • HTMl转PDF

    2019-09-16 16:55:11
    背景 公司需要将官网上的文章都打包成pdf,由于文章是通过后台富文本生成的,内容中带有HTML... HTML转PDF调研 1. iText iText是非常著名的快速产生PDF文件的Java类库 优点: 1.非常成熟的Java类库,相关帮助文档...

    背景

    公司需要将官网上的文章都打包成pdf,由于文章是通过后台富文本生成的,内容中带有HTML标签。所以只能够将内容放到html中,然后再下载。

    HTML转PDF调研

    1. iText

    iText是非常著名的快速产生PDF文件的Java类库

    • 优点:
      1.非常成熟的Java类库,相关帮助文档很多,上手快。
      2.功能全面,使用方便,可以通过代码直接生成POF文档。

    • 缺点:
      1.虽然支持html转pdf,但有点HTML标签,css属性不支持,转化结果可能和原文档不一致。
      2.不支持外部css文件
      3.与亚洲语言支持包itext-asian.jar配合不是很好,容易中文乱码问题

    2.Flying Saucer

    Flying Saucer 用纯 Java 编写的,可以将 XML/XHTML 应用 CSS2.1 样式渲染为 PDF、图片。此库基本上能实现 CSS 2.1 的整体性, 并且完全符合 W3C 规范。

    • 优点:
      1.支持外部css文件
      2.可以直接通过输入页面地址来生成PDF

    • 缺点:
      1.很多css都支持得不好,哪些样式不支持还要自己慢慢试,相当痛苦的过程。
      2.大写标签不识别!比如DIV TD 等等统统不识别!说到底就是大小写敏感。
      3.反正就是各种小细节需要把控,不太熟悉的话,十分容易出bug。

    3.wkhtmltox

    wkhtmltox是一个工具,类似饭桶(phantomjs)的工具

    • 优点:
      1.可以直接通过输入页面地址来生成PDF
      2.对HTML和CSS支持非常好,支持外部css
      3.使用简单,操作方便。

    • 缺点: 没有发现太明显的硬伤,好像下载的页面非常大时,会导致生成失败。

    wkhtmltox

    为什么要介绍上面这些呢?

    下载wkhtmltox

    官网下载地址: https://wkhtmltopdf.org/downloads.html

    linux上安装并使用

    1. 上传wkhtmltox到服务器

      rz

    2. 解压、安装(tar -Jxf)

      解压xz文件: xz -d wkhtmltox-0.12.4_linux-generic-amd64.tar.xz

      解压安装tar文件: tar -xvf wkhtmltox-0.12.4_linux-generic-amd64.tar

    3. 将程序拷贝到/usr/bin/目录中,这样可以任意目录执行。

      cp wkhtmltox/bin/wkhtmltopdf /usr/bin/

    4. 使用Wkhtmltopdf

      wkhtmltopdf http://www.baidu.com /data/tmp/demo.pdf

    5.如果生成pdf失败,可能是缺少相关的包,进入usr/lib中根据错误信息安装对应的包

    cd /usr/lib  
    [daxiang[@localhost](https://my.oschina.net/u/570656) lib]$ sudo yum install libXrender*  
    [daxiang[@localhost](https://my.oschina.net/u/570656) lib]$ sudo yum install libXext   
    

    JAVA调用Wkhtmltopdf

    public class HtmlToPdfUtil {
    
    	public static String getCommand(String htmlUrl, String filePath) {
    		StringBuilder command = new StringBuilder();
            String system = System.getProperty("os.name");
    		if (system.contains("Windows")) {
    			command.append("D:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe ");
    		} else if (system.contains("Linux")) {
    			command.append("wkhtmltopdf ");
    		}
            //		command.append("--encoding utf-8 "); //设置文字编码为utf-8
            //		command.append("--header-center 易观 "); //在页眉中心显示易观
            //		command.append("--header-line "); //显示一条线在页眉下
            //		command.append("--margin-left 5cm "); //页面左移5cm
            //		command.append("--footer-right [page]/[topage] "); //页尾右下角显示页数
            command.append(htmlUrl).append(" ").append(filePath);
    		return command.toString();
    	}
    
    	public static void main(String[] args) throws Exception {
    		String command = getCommand("https://www.baidu.com/", "e:/demo3.pdf");
    		Process process = Runtime.getRuntime().exec(command);
    		process.waitFor(); // 这个调用比较关键,就是等当前命令执行完成后再往下执行
    		System.out.println("执行完成");
    	}
    }
    

    wkhtmltopdf 中文参数

    中文参数详解 :http://blog.csdn.net/zhangkezhi_471885889/article/details/52184744

    使用方式:

    linux:wkhtmltopdf [OPTIONS]… [More input files] 
    windows:wkhtmltopdf.exe [OPTIONS]… [More input files]   
    

    案例:

      wkhtmltopdf --footer-right [page]/[topage] http://www.baidu.com /data/baidu.pdf 
      
    wkhtmltopdf --header-center 报表 --outline --header-line --margin-top 2cm  http://www.baidu.com /data/baidu.pdf  
    

    背景1解决方式

    1.建立模板页面: http://localhost:8080/templateView

    2.利用wkhtmltopdf生成PDF

    注意事项

    1.只有通过模板引擎(velocity、Thymeleaf)渲染的web页面才能生成PDF

    2.由于命令是通过空格号来识别的,如果生成的PDF文件名中包含空格,会导致生成失败。

    知识延伸 (Thymeleaf)

    springboot推荐使用Thymeleaf做为模板引擎,以后springboot项目中要用到模板引擎,建议大家都能统一使用Thymeleaf。

    springboot配置Thymeleaf:http://blog.didispace.com/springbootweb/
    Thymeleaf语法: http://fanlychie.github.io/post/thymeleaf.html#9-3-2-text

    转载于:https://my.oschina.net/jiangbang/blog/3078170

    展开全文
  • html 转pdf

    2018-11-06 16:03:57
    select html to pdf 转换,超级好用,非常简单。demo已经调试通过
  • html转换pdf

    2020-03-17 10:53:30
    html2pdf 是itext提供的网页转PDF包 老版本的 itextpdf 对html标签转换支持太差,现在升级到最新版本 1,使用版本maven 1 2 3 4 5  <dependency> <groupId>...
  • html pdf

    2019-10-10 10:17:54
    1 /**html转换成PDF */ 2 function exportPdf() { 3 //$('#htmlToPdf').css('padding', '100px 150px'); ...
  • HTML转换pdf

    2017-02-28 10:55:03
    最近有html转换成pdf的需求,各种google,你懂的。 由于html样式很丰富,itext等都试过效果不好,最后找到一个叫flying-saucer-pdf的插件,实验果然效果不错,记录备用: 1、将html保存freemaker模板,满足数据的...
  • HTML转pdf

    2016-04-14 17:05:44
    安装pdf虚拟打印机 ① 打开浏览器输入网址访问 ② 同时按下Ctrl + P,出现如图所示   ③点击更改目标打印机,选择另存为pdf,并点击保存 至此,HTML转成了pdf格式

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,523
精华内容 3,009
关键字:

html转pdf