poi中word中表格跨列合并以及不兼容wps问题,java下 linux下word转pdf 问题解决
最近需要在word中绘制表格,绘制完成后发现 wps不支持poi的跨列合并,百度没有找到好的解决办法。自己在office中把文档转换为doc格式之后发现wps可以正常显示word中的表格了,同时之前微信预览不到表格的问题也解决了。
poi版本为3.17 以下是跨列以及跨行合并代码 之前网上搜到的 忘记原作者是哪位大佬了
maven
<!--poi 用于操作word-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.3</version>
</dependency>
// word跨列合并单元格
public void mergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) {
for (int cellIndex = fromCell; cellIndex <= toCell; cellIndex++) {
XWPFTableCell cell = table.getRow(row).getCell(cellIndex);
if (cellIndex == fromCell) {
// The first merged cell is set with RESTART merge value
cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
} else {
// Cells which join (merge) the first one, are set with CONTINUE
cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
}
}
}
// word跨行并单元格
public void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {
for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) {
XWPFTableCell cell = table.getRow(rowIndex).getCell(col);
if (rowIndex == fromRow) {
// The first merged cell is set with RESTART merge value
cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
} else {
// Cells which join (merge) the first one, are set with CONTINUE
cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
}
}
}
docx转doc用的是aspose-words-jdk16.jar 这个jar包全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF,EPUB, XPS, SWF 相互转换 且linux和windiws下均可使用。效率也很高。比之前使用的jacob要好用很多,以下是调用方法十分简单
/**
* word转pdf 需引入 aspose-words-16.4.0-jdk16.jar包 收费插件windows linux下均可用
*
* @param inPath 源文件路径
* @param outPath 输出文件路径
*/
public static void docx2pdf(String inPath, String outPath) {
//jar包为破解版 不用进行验证
/*
if (!getLicense()) { // 验证License 若不验证则转化出的pdf文档会有水印产生
return;
}*/
try {
File file = new File(outPath); // 新建一个空白pdf文档
FileOutputStream os = new FileOutputStream(file);
com.aspose.words.Document doc = new com.aspose.words.Document(inPath); // Address是将要被转化的word文档
doc.save(os, SaveFormat.PDF);// 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF,EPUB, XPS, SWF 相互转换
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* docx转doc 需引入 aspose-words-16.4.0-jdk16.jar包 收费插件windows linux下均可用
*
* wps不兼容docx的表格跨列合并,微信文件预览不支持docx下的表格
* 转换为doc格式的可以被wps兼容 微信可预览表格
*
* @param inPath 源文件路径
* @param outPath 输出文件路径
*/
public static void docx2doc(String inPath, String outPath) {
try {
File file = new File(outPath); // 新建一个空白pdf文档
FileOutputStream os = new FileOutputStream(file);
com.aspose.words.Document doc = new com.aspose.words.Document(inPath); // Address是将要被转化的word文档
doc.save(os, SaveFormat.DOC);// 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF,EPUB, XPS, SWF 相互转换
} catch (Exception e) {
e.printStackTrace();
}
}
这个是aspose的下载地址 破解版本 转换之后没有发现水印 下载后放至maven对应目录下 或者直接把jar包放入工程内
aspose下载地址
<!-- word转pdf插件包 破解版 此包需要手动导入至maven仓库 -->
<dependency>
<groupId>com.aspose.words</groupId>
<artifactId>aspose-words-jdk16</artifactId>
</dependency>
原文作者:蛋 壳
原文地址: https://blog.csdn.net/FlyDanke/article/details/84563473
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/FlyDanke/article/details/84563473
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章