I implemented a functionality to convert docx to pdf. The code:
- Code: Select all
WordprocessingMLPackage pkg = WordprocessingMLPackage.load(inputFile);
ByteArrayOutputStream baos = new ByteArrayOutputStream(2 * 1024 * 1024);
if (fontManager != null && fontManager.isInitialized()) {
fontManager.getFonts().forEach(PhysicalFonts::addPhysicalFont);
PhysicalFonts.discoverPhysicalFonts();
} else {
log.warn("FontManager no inicializado, Las fuentes pueden no representarse correctamente");
}
FontTablePart fontTablePart = pkg.getMainDocumentPart().getFontTablePart();
if (fontTablePart != null) {
// Remove embedded font data AND the obfuscated font parts
pkg.getMainDocumentPart().getRelationshipsPart()
.removePart(fontTablePart.getPartName());
}
Mapper fontMapper = new BestMatchingMapper();
pkg.setFontMapper(fontMapper);
Docx4J.toPDF(pkg,baos);
Work fine when the docx is from Word, but when is from LibreOffice i obtain this errors:
- Code: Select all
2026-07-01T09:27:56.781+02:00 ERROR 26836 --- [appautospres-ms-gestion-documentos] [http-nio-8888-exec-2] [6a44c0fd52f12d2f940dcc3d395120c3-ac57b783f738d3ae] org.docx4j.utils.XmlSerializerUtil : org.apache.fop.fo.ValidationException: Property ID "__UnoMark__98357_3300398868" (found on "fo:inline") previously used; ID values must be unique within a document! (See position 1:1829)
javax.xml.transform.TransformerException: org.apache.fop.fo.ValidationException: Property ID "__UnoMark__98357_3300398868" (found on "fo:inline") previously used; ID values must be unique within a document! (See position 1:1829)
at org.docx4j.org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:535) ~[xalan-interpretive-11.0.0.jar:na]
at org.docx4j.utils.XmlSerializerUtil.serialize(XmlSerializerUtil.java:51) ~[docx4j-core-11.5.12.jar:na]
at org.docx4j.utils.XmlSerializerUtil.serialize(XmlSerializerUtil.java:18) ~[docx4j-core-11.5.12.jar:na]
at org.docx4j.convert.out.fo.renderers.FORendererApacheFOP.render(FORendererApacheFOP.java:218) ~[docx4j-export-fo-11.5.12.jar:na]
at org.docx4j.convert.out.fo.renderers.FORendererApacheFOP.render(FORendererApacheFOP.java:174) ~[docx4j-export-fo-11.5.12.jar:na]
at org.docx4j.convert.out.fo.AbstractFOExporter.postprocess(AbstractFOExporter.java:168) ~[docx4j-export-fo-11.5.12.jar:na]
at org.docx4j.convert.out.fo.AbstractFOExporter.postprocess(AbstractFOExporter.java:47) ~[docx4j-export-fo-11.5.12.jar:na]
at org.docx4j.convert.out.common.AbstractExporter.export(AbstractExporter.java:83) ~[docx4j-core-11.5.12.jar:na]
at org.docx4j.Docx4J.toFO(Docx4J.java:716) ~[docx4j-core-11.5.12.jar:na]
Any suggestion ?

