gpt4 book ai didi

java - docx4j 转换 html->docx->html

转载 作者:行者123 更新时间:2023-12-01 12:37:01 34 4
gpt4 key购买 nike

我正在使用 docx4j 开发我的第一个项目...我的目标是将 xhtml 从 web 应用程序(ckeditor 创建的 html)导出到 docx,在 Word 中编辑它,然后将其导入回 ckeditor wysiwyg。

(*来自 http://www.docx4java.org/forums/xhtml-import-f28/html-docx-html-inserts-a-lot-of-space-t1966.html#p6791?sid=78b64a02482926c4dbdbafbf50d0a914 的交叉帖子将在回答时更新)

我创建了一个包含以下内容的 html 测试文档:

<html><ul><li>TEST LINE 1</li><li>TEST LINE 2</li></ul></html>

然后我的代码从此 html 创建一个 docx,如下所示: WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage .createPackage();

    NumberingDefinitionsPart ndp = new NumberingDefinitionsPart();
wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
ndp.unmarshalDefaultNumbering();

XHTMLImporterImpl xHTMLImporter = new XHTMLImporterImpl(wordMLPackage);
xHTMLImporter.setHyperlinkStyle("Hyperlink");

wordMLPackage.getMainDocumentPart().getContent()
.addAll(xHTMLImporter.convert(new File("test.html"), null));

System.out.println(XmlUtils.marshaltoString(wordMLPackage
.getMainDocumentPart().getJaxbElement(), true, true));

wordMLPackage.save(new java.io.File("test.docx"));

然后我的代码尝试将 docx 转换回 html,如下所示: WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage .createPackage();

    NumberingDefinitionsPart ndp = new NumberingDefinitionsPart();
wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
ndp.unmarshalDefaultNumbering();

XHTMLImporterImpl xHTMLImporter = new XHTMLImporterImpl(wordMLPackage);
xHTMLImporter.setHyperlinkStyle("Hyperlink");

WordprocessingMLPackage docx = WordprocessingMLPackage.load(new File("test.docx"));
AbstractHtmlExporter exporter = new HtmlExporterNG2();
OutputStream os = new java.io.FileOutputStream("test.html");
HTMLSettings htmlSettings = new HTMLSettings();
javax.xml.transform.stream.StreamResult result = new javax.xml.transform.stream.StreamResult(
os);
exporter.html(docx, result, htmlSettings);

返回的html为:

<?xml version="1.0" encoding="UTF-8"?><html xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<style>
<!--/*paged media */ div.header {display: none }div.footer {display: none } /*@media print { */@page { size: A4; margin: 10%; @top-center {content: element(header) } @bottom-center {content: element(footer) } }/*element styles*/ .del {text-decoration:line-through;color:red;} .ins {text-decoration:none;background:#c0ffc0;padding:1px;}
/* TABLE STYLES */

/* PARAGRAPH STYLES */
.DocDefaults {display:block;margin-bottom: 4mm;line-height: 115%;font-size: 11.0pt;}
.Normal {display:block;}

/* CHARACTER STYLES */ span.DefaultParagraphFont {display:inline;}
-->
</style>
<script type="text/javascript">
<!--function toggleDiv(divid){if(document.getElementById(divid).style.display == 'none'){document.getElementById(divid).style.display = 'block';}else{document.getElementById(divid).style.display = 'none';}}
--></script>
</head>
<body>

<!-- userBodyTop goes here -->




<div class="document">


<p class="Normal DocDefaults " style="text-align: left;position: relative; margin-left: 17mm;text-indent: -0.25in;margin-bottom: 0in;">&bull; <span class="DefaultParagraphFont " style="font-weight: normal;color: #000000;font-style: normal;font-size: 11.0pt;">TEST LINE 1</span>
</p>


<p class="Normal DocDefaults " style="text-align: left;position: relative; margin-left: 17mm;text-indent: -0.25in;margin-bottom: 0in;">&bull; <span class="DefaultParagraphFont " style="font-weight: normal;color: #000000;font-style: normal;font-size: 11.0pt;">TEST LINE 2</span>
</p>
</div>







<!-- userBodyTail goes here -->


</body>
</html>

现在每行后面都会创建很多额外的空间。不确定为什么会发生这种情况,转换似乎添加了很多额外的空格/回车符。

最佳答案

从您的问题中不清楚您是否担心 (X)HTML 源文档中的空格,或者渲染的页面中的空格(大概是在 CKEditor 中)。如果是后者,那么浏览器和CK版本可能有关。

空白可能会也可能不会重要;尝试谷歌搜索“xhtml important space”了解更多信息。

作为背景,根据 docx4j 属性 docx4j.Convert.Out.HTML.OutputMethodXML,docx4j 将使用

<xsl:output method="html" encoding="utf-8" omit-xml-declaration="no" indent="no" 
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>

  <xsl:output method="xml" encoding="utf-8" omit-xml-declaration="no" indent="no" 
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>

注意@method 值的不同。如果您想要不同的东西,可以分别修改 docx2html.xsl 或 docx2xhtml.xsl。

关于java - docx4j 转换 html->docx->html,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25490529/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com