精华内容
下载资源
问答
  • Java实现Html转PDF

    2019-05-28 14:46:21
    文章目录[隐藏]Java实现Html转PDFJava实现Html转PDF 2015年07月07日 10:35:10 死神的丧钟 阅读数:38929 标签: Java HTML转PDF 更多 个人分类: Web Java 项目上的客户提出一个需求,把政务流程中的表单数据...
    文章目录[隐藏]

    Java实现Html转PDF

    2015年07月07日 10:35:10
    死神的丧钟
    阅读数:38929


    标签:
    Java HTML转PDF
    更多

    个人分类:
    Web Java

    项目上的客户提出一个需求,把政务流程中的表单数据导出成pdf或者图片格式,用来作电子档案材料。表单基于公司的电子政务构建平台实现,在数据库保存的都是html格式,因此打算直接把表单html转成pdf或者图片。由于表单是已经写好了html页面,那我要做的就是能完美解析html+css的pdf生成工具。在百度上搜索html转pdf的结果,大部分都是用itext,itext的确是java开源组件的第一选择。不过itext也有局限,就是要自己写模版,系统中的表单数量有好几百个,为每个表单做一个导出模版不现实。 

    最后,wkhtmltopdf进入了我的选择范围。wkhtmltopdf是一个使用webkit网页渲染引擎开发的用来将 html转成 pdf的工具,可以跟多种脚本语言进行集成来转换文档。

    官网地址 http://wkhtmltopdf.org/

    github地址
    https://github.com/wkhtmltopdf/wkhtmltopdf

    wkhtmltopdf把html转成pdf很简单,只要在windows命令行中输入

    c:wkhtmltopdf.exe http://www.csdn.net c:csdn.pdf

    就可以把csdn网页转成pdf,并保存到C盘根目录。

    在java中调用wkhtmltopdf的命令Runtime.getRuntime().exec(“c:wkhtmltopdf.exe http://www.csdn.net c:csdn.pdf”)就可以实现转换。

    下面把命令封装成java工具类,方便调用。

    1
    import java.io.File;
    2
    3
    public class HtmlToPdf {
    4
    //wkhtmltopdf在系统中的路径
    5
    private static final String toPdfTool = "c:\wkhtmltopdf.exe";
    6
    7
    /**
    8
    * html转pdf
    9
    * @param srcPath html路径,可以是硬盘上的路径,也可以是网络路径
    10
    * @param destPath pdf保存路径
    11
    * @return 转换成功返回true
    12
    */
    13
    public static boolean convert(String srcPath, String destPath){
    14
    File file = new File(destPath);
    15
    File parent = file.getParentFile();
    16
    //如果pdf保存路径不存在,则创建路径
    17
    if(!parent.exists()){
    18
    parent.mkdirs();
    19
    }
    20
    21
    StringBuilder cmd = new StringBuilder();
    22
    cmd.append(toPdfTool);
    23
    cmd.append(" ");
    24
    cmd.append(srcPath);
    25
    cmd.append(" ");
    26
    cmd.append(destPath);
    27
    28
    boolean result = true;
    29
    try{
    30
    Process proc = Runtime.getRuntime().exec(cmd.toString());
    31
    HtmlToPdfInterceptor error = new HtmlToPdfInterceptor(proc.getErrorStream());
    32
    HtmlToPdfInterceptor output = new HtmlToPdfInterceptor(proc.getInputStream());
    33
    error.start();
    34
    output.start();
    35
    proc.waitFor();
    36
    }catch(Exception e){
    37
    result = false;
    38
    e.printStackTrace();
    39
    }
    40
    41
    return result;
    42
    }
    43
    }



    接收Process的输入和错误信息时,需要创建另外的线程,否则当前线程会一直等待(在Tomcat中有这种现象)。

    1
    import java.io.BufferedReader;
    2
    import java.io.IOException;
    3
    import java.io.InputStream;
    4
    import java.io.InputStreamReader;
    5
    6
    /**
    7
    * 当java调用wkhtmltopdf时,用于获取wkhtmltopdf返回的内容
    8
    */
    9
    public class HtmlToPdfInterceptor extends Thread {
    10
    private InputStream is;
    11
    12
    public HtmlToPdfInterceptor(InputStream is){
    13
    this.is = is;
    14
    }
    15
    16
    public void run(){
    17
    try{
    18
    InputStreamReader isr = new InputStreamReader(is, "utf-8");
    19
    BufferedReader br = new BufferedReader(isr);
    20
    String line = null;
    21
    while ((line = br.readLine()) != null) {
    22
    System.outlprintln(line.toString()); //输出内容
    23
    }
    24
    }catch (IOException e){
    25
    e.printStackTrace();
    26
    }
    27
    }
    28
    }



    在Servlet中调用

    1
    /**
    2
    * Html转PDF
    3
    */
    4
    @WebServlet("/htmltopdf/servlet")
    5
    public class HtmlToPdfServlet extends HttpServlet {
    6
    private static final long serialVersionUID = 1L;
    7
    8
    /**
    9
    * Servlet接收参数path,获取html的url
    10
    */
    11
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    12
    String path = request.getParameter("path");
    13
    if(path == null || path.equals("")){
    14
    return;
    15
    }
    16
    17
    //获取pdf的临时保存路径
    18
    //tmp为网站下的目录
    19
    //把生成的pdf放到网站下以便下载
    20
    String pdfPath = request.getSession().getServletContext().getRealPath("/tmp");
    21
    String pdfName = UUID.randomUUID().toString() + ".pdf";
    22
    23
    if(HtmlToPdf.convert(path, pdfPath + "/" + pdfName)){
    24
    response.sendRedirect(request.getContextPath() + "/tmp/" + pdfName);
    25
    }
    26
    }
    27
    }



    在浏览器中输入http://<网站路径>/htmltopdf/servlet?path=http://blog.csdn.net

    resize,m_fill,w_1704,h_890#

    展开全文
  • 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 实现 Html pdf

    万次阅读 2019-01-12 23:38:47
    本博客主要演示使用 itextpdf-5.4.3.jar 和 xmlworker-5.4.3.jar 把 Html 转换成 pdf 文件。但是效果还不如直接用内容生成的 pdf 。...可参阅上篇博客 Java 生成 pdf ;另外,css 文件似乎无法很好的转换。...

    本博客主要演示使用 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实现HTML转PDF

    2017-12-12 00:26:00
    因为这个HTML 转PDFhtml代码规范要求非常严格所以这里的头部必须声明: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> ...

    效果图:

    234610_l2qz_2886458.png

    上图是 html 效果图

    生成PDF效果图如下:

    234735_2hzI_2886458.png

     

    maven准备的jar包: 注意版本不要搞错!!搞错了是运行不了。

    <dependency>  
                    <groupId>com.itextpdf</groupId>  
                    <artifactId>itextpdf</artifactId>  
                    <version>5.5.9</version>
                </dependency>  
                  
                 <dependency>  
                    <groupId>com.itextpdf.tool</groupId>  
                    <artifactId>xmlworker</artifactId>  
                    <version>5.5.9</version>
                </dependency>  
                           
                <dependency>  
                    <groupId>com.itextpdf</groupId>  
                    <artifactId>itext-asian</artifactId>  
                    <version>5.2.0</version>
                </dependency>  
    			
    		<dependency>
    		    <groupId>org.xhtmlrenderer</groupId>
    		    <artifactId>flying-saucer-pdf-itext5</artifactId>
    		    <version>9.0.3</version>
    		</dependency>

    java类:

    package com.test;
    
    import com.itextpdf.text.pdf.BaseFont;
    import org.xhtmlrenderer.pdf.ITextFontResolver;
    import org.xhtmlrenderer.pdf.ITextRenderer;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    
    /**
     * 文件格式转换工具类
     *
     * @author lbj
     *
     * 2015-10-8 上午10:52:22
     */
    public class FileTypeConvertUtil {
    
        /**
         * 将HTML转成PD格式的文件。html文件的格式比较严格
         * @param htmlFile
         * @param pdfFile
         * @throws Exception
         */
        // <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
        public static void html2pdf(String htmlFile, String pdfFile) throws Exception {
            // step 1
            String url = new File(htmlFile).toURI().toURL().toString();
            System.out.println(url);
            // step 2
            OutputStream os = new FileOutputStream(pdfFile);
            ITextRenderer renderer = new ITextRenderer();
            renderer.setDocument(url);
    
            // step 3 解决中文支持
            ITextFontResolver fontResolver = renderer.getFontResolver();
            if("linux".equals(getCurrentOperatingSystem())){
                fontResolver.addFont("/usr/share/fonts/chiness/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
            }else{
                fontResolver.addFont("c:/Windows/Fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            }
    
            renderer.layout();
            renderer.createPDF(os);
            os.close();
    
            System.out.println("create pdf done!!");
    
        }
    
        public static String getCurrentOperatingSystem(){
            String os = System.getProperty("os.name").toLowerCase();
            System.out.println("---------当前操作系统是-----------" + os);
            return os;
        }
    
    
        public static void main(String[] args) {
            //        String htmlFile = "/home/lbj/sign.jsp";
            //        String pdfFile = "/home/lbj/sign.pdf";
            String htmlFile = "d:/table.html";
            String pdfFile = "d:/testoone2.pdf";
            try {
                FileTypeConvertUtil.html2pdf(htmlFile, pdfFile);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    

    这里说下博主所踩过的坑:

    1.simsun.ttc 文件找不到问题

    windows 自带有这个文件 。但是linux 要自己去下载了 如果需要可以联系博主 (千万不要把windows s上的这个文件直接copy 到linux 系统上去哦)

    备注:可能很多人看到simsun 这个文件是这个样子

    235544_i2po_2886458.png

    其实就是这个样子。

    2.中文显示问题:

    235707_pnYr_2886458.png

    这里很奇怪为什么引入了 中文字体为什么还是不能显示中文?

    这里要注意了:要再你的html <body> 加上一个样式:

     style = "font-family: SimSun;"

    235831_zYE6_2886458.png

    这样加了之后就会出现中文了。。

    3.&nbsp; 问题(当然不知这种问题 还有 &gt;等一些特殊转义符号这里只罗列一种

    000006_jqKr_2886458.png

    当文中出现这种字符的时候 会报错:

    000307_gYr1_2886458.png

    因为这个HTML 转PDF 对html代码规范要求非常严格所以这里的头部必须声明:

    000507_cbAN_2886458.png

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html lang="en" xmlns="http://www.w3.org/1999/xhtml">

    以及其他的都要加</>结束

    000640_WoSS_2886458.png

    4.这里出现这样一个问题:

    000743_y2ew_2886458.png

    html 中这个换行是OK 的  但是转完PDF之后 是这种情况:

    000830_1UjJ_2886458.png

    解决办法如下:

    添加样式:

    table {
    			border-collapse: collapse;
    			table-layout: fixed;
    			word-break:break-all;
    			font-size: 10px;
    			width: 100%;
    			text-align: center;
    	}
    	td {
    		word-break:break-all;
    		word-wrap : break-word;
    	}

    完美解决了!!

    效果图:

    001901_GjjE_2886458.png

     

    另外这里还涉及到分页的情况以及纸张大小设置

    @page {
    		size: 7in 15.25in;
    	}

    这里是设置A4 纸张

    body里加入
            <div id="footer" style="">  Page <span id="pagenumber"/> of <span id="pagecount"/> </div>
    样式上加入
    @page {
    size:210mm 297mm;//纸张大小A4
    margin: 0.25in;
    -fs-flow-bottom: "footer";
    -fs-flow-left: "left";
    -fs-flow-right: "right";
    border: thin solid black;
    padding: 1em;
    }
    #footer {
    font-size: 90%; font-style: italic;
    position: absolute; top: 0; left: 0;
    -fs-move-to-flow: "footer";
    }
    #pagenumber:before {
    content: counter(page);
    }
    #pagecount:before {content: counter(pages);
    }

    代码:

    001655_2yH5_2886458.png

    参考文献:https://www.cnblogs.com/reese-blogs/p/5546806.html

    http://blog.csdn.net/u010515155/article/details/76186728

    附上html 代码:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head>
      <meta charset="UTF-8"/>
      <title>表格样式</title>
      <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"/>
      <link rel="stylesheet" href="https://static.loyalvalleycapital.com/web/css/frame.css"/>
      <style>
      table.table-separate th{
        font-weight:bold;
        font-size:14px;
        border-top:1px solid #F3EDE9 !important;
      }
      table.table-separate td{
        padding: 13px 0;
        font-weight:100;
      }
      .table-separate td.tit{
        background-color: #f4f9fe;
        font-weight:normal;
        padding:22px 0;
        width:15%;
      }
      .table-separate td.cont{
        text-align: left;
        padding:16px 22px;
        width:85%;
        line-height:175%;
      }
      .table-separate.no-border th{
        border:none;
        text-align: left;
      }
      .table-separate.no-border td{
        text-align: left;
        border:none;
      }
     
    	table {
    			border-collapse: collapse;
    			table-layout: fixed;
    			word-break:break-all;
    			font-size: 10px;
    			width: 100%;
    			text-align: center;
    	}
    	td {
    		word-break:break-all;
    		word-wrap : break-word;
    	}
    	@page {
    		size:210mm 297mm;//纸张大小A4
    		margin: 0.25in;
    		-fs-flow-bottom: "footer";
    		-fs-flow-left: "left";
    		-fs-flow-right: "right";
    		padding: 1em;
    		}
    		#footer {
    		font-size: 90%; font-style: italic;
    		position: absolute; top: 0; left: 0;
    		-fs-move-to-flow: "footer";
    		}
    		#pagenumber:before {
    		content: counter(page);
    		}
    		#pagecount:before {content: counter(pages);
    		}
    </style>
    </head>
    <body class="bg-white pb-3"  style = "font-family: SimSun;">
     <div id="footer" style="">  Page <span id="pagenumber"/> of <span id="pagecount"/> </div>
    <div style="max-width:600px;margin:0 auto;padding:10px;">
      <div class="f18 text-center mv-2 bold">合伙人服务日报</div>
      <div class="f14 text-center mb-3">2017年8月28日</div>
    
      <div class="">
        <div class="f14 mb bold">一、旗舰基金股东动态</div>
        <div class="f14 mb">1、旗舰基金公司新闻</div>
        <table class="table-separate">
          <tbody>
          <tr>
            <td class="tit" valign="middle">刚泰</td>
    		
            <td class="cont">
              <p class="bold">&nbps;第 3 期员工持股计划(草案)摘要</p>
              <p>1、甘肃刚泰控股(集团)股份有限公司(以下简称“公司”)第3期员工持 股计划(以下简称“第3期员工持股计划”)根据《中华人民共和国公司法》、《中华人民共和国证券法》、
    		  《关于上市公司实施员工持股计划试点的指导意见》 及其他有关法律、法规、规范性文件以及《甘肃刚泰控股(集团)股份有限公司章程》的规定制定,遵循公平、公正、公开的原则,旨在完善公司的激励机制,确保公司未来发展战略和经营目标的实现。</p>
              <p>4、第3期员工持股计划以“份”作为认购单位,每份份额为1元,起始认购 份数为100万份,超过100万份的,以10万份的整数倍累积计算。公司全部员工 持股计划涉及的股票数量累计不超过公司现有股本总额的10%,任一持有人持有的 员工持股计划份额所对应的标的股票数量不超过公司股本总额的 1%(不包括员工 在公司首次公开发行股票上市前获得的股份、通过二级市场自行购买的股份及通过股权激励获得的股份)。</p>
            </td>
          </tr>
          </tbody>
        </table>
    
    
        <div class="f14 mt-3 mb bold">一、客户沟通和反馈</div>
        <div class="f14 mb">今天联系的客户:</div>
        <div class="">
          <table class="table-separate">
            <thead>
            <th>联系人</th>
            <th>沟通内容</th>
            <th>客户反馈</th>
            </thead>
            <tbody>
            <tr>
              <td>XXX</td>
              <td>XXX</td>
              <td>XXX</td>
            </tr>
            <tr>
              <td>XXX</td>
              <td>XXX</td>
              <td>XXX</td>
            </tr>
            </tbody>
          </table>
        </div>
    
    
        <div class="f14 mt-3 mb bold">三、官网、微信和客户服务系统变化</div>
        <div class="">
          <table class="table-separate">
            <tbody>
            <tr>
              <td class="tit" valign="middle">运营</td>
              <td class="">
                <p class="bold">XXX</p>
              </td>
              <td class="text-left pl-2">
                <p>· 上海正心公益基金会正式获批 1727 </p>
                <p>· XXXX</p>
              </td>
            </tr>
          
            </tbody>
          </table>
        </div>
    
        <div class="f14 mt-3 mb bold">四、其他工作</div>
        <div class="f14 mb">近期过生日的客户有: </div>
        <div class="">
          <p>8.27 王军</p>
          <p class="bold">8.27 陈鱼海</p>
        </div>
      </div>
    </div>
    
    </body>
    </html>
    

    这里记录了 博主的踩过的一些坑 希望其他人不要踩坑:

    这里使用的是 freemark 生成html  然后由HTML 转PDF(下次分享一下freemark技术) 。

    前面博主找到一个 wxhtmltopdf 这个软件去转PDF 非常简单。但是centos 系统装不上去。客户也不让装软件所以放弃了。。(后面更新一下这个软件的使用以及一些坑)

    博主深知 遇到问题的时候 能够与你交流的很少 这里提供QQ群:600922504 

    欢迎大家一起交流学习!!

    转载于:https://my.oschina.net/960823/blog/1588166

    展开全文
  • 主要介绍了Java实现Html转Pdf的方法,实例分析了java基于ITextRenderer类操作页面及系统自带字体生成pdf文件的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • Java实现Html转Pdf的方法本文实例讲述了Java实现Html转Pdf的方法。分享给大家供大家参考。具体如下:package test;import java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;import org....
  • java实现HTML转PDF语言支持,解决乱码问题,把这个文件上传到云服务器上面去。
  • java 实现 html pdf(含图片)-附件资源
  • 本文实例讲述了Java实现Html转Pdf的方法。分享给大家供大家参考。具体如下:package test;import java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;import org.xhtmlrenderer.pdf....
  • wkhtmltopdf是一个使用webkit网页渲染引擎开发的用来将 html转pdf的工具,可以跟多种脚本语言进行集成来转换文档。因为需要下载插件:wkhtmltopdf把html转pdf很简单,只要在windows命令行中输入D:\wkhtmltox\...
  • import java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;import org.xhtmlrenderer.pdf.ITextFontResolver;import org.xhtmlrenderer.pdf.ITextRenderer;import com.lowagi...
  • Java实现HTML转PDF的几种方法—主要解决中文乱码问题 第一:同事在做HTML转PDF中遇到乱码问题 ***************************************************************** 她采用的itext方法实现HTML转存为PDF,代码如下...
  • wkhtmltopdf是一个使用webkit网页渲染引擎开发的用来将 html转pdf的工具,可以跟多种脚本语言进行集成来转换文档。因为需要下载插件:wkhtmltopdf把html转pdf很简单,只要在windows命令行中输入D:\wkhtmltox\...
  • java实现html转pdf,传统实现方式为pdfbox或itext,这两种方式都存在中文乱码、外部css样式加载问题; google浏览器无头模式,完美实现html转pdf; 一键安装sh,解决 html转pdf中文方框乱码问题; # java调用...
  • html转换为pdf的关键技术是如何处理网页中复杂的css样式、以及中文乱码处理。 各实现对比表 于Windows平台进行测试: 基于IText 基于FlyingSaucer 基于WKHtmlToPdf 基于pd4ml 跨平台性 ...
  • 最近公司需要将前端一个图表统计导出为pdf。前端导出显示的pdf还是可以的,但是将会导致页面不可用与卡死状态。所以由后端寻找解决方案。 以下为解决方案调研 https://www.cnblogs.com/IT-study/p/13706690.html ...
  • PDF技术(四)-Java实现Html转PDF文件

    万次阅读 热门讨论 2018-10-10 16:56:12
    html转换为pdf的关键技术是如何处理网页中复杂的css样式、以及中文乱码处理。 各实现对比表 于Windows平台进行测试:   基于IText 基于FlyingSaucer 基于WKHtmlToPdf ...
  • java实现html转pdf功能

    千次阅读 2015-12-17 10:28:37
    公司项目需要一个html订单页面转pdf的功能。用了jsPDF,效果不是很理想,对中文支持也不好。还有人说用h5来做,可是项目组目前没有写过h5的人,现学肯定来不及。 后来突然发现了这么一个软件。wkhtmltopdf.下载地址...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 594
精华内容 237
关键字:

java实现html转pdf

java 订阅