当前位置:   article > 正文

JAVA针对word转pdf(多种方式)_pdfconverter.getinstance().convert

pdfconverter.getinstance().convert

针对java转pdf有很多中方法,而且实现方式也各种各样。有的实现起来很麻烦,也不知道是不是因为其实现过程中的方法是通用方法,然后看起来有点费劲。而且有些也有各自的局限(比如添加字体到系统或者只针对docx格式并不适用doc格式又或者要系统中要装office)。下面我主要介绍几种我尝试过的方法,都是简单的小白级操作。本文只针对word转pdf,即单纯预览功能,并不适用word转html再转pdf,个人感觉功能点已经具有针对性,就没有必要再弄那么复杂,如果有其他的需求则可以考虑这种两次转换的方式。

第一种 aspose.word进行转换(doc和docx都可以)

首先下好aspose.word(下载地址:提取码: i51v :不保证长期有效)aspose-words-15.8.0-jdk16.jar,网上搜下应该能找到,而且看了下,貌似相似的版本也是可以用的,直接搜一个maven仓库也能找到jar包下载(参考文章)。

1.如果是普通的工程直接添加到项目中目录下,右键Build Path->Add to Build Path。添加到项目中。

2.如果是maven工程,如果自己找到的maven版本能用就最好,不能用的话就用我下载地址提供的也可以,直接再CMD下运行下面的命令添加jar包到maven的本地仓库。(记得替换为自己的版本)

mvn install:install-file -Dfile=jar包的位置 -DgroupId=上面的groupId -DartifactId=上面的artifactId -Dversion=上面的version -Dpackaging=jar

添加到本地仓库后pom里面添加

  1. <dependency>
  2. <groupId>com.aspose</groupId>
  3. <artifactId>aspose-words</artifactId>
  4. <version>15.8.0</version>
  5. </dependency>

至此,jar包已经准备好,剩下的就是运行代码。

简化版本:

  1. try {
  2. String s = "<License><Data><Products><Product>Aspose.Total for Java</Product><Product>Aspose.Words for Java</Product></Products><EditionType>Enterprise</EditionType><SubscriptionExpiry>20991231</SubscriptionExpiry><LicenseExpiry>20991231</LicenseExpiry><SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber></Data><Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature></License>";
  3. ByteArrayInputStream is = new ByteArrayInputStream(s.getBytes());
  4. License license = new License();
  5. license.setLicense(is);
  6. com.aspose.words.Document document = new com.aspose.words.Document("替换为你的输入word文档绝对位置.doc");
  7. document.save(new FileOutputStream(new File("替换为你的输出pdf文档绝对位置.pdf");
  8. } catch (Exception e) {
  9. e.printStackTrace();
  10. }

以上代码直接添加到main函数就可以运行的,也可以添加到具体的函数或者单独抽取成一个方法。缺少的包都引入aspose.words的。以上代码相当于是加载了license,字符串s中的可以单独复制出来转化成一个license.xml,然后用代码加载,此处就不作详细描述(有简单的为毛要用复杂的)。

至此第一种方法已经算是说完了,最后评价一下优缺点。优点:doc和docx文档都能转化为pdf,并且使用方法简单且有效。缺点:不知道license是否是有有效期,所以最好还是用稍微低版本的,至少我测试的这个版本是没有问题的。

第二种 POI操作进行word转pdf(仅适用docx格式)

第一步操作还是引入包,至于具体的包就不给下载链接了,我给了maven依赖,直接去maven仓库里下载就可以了

  1. <dependency>
  2. <groupId>org.apache.poi</groupId>
  3. <artifactId>poi-scratchpad</artifactId>
  4. <version>3.11</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.poi</groupId>
  8. <artifactId>ooxml-schemas</artifactId>
  9. <version>1.1</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>com.itextpdf</groupId>
  13. <artifactId>itextpdf</artifactId>
  14. <version>5.4.3</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>fr.opensagres.xdocreport</groupId>
  18. <artifactId>org.apache.poi.xwpf.converter.pdf</artifactId>
  19. <version>1.0.6</version>
  20. </dependency>

执行转化过程的代码(有环境的话直接放函数中运行就可以,或者单独抽成一个函数也可以)

  1. XWPFDocument doc = new XWPFDocument(new FileInputStream("替换为你的输出docx路径.docx");// docx
  2. PdfOptions options = PdfOptions.create();
  3. // 中文字体处理
  4. options.fontProvider(new IFontProvider() {
  5. @Override
  6. public Font getFont(String familyName, String encoding, float size, int style, java.awt.Color color) {
  7. try {
  8. BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
  9. Font fontChinese = new Font(bfChinese, 12, style, color);
  10. if (familyName != null)
  11. fontChinese.setFamily(familyName);
  12. return fontChinese;
  13. } catch (Exception e) {
  14. e.printStackTrace();
  15. return null;
  16. }
  17. }
  18. });
  19. PdfConverter.getInstance().convert(doc, new FileOutputStream("替换为你的输出pdf路径.pdf"), options);// pdf

此时写完运行代码还不行,可能会报空指针错误什么的。原因是我们还没有加字体,我的解决办法是去maven仓库下载itext-asian,解压jar包中字体资源文件添加到resources下面(即将整个com包里面的字体都添加到resources下)。可能还有其他的方法,但是我用的这个可行,并且我再maven的pom文件中添加了itext-asian去运行,却没有用,但是把资源文件解压出来放到对应文件夹下倒是可以用。

此时运行代码应该就可以成功了,最后评价一下这种方式的优缺点。优点:不依赖付费第三方,安全又保障。缺点:只能转换docx,不能转换doc。

第三种 使用spire.doc(有水印,doc和docx都可以)

相关网址

打开上面的网址,安装和使用都说的挺明白的,但是我却没有从远程仓库下到自己本地来,原因我也搜了好久,但是没有解决。最后还是从他们的仓库直接下载的。他们官网给出的远程仓库地址可以直接用浏览器打开。

http://repo.e-iceblue.com/nexus/content/groups/public/

打开后可以直接查看相关jar包。官网提供的免费版本spire.doc.free我用了下,只能转换三页,好像网上说免费版的操作只能三页,而且第四页就是他们自己的宣传。我们如果通过maven下载不了对应的jar可以浏览器下载。而且更加直观的看到对应的版本。

下完之后可以通过上面第一种方法说到的CMD命令把jar包导到我们本地的仓库就可以使用了。不要使用免费版本,虽然都有水印,不是免费版的能操作全部pdf页面。然后按照他们API操作就可以了(链接

  1. Document doc = new Document();
  2. doc.loadFromFile("你的输入doc、docx文档地址.doc");
  3. doc.saveToFile("你的输出pdf地址.pdf", FileFormat.PDF);
  4. doc.close();

这种方法的优缺点也很明显了。优点:操作简单,代码简单,简直不能再简单了。缺点,有水印,但是感觉个人用起来还能接受。而且好像样式什么的保持的也还不错。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/388499
推荐阅读
相关标签
  

闽ICP备14008679号