Java 将word转为PDF的三种方式和处理在服务器上下载后乱码的格式_java word ...

打印 上一主题 下一主题

主题 511|帖子 511|积分 1533

如果这里找不到的话,可以使用下令 fc-list 查看一下有没有,如果没有大概出现该下令不可用的情况,那就需要先安装根本字体:使用下令:yum -y install fontconfig ,完成之后就能看到/user/share/fonts 了
2:找到Windows中的字体,将字体上传到这个 my-fonts中

这内里有很多字体,我们需要的是中文字体,可以选择性上传,选择需要的中文字体上传,比如宋体,要和你文件模板中字体一致就行。上传到my-fonts文件夹下
3:安装
接着根据当前目录下的字体创建scale文件,
切换到my-fonts目录下实行下令:mkfontscale
若提示mkfontscale command not found,则运行yum install mkfontscale
接着创建dir文件:mkfontdir
使用下令:vi /etc/fonts/fonts.conf 修改设置文件,添加:<dir>/usr/share/fonts/my-fonts</dir>
添加后:

然后运行:fc-cache
fc-list #查看字体列表
4:赋予权限
chmod 777 /usr/share/fonts/my-fonts
chmod 755 /usr/share/fonts/my-fonts/*
使用下令查看: fc-list :lang=zh
2:Word转PDF实现的几种方式

1:使用POI的方式将word转换为PDF
引入依赖:
  1. <dependency>
  2.       <groupId>fr.opensagres.xdocreport</groupId>
  3.       <artifactId>fr.opensagres.poi.xwpf.converter.pdf-gae</artifactId>
  4.       <version>2.0.1</version>
  5. </dependency>
复制代码
在关闭流之前添加并修改reponse中.docx为.pdf
  1. response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode("日报-"+datetime+".pdf", "UTF-8"));
  2. //转为PDF
  3. PdfOptions options = PdfOptions.create();
  4. PdfConverter.getInstance().convert(document, outStream, options);
  5. //下面再是转word里面最后的代码,关闭流
复制代码
2:使用aspose.words的Document方式将word转换为PDF
1:下载jar包:jar包下载
2:将jar包放入项目中resources目录下的lib文件夹中:

3:将jar包转为library

转换后就会出现上面图中箭头处的样子可以打开。
4:引入jar包依赖:
  1. <dependency>
  2.             <groupId>com.aspose.words</groupId>
  3.             <artifactId>aspose-words</artifactId>
  4.             <version>15.8.0</version>
  5.             <scope>system</scope>
  6.             <systemPath>${project.basedir}/src/main/resources/lib/aspose-words-15.8.0-jdk16.jar</systemPath>
  7. </dependency>
复制代码
在打包的依赖中添加:
  1.                         <plugin>
  2.                 <configuration>
  3.                     <includeSystemScope>true</includeSystemScope>
  4.                 </configuration>
  5.                         </plugin>
复制代码
5:转换
  1. 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>";
  2.                 //去除水印
  3.         ByteArrayInputStream is = new ByteArrayInputStream(s.getBytes());
  4.         License license = new License();
  5.         license.setLicense(is);
  6.                 //将XWPFDocument转换为InputStream
  7.         ByteArrayOutputStream b = new ByteArrayOutputStream();
  8.         //这里的document=XWPFDocument document,在下面的word转换中
  9.         document.write(b);
  10.         InputStream inputStream = new ByteArrayInputStream(b.toByteArray());
  11.         
  12.         //这里的Document 的引入是
  13.         //import com.aspose.words.Document;
  14.                 //import com.aspose.words.License;
  15.                 //import com.aspose.words.SaveFormat;
  16.         Document doc = new Document(inputStream);
  17.         doc.save(outStream, SaveFormat.PDF);
  18.         b.close();
  19.         inputStream.close();
  20.         //下面再是转word里面最后的代码,关闭流
复制代码
3:使用documents4j 的方式将word转换为PDF
1:引入依赖:
  1.         <!-- word 转 pdf   通过documents4j实现    -->
  2.         <dependency>
  3.             <groupId>com.documents4j</groupId>
  4.             <artifactId>documents4j-local</artifactId>
  5.             <version>1.0.3</version>
  6.         </dependency>
  7.         <dependency>
  8.             <groupId>com.documents4j</groupId>
  9.             <artifactId>documents4j-transformer-msoffice-word</artifactId>
  10.             <version>1.0.3</version>
  11.         </dependency>
复制代码
2:转换如下:
  1.                 //将XWPFDocument转换为InputStream
  2. **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
  3. **深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
  4. **因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
  5. ![img](https://img-blog.csdnimg.cn/img_convert/6e5af033d0ad418390566db235b8eca1.png)
  6. ![img](https://img-blog.csdnimg.cn/img_convert/f93c263fd16ef44fc634eebd68b0c63c.png)
  7. ![img](https://img-blog.csdnimg.cn/img_convert/5be9ba00d353db0b26f21bac84b07015.png)
  8. ![img](https://img-blog.csdnimg.cn/img_convert/3ca1691bb6f24f2d96348c6644290d6c.png)
  9. ![img](https://img-blog.csdnimg.cn/img_convert/90a0cb167d944bd48744cec7789c6824.png)
  10. **既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!**
  11. **由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
  12. **如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)**
  13. ![img](https://img-blog.csdnimg.cn/img_convert/47b3839a7fcc16b82ab9cc5b4cd38bda.jpeg)
  14. 为了做好运维面试路上的助攻手,特整理了上百道 **【运维技术栈面试题集锦】** ,让你面试不慌心不跳,高薪offer怀里抱!
  15. 这次整理的面试题,**小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。**
  16. ![](https://img-blog.csdnimg.cn/img_convert/d6035d202e9601aef2f7321456ee2e68.png)
  17. 本份面试集锦涵盖了
  18. *   **174 道运维工程师面试题**
  19. *   **128道k8s面试题**
  20. *   **108道shell脚本面试题**
  21. *   **200道Linux面试题**
  22. *   **51道docker面试题**
  23. *   **35道Jenkis面试题**
  24. *   **78道MongoDB面试题**
  25. *   **17道ansible面试题**
  26. *   **60道dubbo面试题**
  27. *   **53道kafka面试**
  28. *   **18道mysql面试题**
  29. *   **40道nginx面试题**
  30. *   **77道redis面试题**
  31. *   **28道zookeeper**
  32. **总计 1000+ 道面试题, 内容 又全含金量又高**
  33. *   **174道运维工程师面试题**
  34. > 1、什么是运维?
  35. > 2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
  36. > 3、现在给你三百台服务器,你怎么对他们进行管理?
  37. > 4、简述raid0 raid1raid5二种工作模式的工作原理及特点
  38. > 5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
  39. > 6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
  40. > 7、Tomcat和Resin有什么区别,工作中你怎么选择?
  41. > 8、什么是中间件?什么是jdk?
  42. > 9、讲述一下Tomcat8005、8009、8080三个端口的含义?
  43. > 10、什么叫CDN?
  44. > 11、什么叫网站灰度发布?
  45. > 12、简述DNS进行域名解析的过程?
  46. > 13、RabbitMQ是什么东西?
  47. > 14、讲一下Keepalived的工作原理?
  48. > 15、讲述一下LVS三种模式的工作过程?
  49. > 16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
  50. > 17、如何重置mysql root密码?
  51. [**一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!**](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)
  52. **AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**
  53. sdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)
  54. **AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张国伟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表