抽象工厂模式设计的一款工具项目,方便快速实现 html 转 PDF、doc 转 PDF 等功能
项目源代码:github/simple-convert
如何使用
-
使用 Maven 下载依赖
<dependency> <groupId>com.liumapp.simple.convert</groupId> <artifactId>simple-convert</artifactId> <version>v1.0.0</version> </dependency>
-
拷贝 repo 目录到本地项目中,否则会提示找不到 aspose 的 jar 包
当然,您也可以自行将 libs 目录下的 aspose 这个 jar 包部署到自己的 nexus 私服或者导入 maven 的本地仓库中
-
html 转 doc
-
通过文件目录转换
BasicConverter converter = new HtmlToPdfConverterFactory().getInstance(); String htmlFilePath = HtmlToPdfConverterTest.class.getClassLoader().getResource("test.html").getPath(); String pdfResultPath = "./result.pdf"; converter.convertByFilePath(htmlFilePath, pdfResultPath);
执行后将 htmlFilePath 所指向的 html 文件转换为 pdf 文件,并保存在 pdfResultPath 路径下
-
通过输入流转换
BasicConverter converter = new HtmlToPdfConverterFactory().getInstance(); String targetFilePath = HtmlToPdfConverterTest.class.getClassLoader().getResource("test.html").getPath(); InputStream is = new FileInputStream(targetFilePath); OutputStream os = new FileOutputStream(new File("./result2.pdf")); converter.convertByStream(is, os); os.flush(); is.close(); os.close();
将要转换的 html 文件作为输入流输出,输出流为要存储的 pdf 文件输出流,也可以使用 ByteArrayOutputStream 暂存在内存中
-
通过 base64 转换
BasicConverter converter = new HtmlToPdfConverterFactory().getInstance(); String targetFilePath = HtmlToPdfConverterTest.class.getClassLoader().getResource("test.html").getPath(); InputStream is = new FileInputStream(targetFilePath); String inputBase64 = Base64FileTool.inputStreamToBase64(is); String resultBase64 = converter.convertByBase64(inputBase64); is.close();
inputBase64 为 html 文件内容的 base64 值,输出的 resultBase64 为转换后的 pdf base64 值
-
直接传入 html 字符串转 pdf 文件
同通过 base64 转换一样,将 html 字符串加密为 base64 值,将转换后的 base64 解密存储即可得到 pdf 文件
BasicConverter converter = new HtmlToPdfConverterFactory().getInstance(); String htmlContents = "<h3>你的第一个html转PDF文档出来啦!!</h3>\n" + "<br>\n" + "<div style=\"color: aquamarine\">\n" + " 注意:html5以及css3的支持还不够完善!!!\n" + "</div>\n"; String inputBase64 = Base64.getEncoder().encodeToString(htmlContents.getBytes()); String resultBase64 = converter.convertByBase64(inputBase64); Base64FileTool.saveBase64File(resultBase64, "./result10.pdf");
Base64FileTool 这个类来自于 qtools-file 依赖
-
-
doc 转 pdf
-
通过文件目录转换
BasicConverter converter = new DocToPdfConverterFactory().getInstance(); converter.convertByFilePath("./data/test.doc", "./result4.pdf");
-
通过输入流转换
BasicConverter converter = new DocToPdfConverterFactory().getInstance(); FileInputStream is = new FileInputStream("./data/test.doc"); FileOutputStream os = new FileOutputStream("./result5.pdf"); converter.convertByStream(is, os); is.close(); os.close();
-
注意事项
-
在 pom.xml 中,不要使用 system scope 引入 jar 包,而要通过在项目设立一个 maven 本地仓库:repo 目录,将所需要的第三方 jar 包 deploy 进去(不能直接从 maven 下载,原因你懂的)
-
system scope 引入的包,在使用 jar-with-dependencies 打包时将不会被包含,可以使用 resources 将本地包打进 jar-with-dependencies
-
关于本地 repositor 的创建和使用,可以参考 这里
-
-
html 转 PDF 的功能还不够完善,不能完美支持:html5 + css3(或者说能够完美支持 html5 + css3 的破解版本还没有出来)
-
所有转换默认是以 A4 纸作为最终的 PDF 页面大小,如果要进行更改的话,请直接使用 BasicConverter 的 getDocument 和 getDocumentBuilder 方法,在获取到 Document 对象或者 DocumentBuilder 对象后,修改 pageSetup 的相关属性,具体请参考 aspose 的文档
或者直接参考这一段代码:
BasicConverter converter = new HtmlToPdfConverterFactory().getInstance(); DocumentBuilder builder = converter.getDocumentBuilder(); PageSetup pageSetup = builder.getPageSetup(); pageSetup.setPageWidth(2000); pageSetup.setPageHeight(100); String htmlFilePath = HtmlToPdfConverterTest.class.getClassLoader().getResource("test.html").getPath(); String pdfResultPath = "./result11.pdf"; converter.convertByFilePath(htmlFilePath, pdfResultPath); assertEquals(true, FileTool.isFileExists("./result11.pdf"));
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于