网上有好几种方法可以将将HTML文件转换成PDF文件但是有些对HTML文件格式要求比较严格,稍微错了一些就不能生成我们所要的PDF文件,这里我推荐一个PD4ML,它可以解决HTML文件格式不正确的问题,可以生成一个比较好的PDF文件,其处理速度快,而且对CSS文件兼容的非常好。下面是最基本的
PD4ML编程:

/*** */
package samples;import java.awt.Insets;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.InvalidParameterException;import org.zefer.pd4ml.PD4Constants;
import org.zefer.pd4ml.PD4ML;public class GettingStarted1 {protected int topValue = 10;protected int leftValue = 20;protected int rightValue = 10;protected int bottomValue = 10;protected int userSpaceWidth = 1300;public static void main(String[] args) {try {GettingStarted1 jt = new GettingStarted1();jt.doConversion("http://pd4ml.com/sample.htm", "c:/pd4ml.pdf");} catch (Exception e) {e.printStackTrace();}}public void doConversion( String url, String outputPath ) throws InvalidParameterException, MalformedURLException, IOException {File output = new File(outputPath);java.io.FileOutputStream fos = new java.io.FileOutputStream(output);PD4ML pd4ml = new PD4ML();pd4ml.setHtmlWidth(userSpaceWidth); // set frame width of "virtual web browser"// choose target paper format and "rotate" it to landscape orientationpd4ml.setPageSize(pd4ml.changePageOrientation(PD4Constants.A4)); // define PDF page marginspd4ml.setPageInsetsMM(new Insets(topValue, leftValue, bottomValue, rightValue)); // source HTML document also may have margins, could be suppressed this way// (PD4ML *Pro* feature):pd4ml.addStyle("BODY {margin: 0}", true);// If built-in basic PDF fonts are not sufficient or// if you need to output non-Latin texts,// TTF embedding feature should help (PD4ML *Pro*)pd4ml.useTTF("c:/windows/fonts", true);pd4ml.render(new URL(url), fos); // actual document conversion from URL to filefos.close();System.out.println( outputPath + "\ndone." );}
}

下面的Java类稍微改变了上面的示例。现在它将源HTML预先读入一个字符串,并将其传递给包装到StringReader的render()方法。首先,它将PDF字节写入ByteArrayOutputStream,这使得测量结果文档的大小成为可能.该方法的一个缺点是RAM利用率较大。

package samples;import java.awt.Insets;;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.InvalidParameterException;import org.zefer.pd4ml.PD4Constants;
import org.zefer.pd4ml.PD4ML;public class GettingStarted2 {protected int topValue = 10;protected int leftValue = 20;protected int rightValue = 10;protected int bottomValue = 10;protected int userSpaceWidth = 1300;public static void main(String[] args) {try {GettingStarted2 jt = new GettingStarted2();String html = readFile("c:/sample.htm", "UTF-8");jt.doConversion2(html, "c:/pd4ml.pdf");} catch (Exception e) {e.printStackTrace();}}public void doConversion2( String htmlDocument, String outputPath ) throws InvalidParameterException, MalformedURLException, IOException {PD4ML pd4ml = new PD4ML();pd4ml.setHtmlWidth(userSpaceWidth); // set frame width of "virtual web browser"// choose target paper formatpd4ml.setPageSize(pd4ml.changePageOrientation(PD4Constants.A4)); // define PDF page marginspd4ml.setPageInsetsMM(new Insets(topValue, leftValue, bottomValue, rightValue)); // source HTML document also may have margins, could be suppressed this way// (PD4ML *Pro* feature):pd4ml.addStyle("BODY {margin: 0}", true);// If built-in basic PDF fonts are not sufficient or// if you need to output non-Latin texts, TTF embedding feature should help// (PD4ML *Pro*)pd4ml.useTTF("c:/windows/fonts", true);ByteArrayOutputStream baos = new ByteArrayOutputStream();// actual document conversion from HTML string to byte arraypd4ml.render(new StringReader(htmlDocument), baos); // if the HTML has relative references to images etc,// use render() method with baseDirectory parameter insteadbaos.close();System.out.println( "resulting PDF size: " + baos.size() + " bytes" );// in Web scenarios it is a good idea to send the size with// "Content-length" HTTP headerFile output = new File(outputPath);java.io.FileOutputStream fos = new java.io.FileOutputStream(output);fos.write( baos.toByteArray() );fos.close();System.out.println( outputPath + "\ndone." );}private final static String readFile( String path, String encoding ) throws IOException {File f = new File( path );FileInputStream is = new FileInputStream(f);BufferedInputStream bis = new BufferedInputStream(is);ByteArrayOutputStream fos = new ByteArrayOutputStream();byte buffer[] = new byte[2048];int read;do {read = is.read(buffer, 0, buffer.length);if (read > 0) { fos.write(buffer, 0, read); }} while (read > -1);fos.close();bis.close();is.close();return fos.toString(encoding);}
}
涉及格式转换用到的包,可以通过以下网址进行下载:

PD4ML将HTML文件转换成PDF文件相关推荐

  1. java编程将HTML文件转换成PDF文件

    网上有好几种方法可以将将HTML文件转换成PDF文件但是有些对HTML文件格式要求比较严格,稍微错了一些就不能生成我们所要的PDF文件,这里我推荐一个 PD4ML,它可以解决HTML文件格式不正确的问 ...

  2. 如何将Ai文件转换成PDF文件

    要将Ai文件转换成PDF文件,请按照以下步骤操作: 1. 打开客汇宝网站软件并打开要转换的文件. 2. 点击"文件"菜单并选择"另存为". 3. 在" ...

  3. 怎么把图片文件转换成PDF文件

    除了office文件外,我们最常用的就是PDF文件了.因为PDF文件格式可以将文字.字型.格式.颜色及独立于 设备和分辨率的图形图像等封装在一个文件中.该格式文件还可以包含超文本链接.声音和动态影像等 ...

  4. CAJ文件转换成PDF文件:教你如何实现文件格式转换

    CAJ文件是中国知网常用的一种文献格式,但有时候我们需要将其转换成PDF格式,以方便阅读.打印.分享等用途.本文将教你如何实现CAJ文件转换成PDF文件. 方法一.使用CAJViewer软件 步骤1: ...

  5. 把jpg文件转换成pdf文件

    把jpg文件转换成pdf文件 生涯中,人人常常会拍摄一些照片用来忖量,可是岁月长了,时时会由于照片多而杂乱而懒于翻看,那末你是否思虑做一个电子相册,或制造一本PDF花样的书本来翻看呢?业余的这款JPG ...

  6. 怎么把jpg文件转换成pdf文件

    怎么把jpg文件转换成pdf文件 PDF转换成Word文档对我们来讲并不生僻,假设文字是由一张张图片构成的,碰着这种状况怎么办,怎么将JPG转换成PDF?菜鸟损耗了不少工夫和肉体才找到一款好用的JPG ...

  7. 怎么将知网下载的CAJ文件转换成PDF文件

    我们熟知的CAJ文件必须使用中国知网的CAJ Viewer才能打开,但是如果想以PDF的格式查看论文那就需要将CAJ文件转换为pdf格式,那么怎么CAJ文件转换成PDF文件呢? 转换方法其实很简单,这 ...

  8. 怎么把caj文件转换成pdf文件

    我们在网上下载素材的时候,就有很大一部分是caj格式的文件,我们又想将caj文件整理成pdf文件,那么怎么把caj文件转换成pdf文件呢? 其实转换很简单,只需要一个CAJ转换器就能实现,下面介绍ca ...

  9. Java使用aspse实现Excel文件转换成PDF文件

    使用Java代码把Excel文件转换成PDF文件 需要引用aspose包,引入操作我写了一个博客,地址如下 https://blog.csdn.net/weixin_46713508/article/ ...

  10. 如何将CAJ文件转换成PDF文件?教你一招搞定

    CAJ文件是中国知网的专用格式,主要用于存储学术文献等信息.由于这种格式并非常见格式,很多用户不知道如何打开或转换.如果您需要将CAJ文件转换成PDF文件,不必担心,您可以使用记灵在线工具来解决这个问 ...

最新文章

  1. MIT开放式课程“自然语言处理”介绍
  2. 人工智能论坛_诚邀共享 | 2020人工智能医疗产业前瞻论坛
  3. 7.4.7 2DPCA
  4. 局域网物理机怎么访问虚拟机
  5. php ci model条件查询,Laravel关系模型指定条件查询方法
  6. 事务并发、事务隔离级别
  7. 多线程NSObjectNSThreadNSOperationGCD
  8. NUC1840 Graveyard Design【尺取法】
  9. 知乎热议的Deep Peak2模型究竟是什么?答案都在这里
  10. 网关支付、银联代扣通道、快捷支付、银行卡支付分别是怎么样进行支付的?
  11. 合肥工业大学机器人技术期末_机器人技术试题及答案.doc
  12. COPRA RF 2005 SR1
  13. kali攻击139端口_入侵445端口-永恒之蓝漏洞利用-Metasploit
  14. Linux环境关闭开机自启动服务
  15. 深入探讨PageRank(四):PageRank的危机及搜索引擎的未来
  16. BUUCTF--[HarekazeCTF2019]Sqlite Voting
  17. Win10怎么录制高清的电脑屏幕?Win10屏幕录制工具哪个好?
  18. 使用vue+elementUI页面实现前端做分页
  19. TVS 管选型与 ESD 防护设计
  20. 普通话-命题说话1-10

热门文章

  1. 在CAD中求出多条线段的线段总和
  2. Python学习17(GUI图形用户界面编程)
  3. 页式存储系统的逻辑地址是由页号和页内地址两部分组成的
  4. [OpenGL] 延迟渲染 - 多个点光源
  5. 芯片代理商哪家专业 品质是否有保障
  6. 金额中文大写c语言,C语言编程:数字金额转换为中文大写金额?
  7. C语言学习笔记(12)——函数基础
  8. steam官网网页服务器打不开,steam打不开,教您怎么解决steam打不开
  9. Java进阶(一) Java高效读取大文件,占内存少
  10. win7共享wifi自动获取不到ip地址的解决办法