精华内容
下载资源
问答
  • JAVA实现PDF转HTML

    2020-10-29 16:53:08
    该包包含后端代码,转换控件,测试文件,正式项目应用表现正常,注意不能转换水印、印章这类特殊类型,且行且珍惜。
  • java实现html转pdf,包含后端代码,html测试页面,pom依赖,jar包,如页面过于复杂需调整页面,有些样式itextpdf不支持,请寻找其它样式替换。
  • java后端实现html转pdf的工具类,pd4ml最新3100pro支持中文版本的jar包,无水印的,包括pd4ml.jar、fonts.jar和sc_css2.jar
  • 1.使用java代码调用压缩包内wkhtmltopdf.exe。 2.写入对应url及其其他参数 3.调用代码即可生成,亲测有效好用 4.内附示例代码
  • java pdf转html

    2019-08-12 01:48:58
    NULL 博文链接:https://wu1g119.iteye.com/blog/2281017
  • html文件转换成pdf文件,并在指定位置添加印章图片
  • 支持各种复杂样式的office文档转pdfhtml实现;实例提供了核心实现方法以及相关依赖包,有问题可以留言交流;
  • 而目前开源的组件中,Itext的确是一个First Choice,如果各位单纯是做把图片转成PDF或者自己写了Velocity或者FreeMarker模板生成了HTML是非常推荐直接用Itext来进行的。而如果,大家像我这样已经有前人写好了HTML...
  • 通过itext 把html转成pdf文档,只需要把html传给itext,就会直接转成pdf,亲自试用了一下很方便,前提html的格式一定要严格,
  • java 实现word 转PDF

    2018-04-18 16:13:59
    全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换 ,word转pdf已做测试很好用!
  • java 开发 html转pdf功能实现
  • JAVA实现PDF转HTML文档

    千次阅读 2020-06-18 23:28:09
    本文是基于PDF文档PNG图片,然后进行图片拼接,拼接后的图片转为base64字符串,然后拼接html文档写入html文件实现PDF文档转HTML文档。

    本文是基于PDF文档转PNG图片,然后进行图片拼接,拼接后的图片转为base64字符串,然后拼接html文档写入html文件实现PDF文档转HTML文档。

    引入Maven依赖

    <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.12</version>
        </dependency>
    

    工具实现类

    package com.frame.utils;
    
    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.apache.pdfbox.rendering.PDFRenderer;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    
    import javax.imageio.ImageIO;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.*;
    
    /**
     * PDF文档转HTML文档
     * @author LXW
     * @date 2020/6/17 16:45
     */
    public class PdfConvertHtmlUtil {
        /**
         * 日志对象
         */
        private static Logger logger = LoggerFactory.getLogger(PdfConvertHtmlUtil.class);
    
        /**
         * PDF文档流转Png
         * @param pdfFileInputStream
         * @return BufferedImage
         */
        public static BufferedImage pdfStreamToPng(InputStream pdfFileInputStream){
            PDDocument doc = null;
            PDFRenderer renderer = null;
            try {
                doc = PDDocument.load(pdfFileInputStream);
                renderer = new PDFRenderer(doc);
                int pageCount = doc.getNumberOfPages();
                BufferedImage image = null;
                for (int i = 0; i < pageCount; i++) {
                    if (image != null) {
                        image = combineBufferedImages(image, renderer.renderImageWithDPI(i, 144));
                    }
    
                    if (i == 0) {
                        image = renderer.renderImageWithDPI(i, 144); // Windows native DPI
                    }
                    // BufferedImage srcImage = resize(image, 240, 240);//产生缩略图
    
                }
                return combineBufferedImages(image);
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    if(doc != null){doc.close();}
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }
    
        /**
         *BufferedImage拼接处理,添加分割线
         * @param images
         * @return BufferedImage
         */
        public static BufferedImage combineBufferedImages(BufferedImage... images) {
            int height = 0;
            int width = 0;
            for (BufferedImage image : images) {
    			//height += Math.max(height, image.getHeight());
                height += image.getHeight();
                width = image.getWidth();
            }
            BufferedImage combo = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
            Graphics2D g2 = combo.createGraphics();
            int x = 0;
            int y = 0;
            for (BufferedImage image : images) {
    			//int y = (height - image.getHeight()) / 2;
                g2.setStroke(new BasicStroke(2.0f));// 线条粗细
                g2.setColor(new Color(193, 193, 193));// 线条颜色
                g2.drawLine(x, y, width, y);// 线条起点及终点位置
    
                g2.drawImage(image, x, y, null);
    			//x += image.getWidth();
                y += image.getHeight();
    
            }
            return combo;
        }
        /**
         * 通过Base64创建HTML文件并输出html文件
         * @param base64
         * @param htmlPath html保存路径
         */
        public static void createHtmlByBase64(String base64,String htmlPath) {
            StringBuilder stringHtml = new StringBuilder();
            PrintStream printStream = null;
            try {
                // 打开文件
                printStream = new PrintStream(new FileOutputStream(htmlPath));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            // 输入HTML文件内容
            stringHtml.append("<html><head>");
            stringHtml.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
            stringHtml.append("<title></title>");
            stringHtml.append("</head>");
            stringHtml.append(
                    "<body style=\"\r\n" + "    text-align: center;\r\n" + "    background-color: #C1C1C1;\r\n" + "\">");
            stringHtml.append("<img src=\"data:image/png;base64," + base64 + "\" />");
            stringHtml.append("<a name=\"head\" style=\"position:absolute;top:0px;\"></a>");
    		//添加锚点用于返回首页
            stringHtml.append("<a style=\"position:fixed;bottom:10px;right:10px\" href=\"#head\">回到首页</a>");
            stringHtml.append("</body></html>");
            try {
                // 将HTML文件内容写入文件中
                printStream.println(stringHtml.toString());
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                if(printStream != null){printStream.close();}
            }
    
        }
    
        /**
         * bufferedImage 转为 base64编码
         * @param bufferedImage
         * @return
         */
        public static String bufferedImageToBase64(BufferedImage bufferedImage) {
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            String png_base64 = "";
            try {
                ImageIO.write(bufferedImage, "png", byteArrayOutputStream);// 写入流中
                byte[] bytes = byteArrayOutputStream.toByteArray();// 转换成字节
                BASE64Encoder encoder = new BASE64Encoder();
                // 转换成base64串 删除 \r\n
                png_base64 = encoder.encodeBuffer(bytes).trim()
                        .replaceAll("\n", "")
                        .replaceAll("\r", "");
            } catch (IOException e) {
                e.printStackTrace();
            }
            return png_base64;
        }
    
    
    }
    
    

    测试Demo

    public static void main(String[] args) {
            File file = new File("F:\\111\\Files\\MySQL查询语句大全集锦(经典珍藏).pdf");
            String htmlPath = "F:\\111\\Files\\MySQL查询语句大全集锦(经典珍藏).html";
            InputStream inputStream = null;
            BufferedImage bufferedImage = null;
            try {
                inputStream = new FileInputStream(file);
                bufferedImage = pdfStreamToPng(inputStream);
                String base64_png = bufferedImageToBase64(bufferedImage);
                createHtmlByBase64(base64_png,htmlPath);
    
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }finally {
                try {
                    if(inputStream != null){inputStream.close();}
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    

    最终结果

    转换后文件

    转换后的文件

    转换后的文件内容

    文件内容

    文件预览效果

    预览效果

    展开全文
  • Java实现HTML文件转PDF文件

    热门讨论 2013-11-22 08:45:16
    实现思路: 1、通过URL获取当前HMTL页面的内容: URL urls = new URL(url);...4、把设置发了的HTML文件转化成PDF文件 //把HTML文件转化成PDF文件 htmlToPdf2(urlsource, fileName); 下载下来可以直接使用
  • 主要介绍了Java实现Html转Pdf的方法,实例分析了java基于ITextRenderer类操作页面及系统自带字体生成pdf文件的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 实测真实可用,采用 core-renderer.jar ,iText-2.0.8.jar。开发环境为eclipse,用的话,可以修改下代码中的几个路径
  • Java 实现 Html pdf

    万次阅读 2019-01-12 23:38:47
    本博客主要演示使用 itextpdf-5.4.3.jar 和 xmlworker-5.4.3.jar 把 Html 转换 pdf 文件。但是效果还不如直接用内容生成的 pdf 。 本 Demo 涉及了 html、css、js,不过 js 并不起作用 ,所以涉及 js 赋值的 html ...

    本博客主要演示使用 itextpdf-5.4.3.jar 和 xmlworker-5.4.3.jar 把 Html 转换成 pdf 文件。但是效果还不如直接用内容生成的 pdf 。戳我拿 jar 包
    本 Demo 涉及了 html、css、js,不过 js 并不起作用 ,所以涉及 js 赋值的 html 文件还是别转换,直接去生成吧。可参阅上篇博客 Java 生成 pdf ;另外,css 文件似乎无法很好的转换。
    先看一下网页效果和 pdf 文件效果:
    网页效果pdf 文件效果

    1. 第一个表的软件名称和公司名称是空的,网页是通过 js 文件赋值,所以转换时无效。
    2. 表格整体没有居中,网页是通过 margin 实现的,但 pdf 没有显示效果。
    3. css 设置的 line-height,网页是正常显示效果的。在 pdf 文件中,表格前两行可能因为内容是单行的,没有显示行高效果。在公司简介一栏,内容有两行是,显示了行高效果,但是,这也太丑了吧。

    虽然通过直接转换可以更简单地生成 pdf 文件,但是效果有待商榷。我还是推荐直接把内容直接生成 pdf 文件,虽然代码多了点,排版效果却好了很多

    代码如下:
    html 代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8"></meta>
    <title>Insert title here</title>
    <link rel="stylesheet" type="text/css" href="html2pdf.css"></link>
    <script type="text/javascript" src="html2pdf.js"></script>
    </head>
    <body>
    	<h3>PDF测试</h3>
    	<table>
    		<tr>
    			<td class="tab_attr">软件名称</td><td class="tab_content" id="itemName">&nbsp;</td>
    			<td class="tab_attr">公司名称</td><td class="tab_content" id="unitName">&nbsp;</td>
    		</tr>
    		<tr>
    			<td class="tab_attr">公司地址</td><td class="tab_content">北京海淀</td>
    			<td class="tab_attr">联系方式</td><td class="tab_content">123456789</td>
    		</tr>
    		<tr>
    			<td class="tab_attr">公司简介</td>
    			<td colspan="3">闹大目的是发手动阀哦士大夫爱的发声难道额我发 奥斯丁你发送的你发送的发阿奎那的方法, 啊的反思的。</td>
    		</tr>
    	</table>
    	<br></br>
    	<table>
    		<tr>
    			<td class="tab_attr">软件名称</td><td class="tab_content">某某管理系统</td>
    			<td class="tab_attr">公司名称</td><td class="tab_content">北京海淀科技有限公司</td>
    		</tr>
    		<tr>
    			<td class="tab_attr">公司地址</td><td class="tab_content">北京海淀</td>
    			<td class="tab_attr">联系方式</td><td class="tab_content">123456789</td>
    		</tr>
    		<tr>
    			<td class="tab_attr">公司简介</td>
    			<td colspan="3">闹大目的是发手动阀哦士大夫爱的发声难道额我发 奥斯丁你发送的你发送的发阿奎那的方法, 啊的反思的。</td>
    		</tr>
    	</table>
    	<br></br>
    	<table>
    		<tr>
    			<td class="tab_attr">软件名称</td><td class="tab_content">某某管理系统</td>
    			<td class="tab_attr">公司名称</td><td class="tab_content">北京海淀科技有限公司</td>
    		</tr>
    		<tr>
    			<td class="tab_attr">公司地址</td><td class="tab_content">北京海淀</td>
    			<td class="tab_attr">联系方式</td><td class="tab_content">123456789</td>
    		</tr>
    		<tr>
    			<td class="tab_attr">公司简介</td>
    			<td colspan="3">闹大目的是发手动阀哦士大夫爱的发声难道额我发 奥斯丁你发送的你发送的发阿奎那的方法, 啊的反思的。</td>
    		</tr>
    	</table>
    	
    </body>
    </html>
    

    ps:标签务必加上结束符,例如上面的 </meta> </link> </br>
    — – jsp 文件页跟 html 文件一样可以转换。
    css 代码:

    h3{
    	text-align: center;
    }
    
    table, table tr td { border:1px solid #999; }
    table { border-collapse: collapse; padding:2px; width:1200px; margin-left: 70px;}
    tr { line-height:50px;}
    
    .tab_attr{
    	width: 20%;
    	text-align: right;
    }
    .tab_content{
    	width: 30%;
    }
    

    js 代码

    window.function(){
    	document.getElementById("itemName").innerHTML="js软件名称";
    	document.getElementById("unitName").innerHTML="js公司名称";
    }
    

    Java 代码

    package html2PDF;
    
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    
    import com.itextpdf.text.Document;
    import com.itextpdf.text.Font;
    import com.itextpdf.text.Image;
    import com.itextpdf.text.PageSize;
    import com.itextpdf.text.Paragraph;
    import com.itextpdf.text.Phrase;
    import com.itextpdf.text.pdf.BaseFont;
    import com.itextpdf.text.pdf.PdfWriter;
    import com.itextpdf.tool.xml.XMLWorkerHelper;
    
    public class Html2PDF {
    	private static final String PDF_PATH = "E:\\testFile\\html2PDF.pdf";
    	private static final String HTML_PATH = "E:\\testFile\\pdfTest.jsp";
    	private static final String CSS_PATH = "E:\\testFile\\html2pdf.css";
    
    	public static void main(String[] args) throws Exception {
    //		BaseFont baseFont = BaseFont.createFont("E:\\testFile\\msyh.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
    		// 文字如果要加粗,修改第三个参数
    //		Font msya = new Font(baseFont, 12, Font.NORMAL);
    		
    		Document document = new Document(PageSize.A4, 10, 10, 10, 10);//左右上下的margin
    		document.setMargins(0, 0, 0, 0);
    		PdfWriter pdfwriter;
    		pdfwriter = PdfWriter.getInstance(document, new FileOutputStream(PDF_PATH));
    		document.open();
    		XMLWorkerHelper wh = XMLWorkerHelper.getInstance();
    		InputStream cssInput = new FileInputStream(CSS_PATH);
    		wh.parseXHtml(pdfwriter, document, new FileInputStream(HTML_PATH), cssInput, new DefineFontProvider());
    
    /*		// 读取完 html 的内容后,可以继续往 pdf 文件中写其他内容
    		// 读取一个图片
    		Image image = Image.getInstance("E:\\testFile\\dream.jpg");
    		
    		image.scalePercent(50);
    		image.setAlignment(Image.ALIGN_RIGHT);
    		// 设置图片的绝对位置
    		// image.setAbsolutePosition(0, 0);
    		// image.scaleAbsolute(500, 400);
    		// 插入一个图片
    		document.add(image);
    		document.add(new Phrase("短语标题", msya));
    //		document.add(new Paragraph("\n"));
    		document.add(new Paragraph("段落内容", msya));
    */		
    		document.close();
    	
    		System.out.println("succeed");
    	}
    }
    

    DefineFontProvider.java

    package html2PDF;
    
    import com.itextpdf.text.BaseColor;
    import com.itextpdf.text.Font;
    import com.itextpdf.text.pdf.BaseFont;
    import com.itextpdf.tool.xml.XMLWorkerFontProvider;
    
    public class DefineFontProvider extends XMLWorkerFontProvider {
    	@Override
    	public Font getFont(final String fontname, final String encoding, final boolean embedded, final float size,
    			final int style, final BaseColor color) {
    		BaseFont bf = null;
    		try {
    			bf = BaseFont.createFont("E:\\testFile\\msyh.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		Font font = new Font(bf, size, style, color);
    		font.setColor(color);
    		return font;
    	}
    }
    
    展开全文
  • 史上最简单的JAVA实现PDF转HTML

    千次阅读 2019-07-30 10:44:27
    实现PDF转HTML有多种方式, 今天记录下以图片的形式,转化为HTML。 【原理分析】利用pdfbox解析pdf文档,按照分页来拆分,以每一页转化为一个图片,依次类推,将每一个图片拼接到HTML中,则实现了PDF转HTML,而且...

    实现PDF转HTML有多种方式,

    今天记录下以图片的形式,转化为HTML。

    【原理分析】利用pdfbox解析pdf文档,按照分页来拆分,以每一页转化为一个图片,依次类推,将每一个图片拼接到HTML中,则实现了PDF转HTML,而且可以保留原pdf的文档格式。

    【maven依赖】

            <dependency>
    			<groupId>org.apache.pdfbox</groupId>
    			<artifactId>pdfbox</artifactId>
    			<version>2.0.4</version>
    		</dependency>
    
    		<dependency>
    			<groupId>org.apache.pdfbox</groupId>
    			<artifactId>pdfbox-tools</artifactId>
    			<version>2.0.4</version>
    		</dependency>
    
    		<dependency>
    			<groupId>org.apache.pdfbox</groupId>
    			<artifactId>fontbox</artifactId>
    			<version>2.0.4</version>
    		</dependency>
    
    import org.apache.pdfbox.pdmodel.PDDocument;
    import org.apache.pdfbox.rendering.PDFRenderer;
    
    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
    
    public class Pdf2HTML {
    
        public static void PdfToImage(String pdfurl) {
            StringBuffer buffer = new StringBuffer();
            FileOutputStream fos;
            PDDocument document;
            File pdfFile;
            int size;
            BufferedImage image;
            FileOutputStream out;
            Long randStr = 0l;
            //PDF转换成HTML保存的文件夹
            String path = "E:\\Pdf2HTML";
            File htmlsDir = new File(path);
            if (!htmlsDir.exists()) {
                htmlsDir.mkdirs();
            }
            File htmlDir = new File(path + "/");
            if (!htmlDir.exists()) {
                htmlDir.mkdirs();
            }
            try {
                //遍历处理pdf附件
                randStr = System.currentTimeMillis();
                buffer.append("<!doctype html>\r\n");
                buffer.append("<head>\r\n");
                buffer.append("<meta charset=\"UTF-8\">\r\n");
                buffer.append("</head>\r\n");
                buffer.append("<body style=\"background-color:gray;\">\r\n");
                buffer.append("<style>\r\n");
                buffer.append("img {background-color:#fff; text-align:center; width:100%; max-width:100%;margin-top:6px;}\r\n");
                buffer.append("</style>\r\n");
                document = new PDDocument();
                //pdf附件
                pdfFile = new File(pdfurl);
                document = PDDocument.load(pdfFile, (String) null);
                size = document.getNumberOfPages();
                Long start = System.currentTimeMillis(), end = null;
                System.out.println("===>pdf : " + pdfFile.getName() + " , size : " + size);
                PDFRenderer reader = new PDFRenderer(document);
                for (int i = 0; i < size; i++) {
                    //image = newPDFRenderer(document).renderImageWithDPI(i,130,ImageType.RGB);
                    image = reader.renderImage(i, 1.5f);
                    //生成图片,保存位置
                    out = new FileOutputStream(path + "/" + "image" + "_" + i + ".jpg");
                    ImageIO.write(image, "png", out); //使用png的清晰度
                    //将图片路径追加到网页文件里
                    buffer.append("<img src=\"" + path + "/" + "image" + "_" + i + ".jpg\"/>\r\n");
                    image = null;
                    out.flush();
                    out.close();
                }
                reader = null;
                document.close();
                buffer.append("</body>\r\n");
                buffer.append("</html>");
                end = System.currentTimeMillis() - start;
                System.out.println("===> Reading pdf times: " + (end / 1000));
                start = end = null;
                //生成网页文件
                fos = new FileOutputStream(path + randStr + ".html");
                System.out.println(path + randStr + ".html");
                fos.write(buffer.toString().getBytes());
                fos.flush();
                fos.close();
                buffer.setLength(0);
    
    
            } catch (Exception e) {
                System.out.println("===>Reader parse pdf to jpg error : " + e.getMessage());
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
    
            String pdf = "E:\\Pdf2HTML\\java开发工程师.pdf";
    
            //传入PDF地址
            PdfToImage(pdf);
        }
    }

     

     

     

     

    展开全文
  • wkhtmltopdf-0.9.9 在linux环境下不依赖高版本的glibc,对glibc升级比较困难的小伙伴很实用
  • java实现html转pdf

    2019-10-16 10:01:51
    java实现html网页转pdf,如果需求只是将一些简单的html元素转成pdf,那么使用 itext 或者FlyingSaucer 就可以搞定,但是真正的网页url类型的html涉及到的 html 语法和 css语法实在是太复杂,itext 和FlyingSaucer ...

    java实现将html网页转pdf,如果需求只是将一些简单的html元素转成pdf,那么使用 itext 或者 FlyingSaucer 就可以搞定,但是真正的网页url类型的html涉及到的 html 语法和 css语法实在是太复杂,itext 和 FlyingSaucer 根本没法搞定。

    最后发现使用 phantomjs 可以完美将html转换为pdf,大概思路如下:

    一、下载phantomjs

    https://phantomjs.org/download.html  根据操作系统下载对应的phantomjs版本

    二、编写 html2pdf.js

    内容如下:

    var page = require('webpage').create();
    var system = require('system');
    
    // 读取命令行参数,也就是js文件路径。
    if (system.args.length === 1) {
      console.log('Usage: phantomjs html2pdf.js <html URL> <pdf_width> <pdf_height> <pdfPath>');
      //这行代码很重要。凡是结束必须调用。否则phantomjs不会停止
      phantom.exit();
    }
    page.settings.loadImages = true;  //加载图片
    page.settings.resourceTimeout = 30000;//超过30秒放弃加载
    
    var address = system.args[1];
    // server in windows: width + 'mm', linux: (width * 3.7794).toFixed(1) + 'px'
    // 下面是从命令行中获取 pdf的高度、宽度 和 pdf文件的路径
    var width2 = system.args[2];
    var height2 = system.args[3];
    var pdfPath = system.args[4];
    console.log(width2);
    console.log(height2);
    // 如果对pdf尺寸没有特殊要求也可以将宽度和高度写死
    page.paperSize = { width: width2,height:height2};
    
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('Unable to load the address!');
            phantom.exit(1);
        } else {
            window.setTimeout(function () {
                console.log("begin...");
                page.render(pdfPath);
                console.log(pdfPath);
                phantom.exit(); // 一定要调用这个方法
                console.log("end...");
            }, 1000);
        }
    });

    三、执行命令行语句验证pdf生成的效果

    /test/phantomjs /test/html2pdf.js http://www.baidu.com 1000px 1000px /test/a.pdf

    执行这条命令,检查生成pdf是否符合要求。如果不行则尝试调整参数或者脚本

    四、java中调用命令

    public static void html2Pdf(String phantomjs, String url, String html2pdfjs
    		, Integer width, Integer height, String pdfPath) {
    	InputStream is = null;
    	try {
    		System.out.println(url);
    		File pdfFile = new File(pdfPath);
    		File parentFile = pdfFile.getParentFile();
    		if(!parentFile.exists()) {
    			parentFile.mkdirs();
    		}
    		String os = System.getProperty("os.name").toLowerCase();
    		String w = null, h = null;
    		if(os.contains("linux")) {
    			w = String.format("%.2f", width * 3.7794) + "px";
    			h = String.format("%.2f", height * 3.7794) + "px";
    		} else {
    			w = width + "mm";
    			h = height + "mm";
    		}
    		System.out.println(os + "===" + w + "=======" + h);
    		//执行phantomjs 生成js
    		Runtime rt = Runtime.getRuntime();
    		String cmd = phantomjs + " " + html2pdfjs + " " + url + " " + w + " " + h + " " + pdfPath;
    		System.out.println("cmd===" + cmd);
    		Process p = rt.exec(cmd);
    		is = p.getInputStream();
    		BufferedReader br = new BufferedReader(new InputStreamReader(is));
    		StringBuffer sbf = new StringBuffer();
    		String tmp = "";
    		while ((tmp = br.readLine()) != null) {
    			sbf.append(tmp);
    		}
    		String resultstr = sbf.toString();
    		System.out.println(resultstr);
    		p.waitFor(); // 等待运行结束
    	} catch (Exception e) {
    		e.printStackTrace();
    	} finally {
    		if(is != null) {
    			try {
    				is.close();
    			} catch (Exception e) {
    			}
    		}
    	}
    	return null;
    }

    width 和 height 两个参数在windos环境和在linux环境下传给phantomjs达到的效果竟然不一样,所以上面的程序专门做了不同的处理。

    五、踩过的坑

    1、linux下java调用命令及参数中如果带了 & 符号,会导致命令执行失败,同时又找不到原因。因为 & 符号在linux命令下有特殊的含义,因此 网页的url中如果带了&符号(比如url中的&是传递参数的)则pdf会生成不正确

    2、如果尝试将带&的网页url 用引号包起来,在linux命令行下可以顺利执行,但是java的Runtime.exec()去执行命令还是不能正确生成pdf文件,好像是因为Runtime.exec()对参数中的引号进行特殊的处理。

    因此,如果能自己控制网页url,则需要将网页url中的&替换掉,改成其他方式传参。如果是别人的网页url,在linux似乎没有好的办法解决。

    六、参考资料

    phantomjs 参考资料如下:
    https://phantomjs.org/download.html
    https://www.npmjs.com/package/phantom-html2pdf
    https://phantomjs.org/api/webpage/property/paper-size.html

    本文内容到此结束,更多内容可关注公众号和个人微信号:

     

    展开全文
  • 本文主要介绍了Java实现Word/Pdf/TXT转html的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了java实现在线预览--poi实现word、excel、ppt转html的方法,本文需要引入poi的jar包给大家介绍的非常详细,需要的朋友可以参考下
  • PDF技术(四)-Java实现Html转PDF文件

    万次阅读 多人点赞 2018-10-10 16:56:12
    html转换为pdf的关键技术是如何处理网页中复杂的css样式、以及中文乱码处理。 各实现对比表 于Windows平台进行测试:   基于IText 基于FlyingSaucer 基于WKHtmlToPdf ...
  • 直接将网页转成pdf,生成的pdf和网页的样式一样,也可以含有图片,
  • Java实现Html转PDF

    万次阅读 热门讨论 2017-08-26 15:05:25
    当我们写一个web程序时,经常会遇到将某个特定页面的内容导出报告的功能。本文将实现利用Java 8,Spring Boot, Thymeleaf, Wkhtmltopdf将HTML页面导出成PDF文本。
  • Java实现HTML(带图片)转PDF的解决方案   前端页面实现   后端具体实现: Controller package com.huajin.ptoms.controller.user; import javax.servlet.http.HttpServletResponse; import org.spring...
  • java实现pdf转图片pdf

    万次阅读 热门讨论 2017-01-13 16:39:30
    为了实现pdf报表不可篡改,将pdf报表转换为内容全为图片的pdf报表。实现思路:1.将原pdf每页转换为图片数据(使用pdfbox.jar和fontbox.jar); 2.将图片数据转换为byte[]格式图片数据; 3.将byte[]图片数据加入到...
  • java实现HTML转PDF语言支持,解决乱码问题,把这个文件上传到云服务器上面去。
  • java实现Excel、ppt、word、html转pef,pdf转swf动画播放效果,资源包含 工具、jar、工程示例代码以及word文档说明。这个资源我也是从网上找的 ,我自整合的,希望下载的盆友对您有所帮助。感谢您的下载。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,689
精华内容 21,075
关键字:

java实现pdf转成html

java 订阅