版本:23.8
编程语言:java
使用的代码:
public static void convert2Word(InputStream in, OutputStream out) throws Exception {
Document doc = new Document(in);
try {
NodeCollection childNodes = doc.getChildNodes(NodeType.PARAGRAPH, true);
if (childNodes != null) {
for (Paragraph para : (Iterable<Paragraph>) childNodes) {
if (para.getListFormat().isListItem()) {
ListLevel listLevel = para.getListFormat().getListLevel();
listLevel.getFont().setColor(Color.BLACK);
if (para.getParagraphFormat().getStyleIdentifier() == StyleIdentifier.HEADING_2) {
listLevel.setNumberStyle(NumberStyle.ARABIC);
listLevel.setNumberFormat("\u0001.\u0001、");
}
if (para.getParagraphFormat().getStyleIdentifier() == StyleIdentifier.HEADING_3) {
listLevel.setNumberStyle(NumberStyle.ARABIC);
listLevel.setNumberFormat("\u0001.\u0001.\u0002、");
}
if (para.getParagraphFormat().getStyleIdentifier() == StyleIdentifier.HEADING_4) {
listLevel.setNumberStyle(NumberStyle.ARABIC);
listLevel.setNumberFormat("\u0001.\u0001.\u0002.\u0003、");
listLevel.getFont().setSize(10.5);
listLevel.getFont().setBold(true);
listLevel.getFont().getShading().clearFormatting();
}
}
}
}
} catch (Exception e) {
logger.warn("html转换word,处理样式异常", e);
}
doc.updateListLabels();
doc.save(out, SaveFormat.DOCX);
}
html源文件:
边框.zip (6.0 KB)
转换后的docx文件:
边框-convert.zip (1.1 MB)
问题1截图:
image.png (150.8 KB)
问题2截图:
image.png (7.1 KB)
@ZhonghaoSun 您有转换为 HTML 之前的原始 docx 文件吗?我认为可以使用嵌入的 css 样式来修复表格样式。
@ZhonghaoSun 如果没有,可以使用
PageSetup pageSetup = doc.getFirstSection().getPageSetup();
double width = pageSetup.getPageWidth() - pageSetup.getRightMargin() - pageSetup.getLeftMargin();
for (Shape shape : (Iterable<Shape>) doc.getChildNodes(NodeType.SHAPE, true)) {
if (shape.getWidth() > width) {
shape.setWrapType(WrapType.INLINE);
shape.setWidth(width);
shape.getImageData().fitImageToShape();
}
}
Table table = (Table) doc.getChild(NodeType.TABLE, 0,true);
table.setBorders(LineStyle.SINGLE, 1, Color.BLACK);
原始docx文件可以参考这个
表格-原始word文件.zip (243.2 KB)
好的,这个是修复表格边框问题嘛。图片截断能否兼容呢
你好,Aspose-words 23.8版本好像没有示例中的方法:
image.png (31.4 KB)
缺少以下方法
shape.getImageData().fitImageToShape();
@ZhonghaoSun 对不起,您可以删除此方法。更改宽度后我们就不需要它了。
谢谢你提供的文件,我会检查的。
@ZhonghaoSun 这段代码解决了表格的问题。也许使用 saveOptions.setScaleImageToShapeSize(true);
可以解决形状的问题。
Document doc = new Document("input.docx");
HtmlSaveOptions saveOptions = new HtmlSaveOptions();
saveOptions.setExportImagesAsBase64(true);
saveOptions.setScaleImageToShapeSize(false);
saveOptions.setCssStyleSheetType(CssStyleSheetType.EMBEDDED);
doc.save("output.html", saveOptions);
doc = new Document("output.html");
for (Paragraph para : (Iterable<Paragraph>) doc.getChildNodes(NodeType.PARAGRAPH, true)) {
if (para.getListFormat().isListItem()) {
ListLevel listLevel = para.getListFormat().getListLevel();
if (para.getParagraphFormat().getStyleIdentifier() == StyleIdentifier.HEADING_2) {
listLevel.setNumberStyle(NumberStyle.ARABIC);
listLevel.setNumberFormat("\u0001.\u0001、");
}
if (para.getParagraphFormat().getStyleIdentifier() == StyleIdentifier.HEADING_3) {
listLevel.setNumberStyle(NumberStyle.ARABIC);
listLevel.setNumberFormat("\u0001.\u0001.\u0002、");
}
if (para.getParagraphFormat().getStyleIdentifier() == StyleIdentifier.HEADING_4) {
listLevel.setTrailingCharacter(ListTrailingCharacter.NOTHING);
}
}
}
doc.updateListLabels();
PageSetup pageSetup = doc.getFirstSection().getPageSetup();
double width = pageSetup.getPageWidth() - pageSetup.getRightMargin() - pageSetup.getLeftMargin();
for (Shape shape : (Iterable<Shape>) doc.getChildNodes(NodeType.SHAPE, true)) {
if (shape.getWidth() > width) {
shape.setWrapType(WrapType.INLINE);
shape.setWidth(width);
}
}
doc.save("output.docx");