Docx4j - 在 HTML 到 Docx4j 的迁移中,长图像在分页符处缺少内容,并且缺少的内容在下一页不可见

Docx4j - Long image is missing content at page break and the missing content is not visible at next page in HTML to Docx4j migration

提问人:Faizan Shaikh Sarkar 提问时间:8/14/2023 最后编辑:Faizan Shaikh Sarkar 更新时间:8/29/2023 访问量:48

问:

我通过 docx4j 将数据从 HTML 文档页面迁移到 docx,基本上其他一切都正常工作,并且正常的图像和内容完美地添加到 docx 中,但在极少数情况下,对于长图像,图像在分页时不会中断,并且图像正在下层,因此剩余的图像部分不可见。

这是一张长图:enter image description here

这就是通过 docx4j 将 HTML 数据和图像迁移到 docx word 后的样子:enter image description here

这就是我通过 docx4j 将我的 HTML 数据添加到 docx 的方式:

XHTMLImporter = new XHTMLImporterImpl(template);
                        xhtmlSubTitleData=htmlToXhtml(subTitleData)
                        if(xhtmlSubTitleData.contains(" ")){
                            xhtmlSubTitleData=addNBSPDTDInSubTitleData(xhtmlSubTitleData)
                        }

                        template.getMainDocumentPart().getContent().addAll(pIndex+1,XHTMLImporter.convert( xhtmlSubTitleData, null))

基本上,我正在现有的docx模板中附加数据,但是长图像在分页符时没有中断,因此我丢失了数据,因为图像的缺失部分不可见。我将 HTML 文档页面部分中的所有 HTML 转换为 XHTML(xhtmlSubTitleData) 并通过 addAll() 添加它,它非常适合其他所有内容。

我应该怎么做才能在分页符时自动打破这样的长图像而不会丢失任何数据,从而使剩余部分在下一页中可见,或者如果图像太长而无法放入页面,则可以自动调整其大小以适合页面?

java docx4j HTML 到 DOCX 文档处理

评论


答:

0赞 JasonPlutext 8/29/2023 #1

使用 docx4j-ImportXHTML,您可以指定 XHTMLImageHandler 接口的实现(使用 setXHTMLImageHandler)。

如果不这样做,将使用 XHTMLImageHandlerDefault。该代码使用 createImageInline。它确实包含缩放宽图像的逻辑,但不包含长图像的逻辑。

如果实验性地我将您的图像粘贴到 Word docx 的段落中,它确实会将其布局到新页面上。

我现在看不到XML中的任何相关差异。因此,目前尚不清楚任何更改的 XHTMLImageHandler 会以不同的方式执行什么操作。

因此,要进一步追求这一点,我需要查看您的docx。随意打开一个问题并将其附在 https://github.com/plutext/docx4j-ImportXHTML/issues