Java 将Html转为PDF(一)

合集下载

链接转pdf java

链接转pdf java

在Java中将链接转换为PDF文件,通常需要使用一些第三方库,如Jsoup 用于抓取网页内容,然后使用iText或PDFBox等库将HTML内容转换为PDF 格式。

以下是一个基本的步骤示例:
1. 添加依赖项:
对于Jsoup:在你的Maven或Gradle构建文件中添加Jsoup依赖。

对于iText或PDFBox:添加相应的PDF生成库依赖。

2. 使用Jsoup抓取网页内容:
java代码:
3. 将HTML内容转换为PDF:
如果使用iText:
java代码:
如果使用PDFBox:
java代码:
注意:上述PDFBox示例中并没有直接将HTML转换为PDF,因为PDFBox 本身并不直接支持HTML到PDF的转换。

你可能需要结合使用Flying Saucer 或Apache FOP等其他库来实现这一功能。

请根据你的具体需求和环境选择合适的库和方法进行链接转PDF的操作。

同时,由于网络抓取和PDF生成可能会涉及到版权和许可问题,确保你在进行此类操作时遵守相关法律法规和网站的使用条款。

使用模板引擎生成pdf的几种方法

使用模板引擎生成pdf的几种方法

使用模板引擎生成pdf的几种方法
使用模板引擎生成PDF有以下几种方法:
1. 使用Java生成PDF:利用Freemarker模板引擎生成HTML,然后使用iText包进行转换,转换过程需要解决中文显示问题,需要在Freemarker模板文件中设置<body style="font-family:SimSun;">以解决该问题。

2. 使用Spring Boot和FreeMarker:通过在applicationproperties 中配置后缀、设置模板文件路径和覆盖默认属性值,可在SpringBoot 中使用FreeMarker生成Web应用。

3. 使用wkhtmltopdf:这是一种高性能的工具,可以将HTML转换为PDF,可以生成美观且实用的界面。

4. 使用SwingUI和JFreePDF:利用SwingUI生成用户界面,再使用JFreePDF将生成的HTML转换为PDF。

虽然这种方法可以生成PDF,但界面样式难看且不兼容太新的js语言。

5. 使用art-template:这是一种新的高性能JavaScript模板引擎,可以将数据与HTML模板更加友好地结合起来,支持服务器端和浏览器端使用,并使用标准语法进行渲染。

需要注意的是,不同的方法可能适用于不同的需求和场景,具体选择哪一种方法需要根据实际情况进行权衡和评估。

html转pdf的几种方法

html转pdf的几种方法

html转pdf的几种方法
有几种方法可以将HTML文件转换为PDF文件。

以下是其中一些常见的方法:
1.使用在线转换工具:有很多在线工具可以将HTML文件转换为
PDF格式,例如pdfcrowd、HTML to PDF等。

你只需上传HTML
文件,选择转换选项,然后等待转换完成并下载生成的PDF文
件。

2.使用浏览器打印功能:现代的Web浏览器(如Google Chrome
和Mozilla Firefox)通常都内置了“打印”功能,并提供将网页内
容保存为PDF文件的选项。

只需打开HTML文件,点击浏览器
菜单中的“打印”选项,然后选择“保存为PDF”或类似选项即可。

3.使用第三方库或工具:有一些专门的库和工具可以在编程环境
中将HTML转换为PDF。

例如,使用Python可以使用库如pdfkit、
WeasyPrint、PyPDF2等。

这些库允许你以编程方式加载HTML
文件并将其转换为PDF。

4.使用专业的PDF转换软件:还有一些专业的PDF转换软件,可
以将HTML文件转换为PDF。

这些软件通常提供更多的自定义
选项和功能,例如调整页面布局、添加水印等。

每种方法都有其优缺点,选择最适合你的方法取决于你的需求和偏好。

如果只是偶尔需要将HTML转换为PDF,那么在线工具或浏览器打印功能可能是最简单的选择。

如果需要在程序中自动化转换,那么使用相关的库或工具会更合适。

poihtml转pdf 带表格

poihtml转pdf 带表格

poihtml转pdf 带表格传统的办公转换文件工具仍然是非常重要的。

POIHtml转PDF带表格是其中一种。

本篇文章将为读者介绍如何使用POIHtml转换器,将HTML文件带表格的内容转为PDF格式。

第一步:下载并安装POIHtml转换器工具POIHtml转换器是一个Java开发工具,任何具有Java环境的计算机都可以运行。

在网上搜索并下载POIHtml转换器程序包,将其解压并创建一个文件夹。

在文件夹中将包含POIHtml转换器的“jar”文件和一个例子HTML文件。

第二步:准备HTML文件和表格在POIHtml转换器工具的文件夹中,打开“example.html”文件并使用HTML标记创建一个包含表格的文件。

这个表格可以有一个或多个行和列。

第三步:编写Java代码在一个文本编辑器中打开一个新文件,输入以下代码:```javaimport java.io.*;import com.lowagie.text.*;import com.lowagie.text.pdf.*;import org.xhtmlrenderer.pdf.ITextRenderer;public class HtmlToPDF {public static void main(String[] args) throws DocumentException, IOException {OutputStream os = new FileOutputStream("example.pdf"); //创建PDF文件ITextRenderer renderer = new ITextRenderer();renderer.setDocument(new File("example.html"));yout();renderer.createPDF(os);}}```将“example.html”中的内容转换为PDF,将其保存为“example.pdf”。

Java实现HTML代码生成PDF文档

Java实现HTML代码生成PDF文档

1、IText实现html2pdf,速度快,纠错能力差,支持中文(要求HTML使用unicode编码),但中支持一种中文字体,开源。

2、Flying Sauser实现html2pdf,纠错能力差,支持多种中文字体(部分样式不能识别),开源。

3、PD4ML实现html2pdf,速度快,纠错能力强,支持多种中文字体,商业。

(一)IText官网:/测试案例:TestIText.java依赖jar包:iText-2.0.8.jar、iTextAsian.jar(支持中文)下面只是一个小的测试案例,如果项目中使用到了该组件可以参考API完成项目组中相应的功能![c-sharp]view plaincopyprint?1.import java.io.FileOutputStream;2.import java.io.FileReader;3.import java.util.ArrayList;4.import com.lowagie.text.Document;5.import com.lowagie.text.Element;6.import com.lowagie.text.Font;7.import com.lowagie.text.PageSize;8.import com.lowagie.text.Paragraph;9.import com.lowagie.text.html.simpleparser.HTMLWorker;10.importcom.lowagie.text.html.simpleparser.StyleSheet;11.import com.lowagie.text.pdf.BaseFont;12.import com.lowagie.text.pdf.PdfWriter;13.public class TestIText{14.public static void main(String[] args) {15.TestIText ih = new TestIText();16.ih.htmlCodeComeFromFile("D://Test//iText.html","D://Test//iText_1.pdf");17.ih.htmlCodeComeString("Hello中文","D://Test//iText_2.pdf");18.}19.20.public void htmlCodeComeFromFile(String filePath,String pdfPath) {21.Document document = new Document();22.try {23.StyleSheet st = new StyleSheet();24.st.loadTagStyle("body", "leading", "16,0");25.PdfWriter.getInstance(document, newFileOutputStream(pdfPath));26.document.open();27.ArrayList p = HTMLWorker.parseToList(newFileReader(filePath), st);28.for(int k = 0; k < p.size(); ++k) {29.document.add((Element)p.get(k));30.}31.document.close();32.System.out.println("文档创建成功");33.}catch(Exception e) {34. e.printStackTrace();35.}36.}37.38.public void htmlCodeComeString(String htmlCode,String pdfPath) {39.Document doc = new Document(PageSize.A4);40.try {41.PdfWriter.getInstance(doc, newFileOutputStream(pdfPath));42.doc.open();43.// 解决中文问题44.BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);45.Font FontChinese = new Font(bfChinese, 12,Font.NORMAL);46.Paragraph t = new Paragraph(htmlCode, FontChinese);47.doc.add(t);48.doc.close();49.System.out.println("文档创建成功");50.}catch(Exception e) {51. e.printStackTrace();52.}53.}54.}1.import java.io.File;2.import java.io.FileOutputStream;3.import java.io.OutputStream;4.5.import org.xhtmlrenderer.pdf.ITextFontResolver;6.import org.xhtmlrenderer.pdf.ITextRenderer;7.8.import com.lowagie.text.pdf.BaseFont;9.10.public class TestFlyingSauser {11.public static void main(String[] args) throwsException {12.demo_1();13.demo_2();14.}15.16.// 不支持中文17.public static void demo_1() throws Exception {18.String inputFile = "D:/Test/flying.html";19.String url = newFile(inputFile).toURI().toURL().toString();20.String outputFile = "D:/Test/flying.pdf";21.OutputStream os = new FileOutputStream(outputFile);22.ITextRenderer renderer = new ITextRenderer();23.renderer.setDocument(url);yout();25.renderer.createPDF(os);26.os.close();27.}28.29.// 支持中文30.public static void demo_2() throws Exception {31.String outputFile = "D:/Test/demo_3.pdf";32.OutputStream os = new FileOutputStream(outputFile);33.ITextRenderer renderer = new ITextRenderer();34.ITextFontResolver fontResolver =renderer.getFontResolver();35.fontResolver.addFont("C:/Windows/fonts/simsun.ttc",BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);36.StringBuffer html = new StringBuffer();37.// DOCTYPE 必需写否则类似于这样的字符解析会出现错误38.html.append("<!DOCTYPE html PUBLIC /"-//W3C//DTDXHTML 1.0 Transitional//EN/"/"/TR/xhtml1/DTD/xhtml1-transitional.dtd/">");39.html.append("<htmlxmlns=/"/1999/xhtml/">").append("<head>")40..append("<meta http-equiv=/"Content-Type/"content=/"text/html; charset=UTF-8/" />")41..append("<mce:style type=/"text/css/"><!--42.body {font-family: SimSun;}43.--></mce:style><style type=/"text/css/"mce_bogus="1">body {font-family: SimSun;}</style>")44..append("</head>")45..append("<body>");46.html.append("<div>支持中文!</div>");47.html.append("</body></html>");48.renderer.setDocumentFromString(html.toString());49.// 解决图片的相对路径问题50.//renderer.getSharedContext().setBaseURL("file:/F:/teste /html/");yout();52.renderer.createPDF(os);53.os.close();54.}55.}/sns/space.php?uid=4&do=blog&id=582关于Flying Sauser的一篇非常不错的文章:/pub/a/today/2007/06/26/generating-pdfs-with-flying-saucer-and-itext.html(三)PD4ML官网下载:/downloads.htm依赖jar包:pd4ml_demo.jar、pd4ml__css2.jar、fonts.jar下面只是一个小的测试案例,如果项目中使用到了该组件可以参考API完成项目组中相应的功能![java]view plaincopyprint?1.import java.awt.Insets;2.import java.io.File;3.import java.io.FileOutputStream;4.import java.io.StringReader;5.6.import org.zefer.pd4ml.PD4Constants;7.import org.zefer.pd4ml.PD4ML;8.9.public class Converter {10.public static void main(String[] args) throwsException {11.Converter converter = new Converter();12.converter.generatePDF_2(newFile("D:/Test/demo_ch_pd4ml_a.pdf"), "D:/Test/a.htm");13.File pdfFile = newFile("D:/Test/demo_ch_pd4ml.pdf");14.StringBuffer html = new StringBuffer();15.html.append("<html>")16..append("<head>")17..append("<meta http-equiv=/"Content-Type/"content=/"text/html; charset=UTF-8/" />")18..append("</head>")19..append("<body>")20..append("<font face=/"KaiTi_GB2312/">")21..append("<font color='red' size=22>显示中文</font>")22..append("</font>")23..append("</body></html>");24.StringReader strReader = newStringReader(html.toString());25.converter.generatePDF_1(pdfFile, strReader);26.}27.// 手动构造HTML代码28.public void generatePDF_1(File outputPDFFile,StringReader strReader) throws Exception {29.FileOutputStream fos = newFileOutputStream(outputPDFFile);30.PD4ML pd4ml = new PD4ML();31.pd4ml.setPageInsets(new Insets(20, 10, 10, 10));32.pd4ml.setHtmlWidth(950);33.pd4ml.setPageSize(pd4ml.changePageOrientation(PD4Constants.A4));eTTF("java:fonts", true);35.pd4ml.setDefaultTTFs("KaiTi_GB2312", "KaiTi_GB2312","KaiTi_GB2312");36.pd4ml.enableDebugInfo();37.pd4ml.render(strReader, fos);38.}39.40.// HTML代码来自于HTML文件41.public void generatePDF_2(File outputPDFFile,String inputHTMLFileName) throws Exception {42.FileOutputStream fos = newFileOutputStream(outputPDFFile);43.PD4ML pd4ml = new PD4ML();44.pd4ml.setPageInsets(new Insets(20, 10, 10, 10));45.pd4ml.setHtmlWidth(950);46.pd4ml.setPageSize(pd4ml.changePageOrientation(PD4Constants.A4));eTTF("java:fonts", true);48.pd4ml.setDefaultTTFs("KaiTi_GB2312", "KaiTi_GB2312","KaiTi_GB2312");49.pd4ml.enableDebugInfo();50.pd4ml.render("file:" + inputHTMLFileName, fos);51.}52.}。

Java实现HTML转PDF的总结

Java实现HTML转PDF的总结

Java实现HTML转PDF的总结Java实现HTML转PDF的⼏种⽅法—主要解决中⽂乱码问题第⼀:同事在做HTML转PDF中遇到乱码问题*****************************************************************她采⽤的itext⽅法实现HTML转存为PDF,代码如下:1import java.io.FileInputStream;2import java.io.FileOutputStream;34import com.itextpdf.text.Document;5import com.itextpdf.text.PageSize;6import com.itextpdf.text.pdf.PdfWriter;7import com.itextpdf.tool.xml.XMLWorkerHelper;89public class HtmlToPDF {10public static final String HTML = "D:/printEnforcement.htm";11public static void main(String[] args) {12try {1314 Document document = new Document(PageSize.LETTER);15 PdfWriter pdfWriter = PdfWriter.getInstance(document,16new FileOutputStream("d://testpdf.pdf"));17 document.open();18 document.addAuthor("test");19 document.addCreator("test");20 document.addSubject("test");21 document.addCreationDate();22 document.addTitle("XHTML to PDF");2324 XMLWorkerHelper worker = XMLWorkerHelper.getInstance();2526 worker.parseXHtml(pdfWriter, document, new FileInputStream(HTML), null, new AsianFontProvider());27 document.close();28 System.out.println("Done.");29 } catch (Exception e) {30 e.printStackTrace();31 }32 }3334 }1import com.itextpdf.text.BaseColor;2import com.itextpdf.text.Font;3import com.itextpdf.text.pdf.BaseFont;4import com.itextpdf.tool.xml.XMLWorkerFontProvider;56public class AsianFontProvider extends XMLWorkerFontProvider {78public Font getFont(final String fontname, final String encoding,9final boolean embedded, final float size, final int style,10final BaseColor color) {11 BaseFont bf = null;12try {13 bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",14 BaseFont.NOT_EMBEDDED);15 } catch (Exception e) {16 e.printStackTrace();17 }18 Font font = new Font(bf, size, style, color);19 font.setColor(color);20return font;21 }22 }代码的思路很简单的,⼀个pdfwriter类负责输出pdf参数,⼀个document作为⽅法中的参数,⼀个xmlworkhelper负责将html转化为pdf⽂档;在另⼀个类中XMLWorkerFontProvider⽬前主要写的是关于字体参数的设置。

html转换为pdf案例的一些总结(多图推荐)

html转换为pdf案例的一些总结(多图推荐)

html转换为pdf案例的⼀些总结(多图推荐)由于⼯作所需,最近花时间研究了html转换为pdf的功能。

html转换为pdf的关键技术是如何处理⽹页中复杂的css样式,通过在⽹上收集资料,发现⽬前html 转换为pdf的解决⽅案主要分为三类:客户端模式:前后台调⽤客户端程序,利⽤客户端程序的功能完成pdf⽂件转换。

本次测试⼯具有:wkhtmltopdf和PhantomJS。

java jar包解析类模式:java代码解析css样式,翻译html⽂件为pdf⽂件。

本次测试类有:IText,Flying Sauser,PD4ML。

js 前端解析模式:js前端解析html⽂件为pdf⽂件,本次测试案例有:html2canvas。

本次针对⽹上介绍的⽅案,结合实际项⽬的需求,做⼀⼀测试,在性能和功能⽅⾯做如下分析。

1.测试页⾯介绍通过查看各个转换案例在⽹上的介绍,简单的html样式,⼀般的表格样式在做pdf⽂件转换时,以上的⽅案均⽀持。

但考虑到实际业务的需要,本次测试特意⽤到了bootstrap (v 3.3.6)的css样式,同时页⾯也应⽤了css3的新特性。

基于这样的新特性编写⼀个静态的html页⾯,html页⾯在浏览器中的展⽰效果如下:2.wkhtmltopdf测试技术特点:Wkhtmltopdf可以直接把浏览器中浏览的⽹页转换成⼀个pdf,他是⼀个把html页⾯转换成pdf的软件(需要安装在服务器上)。

使⽤时可通过java代码调⽤cmd指令完成⽹页转换为pdf的功能。

功能测试:直接在cmd⾥输⼊测试指令,可查看处理进度。

第⼀个参数:wkhtmltopdf.exe所在的路径第⼆个参数:需要转换为pdf的html页⾯第三个参数:pdf⽂件路径及⽂件名页⾯导出效果如下:测试说明:通过测试发现,wkhtmltopdf对bootstap的CSS样式整体⽀持较好。

对css3的新特性如圆形图⽚样式⽀持⾏不好。

部分页⾯样式会失效。

html导出pdf的四种方式

html导出pdf的四种方式

html导出pdf的四种⽅式将html页⾯导出为pdf⽂件并打印,可以直接在windows下使⽤Ctrl + P,苹果下⌘ + P。

如果需要⽤代码实现,可以考虑jsPDF、iText、wkhtmltopdf等⽅式。

以下是三种⽅式代码对⽐:⽅式优点缺点分页图⽚表格链接中⽂特殊字符、样式jsPDF 1、整个过程在客户端执⾏(不需要服务器参与),调⽤简单1、⽣成的pdf为图⽚形式,且内容失真⽀持⽀持⽀持不⽀持⽀持⽀持iText 1、功能基本可以实现,⽐较灵活2、⽣成pdf质量较⾼1、对html标签严;格,少⼀个结束标签就会报错;2、后端实现复杂,服务器需要安装字体;3、图⽚渲染⽐较复杂(暂时还没解决)⽀持⽀持⽀持⽀持⽀持⽀持wkhtmltopdf 1、调⽤⽅式简单(只需执⾏⼀⾏脚本);2、⽣成pdf质量较⾼1、服务器需要安装wkhtmltopdf环境;2、根据⽹址⽣成pdf,对于有权限控制的页⾯需要在拦截器进⾏处理⽀持⽀持⽀持⽀持⽀持⽀持从实⽤和质量综合考虑,个⼈推荐使⽤iText。

⽣成各种票据等⽂件质量好,代码也并不复杂。

以下是我使⽤三种⽅式测试的例⼦,IDE使⽤IDEA,Spring Boot结合Freemarker。

1.iTextiText是⼀个第三⽅报表java插件,可以在后端利⽤java随意⽣成、转化pdf⽂件,提供了很多api,⽐较灵活。

<!--PDF--><dependency><groupId>org.eclipse.birt.runtime.3_7_1</groupId><artifactId>com.lowagie.text</artifactId><version>2.1.7</version></dependency><dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf</artifactId><version>9.0.8</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.4.2</version></dependency><!--PDF end-->使⽤iText需要下载字体⽂件/*** iText⽣成PDF 需要字体⽀持** @param args* @throws IOException* @throws DocumentException*/public static void main(String[] args) throws IOException, DocumentException {ITextRenderer renderer = new ITextRenderer();ITextFontResolver fontResolver = renderer.getFontResolver();fontResolver.addFont("E:/下载/simsunttc/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);OutputStream os = new FileOutputStream("E:/create/" + UUID.randomUUID() + ".pdf");String htmlstr = "<!DOCTYPE html>\n" +"<html lang=\"en\">\n" +"<head>\n" +" <title>Title</title>\n" +"</head>\n" +"<body>\n" +"<table border=\"1\">\n" +" <tr>\n" +" <td>row 1, cell 1</td>\n" +" <td>row 1, cell 2</td>\n" +" </tr>\n" +" <tr>\n" +" <td>row 2, cell 1</td>\n" +" <td>row 2, cell 2</td>\n" +" </tr>\n" +"</table>\n" +"</body>\n" +"</html>";renderer.setDocumentFromString(htmlstr);yout();renderer.createPDF(os);}使⽤Itext可以⽅便的根据写好的html模板来填充内容,设置标题页眉添加背景图⽚等操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java 将Html转为PDF
本文介绍如何在Java程序中将html文件转换成PDF文件。

转换时,需要注意以下两点:一、需要使用转换插件
可根据不同的系统来下载对应的插件,下载地址:windows-x86.zip,windows-
x64.zip,macosx_x64.zip, 及linux_x64.zip,下载后需要将插件包解压到本地指定文件夹路径。

二、需要使用到PDF库,Spire.PDF for Java 版本: 3.6.6及以后的新版本
可通过2种方法导入jar:
1. 可以手动下载jar包,并解压将lib文件夹下的jar文件导入Java程序;
2. 创建Maven项目程序,并在pom.xml文件中配置Maven仓库路径,并指定Spire.PDF for Java的Maven依赖,然后导入jar。

最终jar文件导入效果如下:
Java 转换代码
import com.spire.pdf.graphics.PdfMargins;
import com.spire.pdf.htmlconverter.qt.HtmlConverter;
import com.spire.pdf.htmlconverter.qt.Size;
public class HtmlToPDF {
public static void main(String[] args) {
//定义需要转换的HTML
String url = "https:///";
//转换后的结果文档(结果文档保存在Java项目程序文件下)
String fileName = "HtmlToPDF.pdf";
//解压后的插件本地地址(这里是把插件包放在了Java项目文件夹下,也可以自定义其他本地路径)
String pluginPath =
"C:\\Users\\Administrator\\IdeaProjects\\Conversion_PDF\\plugins-windows-x64";
HtmlConverter.setPluginPath(pluginPath);
//调用方法转换到PDF并设置PDF尺寸
HtmlConverter.convert(url, fileName, true, 1000, new Size(700f, 800f), new PdfMargins(0));
}
}
Html转PDF效果如下,保留了原html格式、超链接等等:。

相关文档
最新文档