本博客主要演示使用 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 文件,但是效果有待商榷。我还是推荐直接把内容直接生成 pdf 文件,虽然代码多了点,排版效果却好了很多。
代码如下:
html 代码
Insert title here
PDF测试
软件名称
公司名称
公司地址 北京海淀
联系方式 123456789
公司简介
闹大目的是发手动阀哦士大夫爱的发声难道额我发 奥斯丁你发送的你发送的发阿奎那的方法, 啊的反思的。
软件名称 某某管理系统
公司名称 北京海淀科技有限公司
公司地址 北京海淀
联系方式 123456789
公司简介
闹大目的是发手动阀哦士大夫爱的发声难道额我发 奥斯丁你发送的你发送的发阿奎那的方法, 啊的反思的。
软件名称 某某管理系统
公司名称 北京海淀科技有限公司
公司地址 北京海淀
联系方式 123456789
公司简介
闹大目的是发手动阀哦士大夫爱的发声难道额我发 奥斯丁你发送的你发送的发阿奎那的方法, 啊的反思的。
ps:标签务必加上结束符,例如上面的
。
— – 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;
}
}