当前位置: 首页 > news >正文

word转pdf两种方式(免费+收费)

一、免费方式

优点:1、免费;2、在众多免费中挑选出的转换效果相对较好,并且不用像openOffice那样安装服务

缺点:1、对字体支持没有很好,需要安装字体库或者使用宋体(对宋体支持很好)2、对于使用freeMarker模板转化过来的doc无法读取转换

第一步:

        <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.poi.xwpf.converter.pdf-gae</artifactId><version>2.0.1</version></dependency>

第二步:

public static void main(String[] args) throws Exception {FileInputStream fileInputStream = new FileInputStream("D:\\test\\研判报告docx.docx");XWPFDocument xwpfDocument = new XWPFDocument(fileInputStream);
// 将word中字体转化为宋体,防止其他字体无法正常显示setFontType(xwpfDocument);FileOutputStream fileOutputStream = new FileOutputStream("D:\\test\\研判报告11.docx");PdfConverter.getInstance().convert(xwpfDocument,fileOutputStream,pdfOptions);fileInputStream.close();fileOutputStream.close();}/**** 将文档的文字设置为宋体 防止其他字体转pdf不显示* @Description:* @param xwpfDocument* @return:*/private static void setFontType(XWPFDocument xwpfDocument) {//转换文档中文字字体List<XWPFParagraph> paragraphs = xwpfDocument.getParagraphs();if(paragraphs != null && paragraphs.size()>0){for (XWPFParagraph paragraph : paragraphs) {List<XWPFRun> runs = paragraph.getRuns();if(runs !=null && runs.size()>0){for (XWPFRun run : runs) {run.setFontFamily("宋体");}}}}//转换表格里的字体 我也不想俄罗斯套娃但是不套真不能设置字体List<XWPFTable> tables = xwpfDocument.getTables();for (XWPFTable table : tables) {List<XWPFTableRow> rows = table.getRows();for (XWPFTableRow row : rows) {List<XWPFTableCell> tableCells = row.getTableCells();for (XWPFTableCell tableCell : tableCells) {List<XWPFParagraph> paragraphs1 = tableCell.getParagraphs();for (XWPFParagraph xwpfParagraph : paragraphs1) {List<XWPFRun> runs = xwpfParagraph.getRuns();for (XWPFRun run : runs) {run.setFontFamily("宋体");}}}}}}

二、收费方式:

除了收费没啥缺点

1、freemarker生成word模板

①、自己新建一个word文档,内容就按照需要的格式内容

②、word文档另存为,选择xml格式

③、修改xml后缀为ftl放在如图位置

 ④代码:

    public static void main(String[] args) throws Exception {//1.创建配置类Configuration configuration=new Configuration(Configuration.getVersion());//2.设置模板所在的目录configuration.setDirectoryForTemplateLoading(new File(".\\template"));//3.设置字符集configuration.setDefaultEncoding("utf-8");//4.加载模板Template template = configuration.getTemplate("研判报告docx.ftl");//5.创建数据模型Map map=new HashMap();map.put("name","姓名姓名");map.put("idCard","身份证号码");map.put("age","36");map.put("sex","男");Map<String, Object> data1 = new HashMap<>();data1.put("item",map);Writer out =new FileWriter(new File(".\\template\\研判报告docx.docx"));//7.输出template.process(data1, out);//8.关闭Writer对象out.close();}

2、word转pdf

①、新建asposeLicense.xml放到如图位置

 asposeLicense.xml内容:

<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>

②、代码

public static void main(String[] args) {String docPath = ".\\template\\研判报告docx.docx";String savePath = ".\\template\\研判报告docx4.pdf";word2pdf(docPath, savePath);}public static void word2pdf(String docPath, String savePath) {try {ClassPathResource resource = new ClassPathResource("asposeLicense.xml");InputStream inputStream = resource.getInputStream();License license = new License();license.setLicense(inputStream);com.aspose.words.Document document = new com.aspose.words.Document(docPath);document.save(new FileOutputStream(new File(savePath)), SaveFormat.PDF);} catch (Exception e) {e.printStackTrace();}}

http://www.lryc.cn/news/110706.html

相关文章:

  • 基于图像形态学处理的目标几何形状检测算法matlab仿真
  • python系列教程211——map
  • SW - 3D打印件最好带上浮雕文字标记
  • Kafka-副本数量设置
  • 解决github打不开的方法
  • 【云原生】Docker中容器管理常用所有命令
  • Flutter video_player点击重新播放
  • CSS3属性之text-overflow:ellipsis
  • 【深度学习_TensorFlow】梯度下降
  • C++使用 auto 自动推断类型
  • 【前端面试手撕题】call、bind、new、freeze、浅拷贝
  • MacBook Pro 16 M1 Max 升级 macOS Ventura 13.5 兼容测评
  • 实现5*5正方形网格x轴和y轴显示对应数值组件封装
  • 基于Matlab实现图像压缩技术(附上完整源码+图像+程序运行说明)
  • 棒球联盟对于市场发展规划·棒球1号位
  • ansible控制主机和受控主机之间免密及提权案例
  • flink1.17 eventWindow不要配置processTrigger
  • Python导出SqlServerl数据字典为excel
  • PB:DDE服务器函数
  • awk经典实战、正则表达式
  • Python脚本-时间盲注
  • 面试总结-Redis篇章(十)——Redis哨兵模式、集群脑裂
  • el-table那些事
  • kubernetes(一)
  • 计算机网络(6) --- https协议
  • (三)Node.js - 模块化
  • 502 bad gateway报错
  • Flink学习教程
  • flutter开发实战-实现音效soundpool播放音频及控制播放暂停停止设置音量
  • Sequence 2023牛客暑期多校训练营6 E