Я хочу преобразовать docx в xhtml, а затем в docx.
Я видел проект docx4j-ImportXHTML, который, кажется, соответствует моим потребностям.
Я сделал это:
public static void convertFragment(Long idConsultant, String fileName){
WordprocessingMLPackage wordMLPackage = null;
try {
wordMLPackage = WordprocessingMLPackage.load(new File(fileName));
// XHTML export
AbstractHtmlExporter exporter = new HtmlExporterNG2();
AbstractHtmlExporter.HtmlSettings htmlSettings = new AbstractHtmlExporter.HtmlSettings();
htmlSettings.setWmlPackage(wordMLPackage);
boolean nestLists = false;
if (nestLists) {
SdtWriter.registerTagHandler("HTML_ELEMENT", new SdtToListSdtTagHandler());
} else {
htmlSettings.getFeatures().remove(ConversionFeatures.PP_HTML_COLLECT_LISTS);
} // must do one or the other
String htmlFilePath = fileName+"_"+idConsultant+".html";
OutputStream os = null;
os = new FileOutputStream(htmlFilePath);
Docx4J.toHTML(htmlSettings, os, Docx4J.FLAG_NONE);
FileInputStream fis = null;
fis = new FileInputStream(fileName+"_"+idConsultant+".html");
String stringFromFile= IOUtils.toString(fis).replaceAll("<","<").replaceAll(">",">").replaceAll("<br>","<br></br>").replaceAll("<p></p>","<br></br>").replaceAll(" ", "\u00a0");
wordMLPackage = WordprocessingMLPackage.createPackage();
XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage);
wordMLPackage.getMainDocumentPart().getContent().addAll(XHTMLImporter.convert( stringFromFile, null) );
System.out.println(
XmlUtils.marshaltoString(wordMLPackage.getMainDocumentPart().getJaxbElement(), true, true));
wordMLPackage.save(new File(fileName) );
} catch (Docx4JException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
Моя проблема заключается в том, что итоговый документ не имеет тех же полей, что и оригинал, в то время как я перезаписываю исходный документ. Поля идут от
![enter image description here](https://i.stack.imgur.com/xbSTk.png)
до
![enter image description here](https://i.stack.imgur.com/qcgh3.png)
Есть лиспособ сохранить поля одинаковыми?
Спасибо.