Ошибка генерации PDF из DOCX с POI
Я хочу конвертировать docx в pdf с помощью apache poi, docx генерируется правильно с помощью docx4j. Преобразование отлично работает с простым документом, но когда я хочу преобразовать более стилизованный документ, POI выдает исключение:
org.apache.xmlbeans.impl.values.XmlValueOutOfRangeException: значение объединения '0000FF">http://schemas.openxmlformats.org/wordprocessingml/2006/main' 15:09:20 org.apache.poi.xwpf.converter.core.XWPFConverterException: org.apache.xmlbeans.impl.values.XmlValueOutOfRangeException: значение объединения '0000FF "> http://schemas.openxmlformats.org/wordprocessingml/2006/main' в org.apache.poi.xwpf.converter.pdf.PdfConverter.doConvert(PdfConverter.java:70) ~[org.apache.poi.xwpf.converter.pdf-1.0.6.jar:1.0.6]
Существует причина этого исключения:
<w:r>
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
<w:color w:val="0000FF"><span style="background-color: rgb(51, 153, 102);"><span style="background-color: rgb(255, 0, 0);"><font color="99CC00"/>
<w:sz w:val="20"/>
<w:szCs w:val="20"/>
<w:highlight w:val="red"/>
</w:rPr>
<w:t xml:space="preserve">Juillet-Aout</w:t>
</w:r>
И это мой код:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import fr.opensagres.poi.xwpf.converter.pdf.PdfConverter;
import fr.opensagres.poi.xwpf.converter.pdf.PdfOptions;
public class ConvertDocxPdf
{
public static void main( String[] args )
{
long startTime = System.currentTimeMillis();
try
{
// 1) Load docx with POI XWPFDocument
InputStream source = new FileInputStream("test.docx");
XWPFDocument document = new XWPFDocument(source);
// 2) Convert POI XWPFDocument 2 PDF with iText
File outFile = new File("result.pdf" );
outFile.getParentFile().mkdirs();
OutputStream out = new FileOutputStream( outFile );
PdfOptions options = null;// PDFViaITextOptions.create().fontEncoding( "windows-1250" );
PdfConverter.getInstance().convert( document, out, options );
}
catch ( Throwable e )
{
e.printStackTrace();
}
System.out.println( "Generate DocxStructures.pdf with " + ( System.currentTimeMillis() - startTime ) + " ms." );
}
}
И это строка XML, которая вызывает проблемы:
<w:r>
<w:rPr>
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
<w:color w:val="0000FF"><span style="background-color: rgb(51, 153, 102);"><span style="background-color: rgb(255, 0, 0);"><font color="99CC00"/> //<-- That line
<w:sz w:val="20"/>
<w:szCs w:val="20"/>
<w:highlight w:val="red"/>
</w:rPr>
<w:t xml:space="preserve">Juillet-Aout </w:t>
</w:r>
1 ответ
У меня были проблемы с поиском обновленных предварительно собранных фляг на сайтах и репозиториях XDocReport. Я закончил тем, что Google искал конкретный номер версии, который я искал, и нашел его по адресу https://mvnrepository.com/artifact/fr.opensagres.xdocreport/fr.opensagres.poi.xwpf.converter.pdf/2.0.1
Я не уверен, что это действительно отвечает на вопрос, но он отвечает на связанный с этим вопрос о том, как получить обновленную версию библиотеки. Строительство из источника, вероятно, более безопасно, хотя.