Java 将Html转为PDF(一)
链接转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有以下几种方法:
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文件。
以下是其中一些常见的方法:
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转换器,将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文档
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的⼏种⽅法—主要解决中⽂乱码问题第⼀:同事在做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的关键技术是如何处理⽹页中复杂的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⽂件并打印,可以直接在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模板来填充内容,设置标题页眉添加背景图⽚等操作。
pdfbox html转pdf 注意事项 问题
pdfbox html转pdf 注意事项问题PDFBox是一个用于创建和处理PDF文件的Java库。
它具有将HTML转换为PDF的功能,可以用于在Java应用程序中将HTML网页转换为PDF文件。
在使用PDFBox进行HTML转PDF时,需要注意以下几个方面。
1. HTML结构和样式:由于PDF是一种基于矢量的图形格式,它不支持HTML中的所有特性和样式。
在将HTML转换为PDF时,应注意使用PDF支持的HTML和CSS特性。
不支持的特性可能会导致转换结果不符合预期。
2. 字体和字符集:在HTML中使用的字体和字符集可能在转换为PDF时不受支持。
为了确保转换结果准确,应将字体和字符集限制在PDF支持的范围内。
如果HTML中使用了不支持的字体或字符集,可以考虑在转换前进行替换或转换。
3. 图像和链接:在HTML转换为PDF时,图像和链接的处理也需要注意。
图像应该以正确的格式和路径被引用,并且可以在转换后正确显示。
链接应该被正确转换为PDF中的超链接,并且可以跳转到目标页面。
4. 排版和布局:PDF是一个固定布局的文档格式,而HTML是一种自适应布局的网页语言。
因此,在转换HTML到PDF时,需要考虑如何保持页面的排版和布局。
可以使用CSS样式或其他方法来达到所需的排版效果。
5. CSS样式:在HTML转换为PDF时,CSS样式是一个重要的方面。
应该注意使用PDF支持的CSS属性和值,以确保转换结果的一致性和准确性。
某些CSS样式可能在PDF中不起作用或以不同的方式显示,需要进行相应的调整和处理。
6. 大规模转换:如果需要批量转换大量的HTML文件到PDF,需要注意优化转换过程以提高效率和性能。
可以考虑使用多线程或分布式处理来加速转换过程。
还应监控系统资源的使用情况,以避免资源耗尽或引起其他问题。
7. 异常处理:在使用PDFBox进行HTML转PDF时,可能会遇到各种异常情况,例如无法解析HTML、文件读写错误等。
java html转pdf方案
java html转pdf方案在 Java 中,可以使用第三方库来实现将 HTML 转换为 PDF。
以下是一个使用Flying Saucer 和 iText 库的示例:1. 首先,需要在项目中添加 Flying Saucer 和 iText 的依赖:```java<dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf</artifactId><version>9.1.22</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.2</version></dependency>```2. 创建一个 HTML 文件,例如 `example.html`,并保存到本地文件系统中。
3. 使用以下代码将 HTML 文件转换为 PDF 文件:```javaimport java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;import org.xhtmlrenderer.pdf.ITextRenderer;public class HtmlToPdfConverter {public static void main(String[] args) throws Exception {// 输入 HTML 文件路径和输出 PDF 文件路径String inputPath = "example.html";String outputPath = "example.pdf";// 创建 ITextRenderer 对象并设置 PDF 输出流ITextRenderer renderer = new ITextRenderer();OutputStream outputStream = new FileOutputStream(new File(outputPath));renderer.setDocument(new File(inputPath));renderer.setOutputStream(outputStream);// 渲染 PDF 并关闭输出流yout();renderer.close();outputStream.close();}}```在上述代码中,我们创建了一个 `ITextRenderer` 对象,并将其配置为从输入HTML 文件渲染 PDF 文件,并将输出流设置为一个文件输出流。
电子凭证——Java生成Pdf
电⼦凭证——Java⽣成PdfJava⽣成Pdf技术⽅案,通过Html模板引擎进⾏数据渲染,通过iText⽣成Pdf,通过Jpedal⽣成图⽚。
解决CSS样式兼容问题,中⽂字体问题等。
1.背景在某些业务场景中,需要提供相关的电⼦凭证,⽐如⽹银/⽀付宝中转账的电⼦回单,签约的电⼦合同等。
⽅便⽤户查看,下载,打印。
⽬前常⽤的解决⽅案是,把相关数据信息,⽣成对应的pdf⽂件返回给⽤户。
本⽂源码:2.iTextiText是著名的开放源码的站点sourceforge⼀个项⽬,是⽤于⽣成PDF⽂档的⼀个java类库。
通过iText不仅可以⽣成PDF或rtf的⽂档,⽽且可以将XML、Html⽂件转化为PDF⽂件。
iText 开发⽂档:来个最简单的例⼦:添加依赖:<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.11</version></dependency>测试代码:JavaToPdfpackage com.lujianing.test;import com.itextpdf.text.Document;import com.itextpdf.text.DocumentException;import com.itextpdf.text.Paragraph;import com.itextpdf.text.pdf.PdfWriter;import java.io.FileNotFoundException;import java.io.FileOutputStream;/*** Created by lujianing on 2017/5/7.*/public class JavaToPdf {private static final String DEST = "target/HelloWorld.pdf";public static void main(String[] args) throws FileNotFoundException, DocumentException { Document document = new Document();PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(DEST));document.open();document.add(new Paragraph("hello world"));document.close();writer.close();}}运⾏结果:3.iText-中⽂⽀持iText默认是不⽀持中⽂的,因此需要添加对应的中⽂字体,⽐如⿊体simhei.ttf可参考⽂档:测试代码:JavaToPdfCNpackage com.lujianing.test;import com.itextpdf.text.Document;import com.itextpdf.text.DocumentException;import com.itextpdf.text.Font;import com.itextpdf.text.FontFactory;import com.itextpdf.text.Paragraph;import com.itextpdf.text.pdf.BaseFont;import com.itextpdf.text.pdf.PdfWriter;import java.io.FileNotFoundException;import java.io.FileOutputStream;/*** Created by lujianing on 2017/5/7.*/public class JavaToPdfCN {private static final String DEST = "target/HelloWorld_CN.pdf";private static final String FONT = "simhei.ttf";public static void main(String[] args) throws FileNotFoundException, DocumentException {Document document = new Document();PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(DEST));document.open();Font f1 = FontFactory.getFont(FONT, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); document.add(new Paragraph("hello world,我是鲁家宁", f1));document.close();writer.close();}}输出结果:4.iText-Html渲染在⼀些⽐较复杂的pdf布局中,我们可以通过html去⽣成pdf可参考⽂档:添加依赖:<dependency><groupId>com.itextpdf.tool</groupId><artifactId>xmlworker</artifactId><version>5.5.11</version></dependency>添加模板:template.html<!DOCTYPE html><html><head><meta charset="UTF-8"/><title>Title</title><style>body{font-family:SimHei;}.red{color: red;}</style></head><body><div>你好,鲁家宁</div></body></html>测试代码:JavaToPdfHtmlpackage com.lujianing.test;import com.itextpdf.text.Document;import com.itextpdf.text.DocumentException; import com.itextpdf.text.pdf.PdfWriter;import com.itextpdf.tool.xml.XMLWorkerFontProvider; import com.itextpdf.tool.xml.XMLWorkerHelper; import com.lujianing.test.util.PathUtil;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.nio.charset.Charset;/*** Created by lujianing on 2017/5/7.*/public class JavaToPdfHtml {private static final String DEST = "target/HelloWorld_CN_HTML.pdf";private static final String HTML = PathUtil.getCurrentPath()+"/template.html";private static final String FONT = "simhei.ttf";public static void main(String[] args) throws IOException, DocumentException {// step 1Document document = new Document();// step 2PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(DEST));// step 3document.open();// step 4XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS); fontImp.register(FONT);XMLWorkerHelper.getInstance().parseXHtml(writer, document,new FileInputStream(HTML), null, Charset.forName("UTF-8"), fontImp);// step 5document.close();}}输出结果:需要注意:1.html中必须使⽤标准的语法,标签⼀定需要闭合2.html中如果有中⽂,需要在样式中添加对应字体的样式5.iText-Html-Freemarker渲染在实际使⽤中,html内容都是动态渲染的,因此我们需要加⼊模板引擎⽀持,可以使⽤FreeMarker/Velocity,这⾥使⽤FreeMarker举例添加FreeMarke依赖:<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.19</version></dependency>添加模板:template_freemarker.html<!DOCTYPE html><html><head><meta charset="UTF-8"/><title>Title</title><style>body{font-family:SimHei;}.blue{color: blue;}</style></head><body><div>你好,${name}</div></body></html>测试代码:JavaToPdfHtmlFreeMarkerpackage com.lujianing.test;import com.itextpdf.text.Document;import com.itextpdf.text.DocumentException;import com.itextpdf.text.pdf.PdfWriter;import com.itextpdf.tool.xml.XMLWorkerFontProvider;import com.itextpdf.tool.xml.XMLWorkerHelper;import com.lujianing.test.util.PathUtil;import freemarker.template.Configuration;import freemarker.template.Template;import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.StringWriter;import java.io.Writer;import java.nio.charset.Charset;import java.util.HashMap;import java.util.Map;/*** Created by lujianing on 2017/5/7.*/public class JavaToPdfHtmlFreeMarker {private static final String DEST = "target/HelloWorld_CN_HTML_FREEMARKER.pdf";private static final String HTML = "template_freemarker.html";private static final String FONT = "simhei.ttf";private static Configuration freemarkerCfg = null;static {freemarkerCfg =new Configuration();//freemarker的模板⽬录try {freemarkerCfg.setDirectoryForTemplateLoading(new File(PathUtil.getCurrentPath())); } catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) throws IOException, DocumentException {Map<String,Object> data = new HashMap();data.put("name","鲁家宁");String content = JavaToPdfHtmlFreeMarker.freeMarkerRender(data,HTML);JavaToPdfHtmlFreeMarker.createPdf(content,DEST);}public static void createPdf(String content,String dest) throws IOException, DocumentException {// step 1Document document = new Document();// step 2PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));// step 3document.open();// step 4XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS); fontImp.register(FONT);XMLWorkerHelper.getInstance().parseXHtml(writer, document,new ByteArrayInputStream(content.getBytes()), null, Charset.forName("UTF-8"), fontImp);// step 5document.close();}/*** freemarker渲染html*/public static String freeMarkerRender(Map<String, Object> data, String htmlTmp) {Writer out = new StringWriter();try {// 获取模板,并设置编码⽅式Template template = freemarkerCfg.getTemplate(htmlTmp);template.setEncoding("UTF-8");// 合并数据模型与模板template.process(data, out); //将合并后的数据和模板写⼊到流中,这⾥使⽤的字符流out.flush();return out.toString();} catch (Exception e) {e.printStackTrace();} finally {try {out.close();} catch (IOException ex) {ex.printStackTrace();}}return null;}}输出结果:⽬前为⽌,我们已经实现了iText通过Html模板⽣成Pdf的功能,但是实际应⽤中,我们发现iText并不能对⾼级的CSS样式进⾏解析,⽐如CSS中的position属性等,因此我们要引⼊新的组件6.Flying Saucer-CSS⾼级特性⽀持Flying Saucer is a pure-Java library for rendering arbitrary well-formed XML (or XHTML) using CSS 2.1 for layout and formatting, output to Swing panels, PDF, and images.Flying Saucer是基于iText的,⽀持对CSS⾼级特性的解析。
Html转pdf(JAVA)
Html转pdf(JAVA)html转pdf⼯具类/*** HTML转PDF的⼯具类*/SystemPath(获取路径,需要⾃⼰处理下)public class ConverterHTMLToPDF {private static Logger logger = Logger.getLogger(ConverterHTMLToPDF.class.getName());public void converterHTMLToPDF(String content, String myRandom){String toPdfExeHome = "";ponent.config.ConfigXMLReader reader=new ponent.config.ConfigXMLReader();toPdfExeHome = reader.getAttribute("topdftools", "topdfhome");String osName = System.getProperties().getProperty("").toUpperCase();String htmlFile_temp_path = SystemPath.getRootFilePath()+File.separator+"platform"+File.separator+"custom"+File.separator+"custom_form"+File.separator+"run"+File.separator+"export2html_temp.html"; htmlFile_temp_path=SystemPath.getRootFilePath()+File.separator+"platform"+File.separator+"custom"+File.separator+"custom_form"+File.separator+"run"+File.separator+"export2html_govtemp.html"; logger.debug("临时HTML⽂件"+htmlFile_temp_path);String fileContent = "";try {fileContent = mons.io.FileUtils.readFileToString(new File(htmlFile_temp_path), "UTF-8");} catch (IOException e) {e.printStackTrace();}fileContent=fileContent.replace("[htmlcontent]",content);String temppath=SystemPath.getRootFilePath()+File.separator+"upload"+File.separator+"tempfile";String htmlName=myRandom+".html";String pdfName=myRandom+".pdf";//pdfName="export2pdf_temp.pdf";String htmlFile_path=temppath+File.separator+"temphtml"+File.separator+htmlName;String pdfFile_path=temppath+File.separator+"temppdf"+File.separator+pdfName;logger.debug("HTML的路径:"+htmlFile_path+",PDF⽂件路径"+pdfFile_path);try {mons.io.FileUtils.writeStringToFile(new File(htmlFile_path), fileContent, "UTF-8");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}Runtime r = Runtime.getRuntime();try {Process pro = null;if (osName.startsWith("WIN")){pro = r.exec( toPdfExeHome+"\\wkhtmltopdf.exe "+htmlFile_path+" "+pdfFile_path);}else{logger.debug("linux tttt:"+toPdfExeHome+File.separator+"wkhtmltopdf "+htmlFile_path+" "+pdfFile_path);pro = r.exec( toPdfExeHome+File.separator+"wkhtmltopdf "+htmlFile_path+" "+pdfFile_path);}new DoOutput(pro.getInputStream()).start();new DoOutput(pro.getErrorStream()).start();try {pro.waitFor();} catch (InterruptedException e) {e.printStackTrace();}} catch (IOException eee) {eee.printStackTrace();}}/*** 把⾃定义流程的html转换成pdf* @param htmlFile html⽂件* @param pdfFile pdf⽂件*/public void converterArchivesFileHTMLToPDF(File htmlFile,File pdfFile){String toPdfExeHome = "";ponent.config.ConfigXMLReader reader=new ponent.config.ConfigXMLReader();toPdfExeHome = reader.getAttribute("topdftools", "topdfhome");String osName = System.getProperties().getProperty("").toUpperCase();String htmlFile_path= htmlFile.getAbsolutePath();String pdfFile_path= pdfFile.getAbsolutePath();logger.debug("HTML的路径:"+htmlFile_path+",PDF⽂件路径"+pdfFile_path);Runtime r = Runtime.getRuntime();try {Process pro = null;if (osName.startsWith("WIN")){pro = r.exec( toPdfExeHome+"\\wkhtmltopdf.exe "+htmlFile_path+" "+pdfFile_path);}else{logger.debug("linux tttt:"+toPdfExeHome+File.separator+"wkhtmltopdf "+htmlFile_path+" "+pdfFile_path);pro = r.exec( toPdfExeHome+File.separator+"wkhtmltopdf "+htmlFile_path+" "+pdfFile_path);}new DoOutput(pro.getInputStream()).start();new DoOutput(pro.getErrorStream()).start();try {pro.waitFor();} catch (InterruptedException e) { e.printStackTrace();}} catch (IOException eee) {eee.printStackTrace();}}。
calibre html 转pdf java
calibre html 转pdf java使用Calibre进行HTML转PDF的Java实现过程大致如下:首先,你需要确保你已经安装了Calibre。
你可以从它的官方网站下载并安装它。
然后,你可以使用Java的`Runtime.getRuntime().exec()`方法来执行Calibre命令。
以下是一个简单的示例:```javaimport java.io.*;public class HtmlToPdf {public static void main(String[] args) {try {// 你的HTML文件路径String htmlFilePath = "/path/to/your/html/file.html";// 转换后的PDF文件路径String pdfFilePath = "/path/to/output/file.pdf";// 构建Calibre命令String calibreCommand = "calibre -z -o'file:///" + htmlFilePath + "' '" + pdfFilePath + "'";// 执行命令Process process = Runtime.getRuntime().exec(calibreCommand);// 读取命令的输出BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));String line;while ((line = reader.readLine()) != null) {System.out.println(line);}// 等待命令执行完成int exitCode = process.waitFor();System.out.println("Calibre command exited with code " + exitCode);} catch (IOException | InterruptedException e) {e.printStackTrace();}}}```注意,你需要将`htmlFilePath`和`pdfFilePath`替换为你实际的文件路径。
Java实现HTML页面转PDF解决方案(转)
Java实现HTML页⾯转PDF解决⽅案(转)public boolean convertHtmlToPdf(String inputFile, String outputFile)throws Exception {OutputStream os = new FileOutputStream(outputFile);ITextRenderer renderer = new ITextRenderer();String url = new File(inputFile).toURI().toURL().toString();renderer.setDocument(url);// 解决中⽂⽀持问题ITextFontResolver fontResolver = renderer.getFontResolver();fontResolver.addFont("C:/Windows/Fonts/SIMSUN.TTC", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//解决图⽚的相对路径问题renderer.getSharedContext().setBaseURL("file:/D:/");yout();renderer.createPDF(os);os.flush();os.close();return true;}上⾯这段代码是这样的,输⼊⼀个HTML地址URL = inputFile,输⼊⼀个要输出的地址,就可以在输出的PDF地址中⽣成这个PDF。
注意事项:1.输⼊的HTML页⾯必须是标准的XHTML页⾯。
页⾯的顶上必须是这样的格式:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml">并且HTML页⾯的语法必须是⾮常严谨的,所有标签都必须闭合等等(由于flying-Saucer做了XML解析的⼯作,不严谨会报错的。
Java HTML直接导出PDF
Java HTML直接导出PDFJava HTML直接导出PDF对于java中如何从html中直接导出pdf,有很多的开源代码,这里个人用itext转。
首先需要的包有:core-renderer-1.0.jarcore-renderer-R8pre1.jarcore-renderer.jariText-2.0.8.jarjtidy-4aug2000r7-dev.jarTidy.jariTextAsian.jarjava代码的话就比较简单了。
具体是先用Tidy将html转换为xhtml,将xhtml转换为其它各种格式的。
虽然在转化到pdf时也是用的iText。
代码如下:Java代码//struts1.x中Java代码elseif("Html2Pdf".equalsIgnoreCase(action)){ exportPdfF ile("http://localhost:8080/jsp/test.jsp"); return null; } // 导出pdf add by huangt 2012.6.1 public File exportPdfFile(String urlStr) throws BaseException{ // String outputFile = this.fileRoot + "/" +// ServiceConstants.DIR_PUBINFO_EXPORT + "/" + getFileName() + ".pdf"; String outputFile = "d:/test3.pdf"; OutputStream os; try { os = new FileOutputStream(outputFile); ITextRenderer renderer = new ITextRenderer();String str = getHtmlFile(urlStr);renderer.setDocumentFromString(str); ITextFontResolver fontResolver =renderer.getFontResolver();fontResolver.addFont("C:/WINDOWS/Fonts/SimSun.ttc",B aseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);// 宋体字fontResolver.addFont("C:/WINDOWS/Fonts/Arial.ttf",Base Font.IDENTITY_H, BaseFont.NOT_EMBEDDED);// 宋体字yout();renderer.createPDF(os);System.out.println("转换成功!"); os.flush(); os.close(); return newFile(outputFile); } catch (FileNotFoundException e) { // logger.error("不存在文件!" +e.getMessage()); throw new BaseException(e); } catch (DocumentExceptione) { // logger.error("生成pdf时出错了!" + e.getMessage()); throw new BaseException(e); } catch (IOException e){ // logger.error("pdf出错了!" +e.getMessage()); throw new BaseException(e); } } // 读取页面内容add by huangt 2012.6.1 public String getHtmlFile(String urlStr) throws BaseException{ URL url; try { if (urlStr.indexOf("?") != -1) { urlStr = urlStr + "&locale=" + LocaleContextHolder.getLocale().toString();} else { urlStr = urlStr + "?locale="+LocaleContextHolder.getLocale().toString();} url = new URL(urlStr); URLConnection uc = url.openConnection();InputStream is = uc.getInputStream();Tidy tidy = new Tidy(); OutputStream os2 = new ByteArrayOutputStream();tidy.setXHTML(true); // 设定输出为xhtml(还可以输出为xml)tidy.setCharEncoding(Configuration.UTF8); // 设定编码以正常转换中文tidy.setTidyMark(false); // 不设置它会在输出的文件中给加条meta信息tidy.setXmlPi(true); // 让它加上<?xml version="1.0"?> tidy.setIndentContent(true); // 缩进,可以省略,只是让格式看起来漂亮一些tidy.parse(is, os2);is.close(); // 解决乱码--将转换后的输出流重新读取改变编码String temp; StringBuffer sb = new StringBuffer();BufferedReader in = new BufferedReader(new InputStreamReader( new ByteArrayInputStream( (( ByteArrayOutputStream) os2).toByteArray()),"utf-8")); while ((temp = in.readLine()) != null){ sb.append(temp); } return sb.toString(); } catch (IOException e) { // logger.error("读取客户端网页文本信息时出错了" + e.getMessage()); throw new BaseException(e); } }为了解决包的问题,加上Maven <!-- pdf导出-->Xml代码<dependency><groupId>com.lowagie</groupId><artifactId>itext</artifactId><version>2.1.7</version> </dependency> <dependency><groupId>org.xhtmlrenderer.flyingsaucer</groupId& gt; <artifactId>pdf-renderer</artifactId><version>1.0</version> </dependency> <dependency><groupId>jtidy</groupId><artifactId>jtidy</artifactId><version>4aug2000r7-dev</version><type>jar</type><scope>compile</scope> </dependency> <dependency><groupId>net.sf.barcode4j</groupId><artifactId>barcode4j-light</artifactId><version>2.0</version> </dependency> <dependency><groupId>avalon-framework</groupId><artifactId>avalon-framework-impl</artifactId> <version>4.2.0</version> </dependency><!-- pdf -->另外附上稍微复杂的PDFUtils.java文件,由于没时间就不做整理解释了!见下载附件!。
PDF技术-Java实现Html转PDF文件
PDF 技术-Java 实现Html 转PDF ⽂件html 转换为pdf 的关键技术是如何处理⽹页中复杂的css 样式、以及中⽂乱码处理。
各实现对⽐表于Windows 平台进⾏测试: 基于IText 基于FlyingSaucer 基于WKHtmlToPdf 基于pd4ml 跨平台性跨平台跨平台跨平台跨平台是否安装软件否否需安装WKHtmlToPdf 否是否收费免费免费免费收费转换Html效率速度快未测速度慢。
相⽐URL 来说,效率较慢。
能忽略⼀些html 语法或资源是否存在问题。
速度快。
部分CSS 样式不⽀持。
效果存在样式失真问题。
对html 语法有⼀定要求存在样式失真问题。
对html 语法有较⾼要求。
失真情况较⼩⼤部分⽹页能按Chome 浏览器显⽰的页⾯转部分CSS 样式有问题。
转换URL 效率未测未测效率不是特别⾼未测效果未测未测部分⽹页由于其限制,或将出现html ⽹页不完整。
未测优点不需安装软件、转换速度快不需安装软件、转换速度快⽣成PDF 质量⾼不需要安装软件、转换速度快缺点对html 标签严格,少⼀个结束标签就会报错;服务器需要安装字体对html 标签严格,少⼀个结束标签就会报错;服务器需要安装字体需要安装软件、时间效率不⾼对部分CSS 样式不⽀持。
评价综合:使⽤WKHtmlToPdf 效果(样式)最好。
但速度较慢(对于⽂件来说)。
其余均有⼤⼤⼩⼩的失真问题。
分页图⽚表格链接中⽂特殊字符整体样式速度IText ⽀持⽀持⽀持⽀持⽀持⽀持失真问题快FlyingSaucer 未知未知未知未知未知未知未知快WKHtmlToPdf ⽀持⽀持⽀持⽀持⽀持⽀持很好慢pd4ml ⽀持⽀持⽀持⽀持⽀持⽀持失真问题快html ⽹页完整转换为pdf ,所有的⽅案均有不⾜。
itext 有时并不能满⾜需求,不能兼容html 的样式,且从html 页⾯导出的图⽚到pdf 中也并不好处理。
Flying Sauser 实现html2pdf ,纠错能⼒差,⽀持多种中⽂字体(部分样式不能识别),且对html 的格式也是⼗分的严格,如果⽤⼀种模版的话⽤Flying Sauser 技术倒是不错的选择,但对于不规则的html 导出pdf 就并不是那么的适⽤。
java获取数据并转换为pdf的方法
java获取数据并转换为pdf的方法Java中可以使用第三方库iText来生成PDF文件。
下面是一个简单的示例代码,演示如何使用iText生成PDF文件并将数据写入其中:javaimport java.io.FileOutputStream;import com.itextpdf.text.Document;import com.itextpdf.text.Element;import com.itextpdf.text.Paragraph;import com.itextpdf.text.pdf.PdfWriter;public class PDFGenerator {public static void main(String[] args) throws Exception {// 创建PDF文档Document document = new Document();PdfWriter.getInstance(document, new FileOutputStream("example.pdf"));// 打开文档document.open();// 写入数据Paragraph paragraph = new Paragraph("Hello World!");document.add(paragraph);// 关闭文档document.close();}}在上面的代码中,我们首先创建了一个PDF文档对象,然后使用PdfWriter类将其写入到文件中。
接下来,我们打开文档,创建一个包含文本"Hello World!"的段落,并将其添加到文档中。
最后,我们关闭文档。
执行该程序后,将生成一个名为"example.pdf"的PDF文件,其中包含文本"Hello World!"。
需要注意的是,iText库需要单独下载并添加到Java项目中。
html转pdf 分页原理
html转pdf 分页原理HTML转PDF时的分页原理涉及到模拟浏览器渲染和布局的过程,然后根据纸张大小、页面边距等因素将内容切割并分配到不同的PDF页面上。
在JavaScript库中如html2canvas和jspdf实现这一功能时,主要步骤如下:html2canvas:1.html2canvas用于将HTML元素转化为图片(通常为PNG格式)。
它通过遍历DOM树,计算每个元素的位置、样式和其他属性,并使用Canvas API来绘制页面内容。
2.分页处理不是html2canvas的核心功能,但它会尽可能地捕捉整个可见视口的内容。
jspdf:1.jspdf是一个纯JavaScript编写的PDF生成库,它可以创建、修改PDF文档。
2.当需要进行分页时,首先利用html2canvas抓取的网页截图或直接处理HTML内容后,将其分割成适合单个PDF页面的部分。
3.在将图片或渲染后的文本添加到PDF时,jspdf会检查当前页面是否已满(基于指定的页面尺寸和内容高度),如果满则自动创建新的一页,并继续添加内容。
具体的分页算法可能包括以下步骤:•初始化PDF页面设置,包括页面大小、边距等。
•使用html2canvas逐部分或整体捕获HTML内容并转换为位图或可直接写入PDF的数据结构。
•将捕获的内容按照从上至下的顺序,按需插入到PDF页面中。
•当内容的高度接近或超过一页的可用空间时,计算出合适的断点并将剩余内容移动到下一页。
•循环这个过程直到所有内容都被正确分页并添加到PDF文件中。
需要注意的是,由于不同浏览器对CSS样式的解释可能会有细微差别,以及PDF本身的局限性,在复杂布局下实现精确的分页效果可能较为复杂,需要针对具体情况进行调整优化。
JavaScript+Java实现HTML页面转为PDF文件保存的方法
JavaScript+Java实现HTML页⾯转为PDF⽂件保存的⽅法需求是⼀个导出pdf的功能,多⽅奔⾛终于实现了,⾛了不少弯路,⽽且怀疑现在这个⽅法仍是弯的。
有个jsPDF 插件可以在前端直接⽣成pdf,很简便,但不⽀持IE。
前端:⾸先引⼊ html2canvas.jshtml2canvas(document.body, { //截图对象//此处可配置详细参数onrendered: function(canvas) { //渲染完成回调canvascanvas.id = "mycanvas";// ⽣成base64图⽚数据var dataUrl = canvas.toDataURL('image/png'); //指定格式,也可不带参数var formData = new FormData(); //模拟表单对象formData.append("imgData",convertBase64UrlToBlob(dataUrl)); //写⼊数据var xhr = new XMLHttpRequest(); //数据传输⽅法xhr.open("POST", "../bulletin/exportPdf"); //配置传输⽅式及地址xhr.send(formData);xhr.onreadystatechange = function(){ //回调函数if(xhr.readyState == 4){if (xhr.status == 200) {var back = JSON.parse(xhr.responseText);if(back.success == true){alertBox({content: 'Pdf导出成功!',lock: true,drag: false,ok: true});}else{alertBox({content: 'Pdf导出失败!',lock: true,drag: false,ok: true});}}}};}});//将以base64的图⽚url数据转换为Blobfunction convertBase64UrlToBlob(urlData){//去掉url的头,并转换为bytevar bytes=window.atob(urlData.split(',')[1]);//处理异常,将ascii码⼩于0的转换为⼤于0var ab = new ArrayBuffer(bytes.length);var ia = new Uint8Array(ab);for (var i = 0; i < bytes.length; i++) {ia[i] = bytes.charCodeAt(i);}return new Blob( [ab] , {type : 'image/png'});}兼容性:Firefox 3.5+, Chrome, Opera, IE10+不⽀持:iframe,浏览器插件,Flash跨域图⽚需要在跨域服务器header加上允许跨域请求access-control-allow-origin: * access-control-allow-credentials: truesvg图⽚不能直接⽀持,已经有补丁包了,不过我没有试过。
java xhtmlrenderer 使用指南
文章标题:Java XHTMLRenderer 使用指南在软件开发领域,Java语言拥有广泛的应用,尤其在Web开发和企业级应用开发中,Java是首选的语言之一。
而在Java开发中,XHTMLRenderer是一个非常重要的工具,它可以将XML和HTML文件转换为PDF格式,为企业级应用提供了便利的文档输出功能。
接下来,我将带你深入了解Java XHTMLRenderer的使用指南。
在本指南中,我们将按照从简到繁、由浅入深的方式,来帮助你更好地理解和应用Java XHTMLRenderer。
1. 什么是Java XHTMLRenderer?Java XHTMLRenderer是一个用于将XML和HTML文件转换为PDF 格式的开源工具库。
它基于Java语言和iText库,可以在Java应用中方便地实现将动态生成的HTML内容转换为PDF文件的功能。
使用Java XHTMLRenderer,开发人员可以轻松地创建高质量的PDF文档,为企业级应用的文档输出提供了便利和灵活性。
2. 如何使用Java XHTMLRenderer?在使用Java XHTMLRenderer之前,首先需要导入相应的依赖库,包括XHTMLRenderer和iText。
可以通过几行简单的代码来实现将HTML内容转换为PDF文件的功能。
以下是一个简单的示例代码:```javaString htmlContent = "<html><body><h1>Hello,World!</h1></body></html>";String outputFile = "output.pdf";OutputStream os = new FileOutputStream(outputFile); ITextRenderer renderer = new ITextRenderer();renderer.setDocumentFromString(htmlContent);yout();renderer.createPDF(os);os.close();```通过上述代码,我们可以将一个简单的HTML内容转换为PDF文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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格式、超链接等等:。