2017-07-06 11 views
4

Je veux convertir un docx en pdf avec apache poi, le docx est généré correctement avec docx4j. L'amende de travail de conversion avec le document simple, mais quand je veux convertir un document plus stylisé, POI jette une exception:Erreur lors de la génération de pdf à partir de docx avec POI

org.apache.xmlbeans.impl.values.XmlValueOutOfRangeException: valeur union « 0000FF"> http: //schemas.openxmlformats.org/wordprocessingml/2006/main ' 15:09:20 org.apache.poi.xwpf.converter.core.XWPFConverterException: org.apache.xmlbeans.impl.values.XmlValueOutOfRangeException: valeur de l'union' 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]

Il est la cause de cette exception:

<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> 

Screen of my document

Et voici mon code:

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."); 
    } 
} 

Et ceci est la ligne XML qui causent problème:

<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

En fonction de la pile, vous utilisez une ancienne version du convertisseur de rapports XDocs. Essayez de mettre à jour – Gagravarr

+0

Je ne comprends pas quoi mettre à niveau, selon la mise à niveau de mon Org.apache.poi.xwpf.converter.pdf est la dernière version –

+0

Vous ne devriez pas utiliser ce nom de paquet, c'est incorrect et trompeur. La dernière version est 2.0.1 – Gagravarr

Répondre

0

J'ai eu du mal à trouver des bocaux pré-assemblés mis à jour sur le XDocRepo Sites Web et référentiels. J'ai fini par chercher le numéro de version que je cherchais, et je l'ai trouvé au https://mvnrepository.com/artifact/fr.opensagres.xdocreport/fr.opensagres.poi.xwpf.converter.pdf/2.0.1

Je ne sais pas si cela répond vraiment à la question, mais il répond à la question connexe de comment obtenir une version mise à jour de la bibliothèque. Construire à partir de la source est probablement plus sûr.