相关文章推荐
冷冷的松鼠  ·  vue中 ...·  18 小时前    · 
强悍的柚子  ·  docker中运行selenium-remo ...·  9 月前    · 
慷慨大方的胡萝卜  ·  android - ...·  10 月前    · 
聪明的领带  ·  jpa Page 1 of 0 ...·  1 年前    · 

本博客主要演示使用 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 文件效果

  1. 第一个表的软件名称和公司名称是空的,网页是通过 js 文件赋值,所以转换时无效。
  2. 表格整体没有居中,网页是通过 margin 实现的,但 pdf 没有显示效果。
  3. 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">&nbsp;</td>
			<td class="tab_attr">公司名称</td><td class="tab_content" id="unitName">&nbsp;</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实现HTMLPDF的几种方法—主要解决中文乱码问题 第一:同事在做HTMLPDF中遇到乱码问题 ***************************************************************** 她采用的itext方法实现HTML存为PDF,代码如下: 1 import java.io.FileInputStream; 2 impor...
可以使用第三方库 iText实现换成 PDFiText 是一个开源的 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等。