Конвертация PDF -> HTML -> WORD (docx)
Нужно преобразовать PDF в word. поскольку нужно сохранить форматирование, то пытаюсь сделать через цепочку
pdf->html->word
вот класс
import org.apache.commons.io.FileUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.docx4j.convert.in.xhtml.FormattingOption;
import org.docx4j.convert.in.xhtml.XHTMLImporterImpl;
import org.docx4j.jaxb.Context;
import org.docx4j.openpackaging.exceptions.Docx4JException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.NumberingDefinitionsPart;
import org.docx4j.wml.RFonts;
import org.fit.pdfdom.PDFDomTree;
import org.springframework.stereotype.Service;
import javax.xml.bind.JAXBException;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
public class Test{
private static String filePathPDF = "C:\\Users\\...\\Desktop\\1.pdf";
private static String filePathHTML = "C:\\Users\\...\\Desktop\\1.html";
private static String filePathDocx = "C:\\Users\\...\\Desktop\\v2.docx";
public void xhtmlToDocx(WordprocessingMLPackage wordMLPackage) throws Docx4JException, JAXBException, IOException, ParserConfigurationException {
// использую примеры этой библиотеки
// https://github.com/plutext/docx4j-ImportXHTML/tree/master/src/samples/java/org/docx4j/samples
PDDocument pdf = PDDocument.load(new File(filePathPDF));
Writer outputPdf = new PrintWriter(filePathHTML, StandardCharsets.UTF_8);
new PDFDomTree().writeText(pdf, outputPdf);
String stringFromFile = FileUtils.readFileToString(new File(filePathHTML), "UTF-8");
NumberingDefinitionsPart ndp = new NumberingDefinitionsPart();
wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
ndp.unmarshalDefaultNumbering();
RFonts rfonts = Context.getWmlObjectFactory().createRFonts();
rfonts.setAscii("Century Gothic");
XHTMLImporterImpl.addFontMapping("Century Gothic", rfonts);
XHTMLImporterImpl xHTMLImporter = new XHTMLImporterImpl(wordMLPackage);
xHTMLImporter.setHyperlinkStyle("Hyperlink");
xHTMLImporter.setTableFormatting(FormattingOption.IGNORE_CLASS);
wordMLPackage.getMainDocumentPart().getContent().addAll(xHTMLImporter.convert(stringFromFile, null));
wordMLPackage.save(new File(filePathDocx));
}
}
сам html файл получается нормально. т.е форматирование сохраняется. Но итоговый word файл теряется форматирование и получается каша. Причем рисунки, логотипы в итоговом word файле сохраняются, но не на своих местах.