文档章节

Java将HTML转化为PDF+获得页数+合并PDF

码家学院
 码家学院
发布于 2017/09/11 11:15
字数 583
阅读 92
收藏 3

最近公司用到了HTML转PDF的技术,这里就把用到的方式和技术在这里写一下,方便他人和自己以后有需要时进行。

首先将HTML转化成PDF: 现在有许多将HTML转化为PDF的方法:PD4ML,IText,Flying Sauser。

选择PD4ML原因:PD4ML实现html2pdf,速度快,纠错能力强,支持多种中文字体。相比较于IText和Flying Sauser方便许多

依赖包:pd4ml.jar fonts.jar pd4ml.jar ss_css2.jar
如果这里出现中文乱码的情况,请大家在src根目录下创建一个包fonts,在里面新建一个配置文件pd4fonts.properties 在配置文件中写

KaiTi_GB2312=SIMKAI.TTF
public class LLL_HTMLToPDF {
	public static void main(String[] args) throws Exception {
		File pdfFile = new File("D:/pdf/index.pdf");
		htmltopdf(pdfFile, "D:/pdf/index.html");
	}
	private static void htmltopdf(File outputPDFFile, String inputHTMLFileName) throws Exception {
		FileOutputStream fos = new FileOutputStream(outputPDFFile);
		PD4ML pd4ml = new PD4ML();
		pd4ml.setPageInsets(new Insets(40,30,30,40));
		pd4ml.setHtmlWidth(960);
		PD4PageMark p = new PD4PageMark();

		pd4ml.setPageHeader(p);
		pd4ml.setPageSize(PD4Constants.A4);
		pd4ml.useTTF("java:fonts", true);
		pd4ml.setDefaultTTFs("KaiTi_GB2312", "KaiTi_GB2312", "KaiTi_GB2312");
		pd4ml.enableDebugInfo();
		pd4ml.render("file:" + inputHTMLFileName,fos);
	}
}

到这里我们就可以看到在目录下有当前生成的pdf文件了。

下面讲一下pdf页数的获取 除开一些基础包之外,我们需要用到的包是:pdfbox-app-1.7.1.jar(注意用1.7.1才与我这个一样)

public class LLL_getPDFpage {
	public static void main(String[] args) {
		PDFParser parser;
		File file = new File("D:/pdf/printer/mergedTest.pdf");
		COSDocument cosDoc = null;
		PDDocument pdDoc = null;
		try {
			parser = new PDFParser(new FileInputStream(file));
			parser.parse();
			cosDoc = parser.getDocument();
			pdDoc = new PDDocument(cosDoc);
			System.out.println(pdDoc.getDocumentCatalog().getAllPages().size());
		} catch (Exception e) {
			e.printStackTrace();
			try {
				if (cosDoc != null)
					cosDoc.close();
				if (pdDoc != null)
					pdDoc.close();
			} catch (Exception e1) {
				e.printStackTrace();
			}
		}
	}
}

这里就可以打印出来当前pdf有多少页

然后下面说一下将pdf合并的问题 我们现在项目中需要将多个pdf合并成一个pdf文件,这里还是用的pdfbox包就可以

public class LLL_MergePDF {
	public static void main(String[] args) throws Exception {
		PDFMergerUtility mergePdf = new PDFMergerUtility();
		String folder = "D:/pdf/";
		String destinationFileName = "mergedTest.pdf";
		String[] filesInFolder = getFiles(folder);
		for (int i = 0; i < filesInFolder.length; i++)
		{
			mergePdf.addSource(folder + File.separator + filesInFolder[i]);
		}
		mergePdf.setDestinationFileName(folder + File.separator + destinationFileName);
		mergePdf.mergeDocuments();
		System.out.print("合并完成__LLL丶禾羊__博客");
	}
	private static String[] getFiles(String folder) throws IOException {
		File _folder = new File(folder);
		String[] filesInFolder;
		if (_folder.isDirectory()) {
			filesInFolder = _folder.list();
			return filesInFolder;
		} else {
			throw new IOException("Path is not a directory");
		}
	}
}

这里就是java关于pdf的一些操作,讲了java将html转化成pdf,获取pdf的页码,合并多个pdf到一个里面去,如果对你起到了帮助,请把它分享给更多人,谢谢!

© 著作权归作者所有

共有 人打赏支持
码家学院

码家学院

粉丝 16
博文 49
码字总数 30374
作品 0
成都
程序员
私信 提问
java操作PDF(PDFBOX和Itext框架)

java有很多可以操作pdf的框架,pdfbox和itext就是其中的两种 pdfbox有如下作用 提取文本,包括Unicode字符。 和Jakarta Lucene等文本搜索引擎的整合过程十分简单。 加密/解密PDF文档。 从PDF...

王小明123
2013/07/24
0
0
仿百度文库word文档在线阅读

第一种实现方案:openoffice+swftools+flexpaper 用户上传一个文档,格式有可能是doc、docx、xls、ppt、pdf 等。其他用户在前台查看的却是一个swf格式的flash文档。 flash文档可以起到防止用...

JellyFlower
2014/01/18
0
1
在jsp上显示pdf||网页直接打开PDF 在IE中显示pdf文档的方法及参数设置

一:在jsp上显示pdf <%@ page language="java" import="java.util.,java.io."pageEncoding="ISO-8859-1"%><%String path = request.getContextPath();String basePath = request.getScheme(......

文文1
2015/11/16
0
3
龙博方案网Big Faceless Java图形展现控件详细介绍及下载

Graph Library 是用于以Java创建图形和图表的Java类库。它使用全三维模式,可在 PNG、Flash、PDF或 SVG 中绘制二维或阴影型三维饼图、折线图、条形图等。使用 JSP 标签库 (JSP Tag Library) ...

javascript1
2014/05/16
0
0
Centos下安装类百度文库环境

使用php实现百度文库功能,网上搜索到的方案,实现doc转pdf,pdf转swf,然后显示出来。 这里简单的记录下,【doc转pdf,pdf转swf】两个功能的搭建流程。 doc转pdf 使用到下列程序(文件): Ap...

DragonFK
2013/02/20
0
1

没有更多内容

加载失败,请刷新页面

加载更多

重磅!亚洲诚信实力斩获:“2018 DigiCert/Symantec 年度最佳创新合作伙伴”大奖

2018年11月13日-16日,全球顶级数字证书厂商,DigiCert/Symantec亚太区圆桌会议(Asia Partner Roundtable 2018)在日本大阪隆重召开。 亚洲诚信作为DigiCert/Symantec亚太区白金战略合作伙伴和...

亚洲诚信
20分钟前
2
0
始于阿里,回归社区:阿里8个项目进入CNCF云原生全景图

摘要: 一群技术理想主义者,与太平洋另一边的技术高手们正面PK,在这场躲不开的战役中,一起认真一把。 破土而出的生命力,源自理想主义者心底对技术的信念。 云原生技术正席卷全球,云原生...

阿里云官方博客
27分钟前
3
0
修改this指向(bind、call 和 apply)

一、bind bind 的其中一个用法就是:绑定函数,使其无论怎么样调用都用相同的 this 示例: var obj = { getThis: function() { console.log(this); }};obj.getThis()...

文文1
今天
1
0
WSL安装JDK8

下载地址 JDK_URL https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html UNLIMITED_STRENGTH_URL https://www.oracle.com/technetwork/java/javase/down......

terwergreen
今天
4
0
sparkStreaming基本概念

概述 Spark Streaming 是 Spark Core API 的扩展, 它支持弹性的, 高吞吐的, 容错的实时数据流的处理. 数据可以通过多种数据源获取, 例如 Kafka, Flume, Kinesis 以及 TCP sockets, 也可以通过...

freeli
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部