Hi guys,
I am getting this exception when trying to import the attached document. This document was retrieved from the KDE test corpus
https://websvn.kde.org/trunk/tests/calligratests/interoperability/wordprocessing/docx/
Stack trace:
java.lang.IllegalStateException: This operation requires the node to be inside the main document.
at com.aspose.words.Node.zzZLU(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.zzEH.zzY(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.ShapeRenderer.(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.zzX.zzZ(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.zzFJ.zzZ(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.zzX.zzY(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.zzX.zzZ(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.zzBJ.zzI(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.zzBJ.visitShapeStart(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.Shape.zzZ(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.CompositeNode.acceptCore(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.Shape.accept(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.CompositeNode.acceptChildren(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.CompositeNode.acceptCore(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.Paragraph.accept(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.CompositeNode.acceptChildren(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.CompositeNode.acceptCore(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.Body.accept(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.CompositeNode.acceptChildren(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.CompositeNode.acceptCore(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.Section.accept(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.CompositeNode.acceptChildren(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.CompositeNode.acceptCore(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.BuildingBlock.accept(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.CompositeNode.acceptChildren(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.CompositeNode.acceptCore(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.GlossaryDocument.accept(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.zzBJ.zzY(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.Document.zzZ(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
at com.aspose.words.Document.save(Unknown Source) ~[aspose-words-16.1.0.jar:16.1.0.0]
Conversion code (Scala):
val options = new HtmlSaveOptions(SaveFormat.HTML)
options.setImagesFolder(imageDir.getPath)
options.setUseAntiAliasing(true)
options.setUseHighQualityRendering(true)
// Prevent scaling of images.
options.setScaleImageToShapeSize(false)
// Ensure the file names for images are sanitized.
options.setImageSavingCallback(FilenameSanitizingSavingCallback)
// Ensure external images are still linked.
options.setExportOriginalUrlForLinkedImages(true)
// Ensure lists are exported as
and tags.
options.setExportListLabels(ExportListLabels.BY_HTML_TAGS)
for {
// Load the document.
asposeDoc <- Try(new AsposeDocument(file.getAbsolutePath))
// Convert to HTML.
_ <- Try(asposeDoc.save(htmlFile.getAbsolutePath, options))
} yield {}
object FilenameSanitizingSavingCallback extends IImageSavingCallback {
/**
* Handle an image save callback. This will force the filename to be lowercase.
*
* @param imageSavingArgs Information about the image.
*/*
def imageSaving(imageSavingArgs: ImageSavingArgs): Unit = {
// Ensure file names are lowercase and do not contain invalid characters.
imageSavingArgs.setImageFileName(
imageSavingArgs.getImageFileName.toLowerCase.replaceAll("[^-a-z0-9_\/\.]", "")
)
}
}