本博客主要演示使用 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 文件效果:
-
第一个表的软件名称和公司名称是空的,网页是通过 js 文件赋值,所以转换时无效。
-
表格整体没有居中,网页是通过 margin 实现的,但 pdf 没有显示效果。
-
css 设置的 line-height,网页是正常显示效果的。在 pdf 文件中,表格前两行可能因为内容是单行的,没有显示行高效果。在公司简介一栏,内容有两行是,显示了行高效果,但是,这也太丑了吧。
虽然通过直接转换可以更简单地生成 pdf 文件,但是效果有待商榷。我还是推荐直接把内容直接生成 pdf 文件,虽然代码多了点,排版效果却好了很多
。
代码如下:
html 代码
<!DOCTYPE html>
<html lang="en">
<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>
<h3>PDF测试</h3>
<table>
<td class="tab_attr">软件名称</td><td class="tab_content" id="itemName"> </td>
<td class="tab_attr">公司名称</td><td class="tab_content" id="unitName"> </td>
<td class="tab_attr">公司地址</td><td class="tab_content">北京海淀</td>
<td class="tab_attr">联系方式</td><td class="tab_content">123456789</td>
<td class="tab_attr">公司简介</td>
<td colspan="3">闹大目的是发手动阀哦士大夫爱的发声难道额我发 奥斯丁你发送的你发送的发阿奎那的方法, 啊的反思的。</td>
</table>
<br></br>
<table>
<td class="tab_attr">软件名称</td><td class="tab_content">某某管理系统</td>
<td class="tab_attr">公司名称</td><td class="tab_content">北京海淀科技有限公司</td>
<td class="tab_attr">公司地址</td><td class="tab_content">北京海淀</td>
<td class="tab_attr">联系方式</td><td class="tab_content">123456789</td>
<td class="tab_attr">公司简介</td>
<td colspan="3">闹大目的是发手动阀哦士大夫爱的发声难道额我发 奥斯丁你发送的你发送的发阿奎那的方法, 啊的反思的。</td>
</table>
<br></br>
<table>
<td class="tab_attr">软件名称</td><td class="tab_content">某某管理系统</td>
<td class="tab_attr">公司名称</td><td class="tab_content">北京海淀科技有限公司</td>
<td class="tab_attr">公司地址</td><td class="tab_content">北京海淀</td>
<td class="tab_attr">联系方式</td><td class="tab_content">123456789</td>
<td class="tab_attr">公司简介</td>
<td colspan="3">闹大目的是发手动阀哦士大夫爱的发声难道额我发 奥斯丁你发送的你发送的发阿奎那的方法, 啊的反思的。</td>
</table>
</body>
</html>
ps:标签务必加上结束符,例如上面的 </meta> </link> </br>
。
— – jsp 文件页跟 html 文件一样可以转换。
css 代码:
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;
本博客主要演示使用 itextpdf-5.4.3.jar 和 xmlworker-5.4.3.jar 把 Html 转换成 pdf 文件。但是效果还不如直接用内容生成的 pdf 。本 Demo 涉及了 html、css、js,不过 js 并不起作用 ,所以涉及 js 赋值的 html 文件还是别转换,直接取生成吧。可参阅上篇博客 Java 生成 pdf ;另外,css 文件似乎无法很好的转换。...
Java实现HTML转PDF的几种方法—主要解决中文乱码问题
第一:同事在做HTML转PDF中遇到乱码问题
*****************************************************************
她采用的itext方法实现HTML转存为PDF,代码如下:
1 import java.io.FileInputStream;
2 impor...
可以使用第三方库 iText 来实现将页面转换成 PDF。iText 是一个开源的 Java 类库,可以方便地创建、编辑和操作 PDF 文件。使用 iText 可以将 HTML 页面转换为 PDF,也可以将其他格式的文件转换为 PDF。
简单实现方式:
1. 导入iText jar 包
2. 使用 com.itextpdf.text.Document 类创建文档
3. 使用 com.itextpdf.text.html.simpleparser.HTMLWorker 类将 HTML 页面转换为文档
4. 使用 com.itextpdf.text.pdf.PdfWriter 类将文档写入 PDF 文件
示例代码如下
```java
import java.io.FileOutputStream;
import com.itextpdf.text.Document;
import com.itextpdf.text.html.simpleparser.HTMLWorker;
import com.itextpdf.text.pdf.PdfWriter;
public class ConvertHTMLtoPDF {
public static void main(String[] args) {
try {
String k = "<html><body> 您好,这是一个测试文档 </body></html>";
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream("Test.pdf"));
document.open();
HTMLWorker htmlWorker = new HTMLWorker(document);
htmlWorker.parse(new StringReader(k));
document.close();
System.out.println("PDF Created!");
} catch (Exception e) {
e.printStackTrace();
还可以使用其他第三方库如flying-saucer,pdfbox等。