Java 根据URL,将网页转存为PDF文件

小编好久没更新文章了,最近实在太忙了。今天来更一篇“如何将网页转存为PED文件”,废话不多说,下面直接贴上代码:

小编用的maven,需要添加以下依赖:

<!-- url转pdf -->
<dependency>
	<groupId>org.xhtmlrenderer</groupId>
	<artifactId>flying-saucer-pdf-itext5</artifactId>
	<version>9.0.3</version>
</dependency>

UrlToPdfUtil.java:

package com.lrfun.util;

import java.io.FileOutputStream;
import java.io.OutputStream;

import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;

import com.itextpdf.text.pdf.BaseFont;

public class UrlToPdfUtil {

	//private static final String OUT_PUT_PDF_PATH = "/home/data/pdf/"; //pdf文件的存放路径(Linux)
	private static final String OUT_PUT_PDF_PATH = "C:/Users/Administrator/Desktop/pdf/"; //pdf文件的存放路径(windows)

	/**
	 * @Title 网页转存为PDF文件
	 * @param url 链接地址
	 * @param outputFileName 转存的PDF文件名
	 */
	public static void urlToPdf(String url, String outputFileName) {
		try {
			String folder = outputFileName.substring(0, 6);
			String outputFile = OUT_PUT_PDF_PATH + folder +"/"+ outputFileName;
			java.io.File targetFile = new java.io.File(outputFile);
			if (!targetFile.getParentFile().exists()) {
				targetFile.getParentFile().mkdirs(); // 创建父级文件路径
			}
			OutputStream os = new FileOutputStream(outputFile);
			ITextRenderer renderer = new ITextRenderer();
			renderer.setDocument(url);
			ITextFontResolver fontResolver = renderer.getFontResolver();
			//fontResolver.addFont("/usr/share/fonts/chinese/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); //Linux
			fontResolver.addFont("c:/Windows/Fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); //windows
			renderer.layout();
			renderer.createPDF(os);
			os.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		urlToPdf("http://www.lrfun.com/toPdf.html", "201905098888888.pdf");
	}
}

代码比较简单,但是有两个必须注意的点:

1.字体限制,要使用simsun字体(可点击下载),下载自行安装吧;

2.需要转为PDF的网页,必须遵守W3C标准,也就是说每个标签都必须闭合(如:img等标签的结尾必须要添加“/”),否则就会报错,详细请参考文件:http://www.lrfun.com/toPdf.html


欢迎转载,原文地址:http://www.lrfun.com/html/technology/java/2019/0509/137.html

上一篇:Java 扫描微信公众号二维码,关注并自动登录网站
下一篇:Java 企业微信会话内容(聊天记录)存档及获取媒体文件