2017-04-12 4 views
6

Ich versuche, eine docx Datei zu konvertieren, die Tabelle und Bilder in eine pdf Datei enthält.Konvertieren von DOCX in PDF in Java

Ich habe überall gesucht, aber nicht die richtige Lösung erhalten, fordern Sie die richtige und korrekte Lösung zu geben:

hier, was ich versucht habe:

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import org.apache.poi.xwpf.converter.pdf.PdfConverter; 
import org.apache.poi.xwpf.converter.pdf.PdfOptions; 
import org.apache.poi.xwpf.usermodel.XWPFDocument; 

public class TestCon { 

    public static void main(String[] args) { 
     TestCon cwoWord = new TestCon(); 
     System.out.println("Start"); 
     cwoWord.ConvertToPDF("D:\\Test.docx", "D:\\Test1.pdf"); 
    } 

    public void ConvertToPDF(String docPath, String pdfPath) { 
     try { 
      InputStream doc = new FileInputStream(new File(docPath)); 
      XWPFDocument document = new XWPFDocument(doc); 
      PdfOptions options = PdfOptions.create(); 
      OutputStream out = new FileOutputStream(new File(pdfPath)); 
      PdfConverter.getInstance().convert(document, out, options); 
      System.out.println("Done"); 
     } catch (FileNotFoundException ex) { 
      System.out.println(ex.getMessage()); 
     } catch (IOException ex) { 

      System.out.println(ex.getMessage()); 
     } 
    } 

} 

Ausnahme:

Exception in thread "main" java.lang.IllegalAccessError: tried to access method org.apache.poi.util.POILogger.log(ILjava/lang/Object;)V from class org.apache.poi.openxml4j.opc.PackageRelationshipCollection 
at org.apache.poi.openxml4j.opc.PackageRelationshipCollection.parseRelationshipsPart(PackageRelationshipCollection.java:313) 
at org.apache.poi.openxml4j.opc.PackageRelationshipCollection.<init>(PackageRelationshipCollection.java:162) 
at org.apache.poi.openxml4j.opc.PackageRelationshipCollection.<init>(PackageRelationshipCollection.java:130) 
at org.apache.poi.openxml4j.opc.PackagePart.loadRelationships(PackagePart.java:559) 
at org.apache.poi.openxml4j.opc.PackagePart.<init>(PackagePart.java:112) 
at org.apache.poi.openxml4j.opc.PackagePart.<init>(PackagePart.java:83) 
at org.apache.poi.openxml4j.opc.PackagePart.<init>(PackagePart.java:128) 
at org.apache.poi.openxml4j.opc.ZipPackagePart.<init>(ZipPackagePart.java:78) 
at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:239) 
at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:665) 
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:274) 
at org.apache.poi.util.PackageHelper.open(PackageHelper.java:39) 
at org.apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.java:121) 
at test.TestCon.ConvertToPDF(TestCon.java:31) 
at test.TestCon.main(TestCon.java:25) 

Meine Anforderung ist es, einen Java-Code zu erstellen, um vorhandene docx in pdf mit dem richtigen Format und Ausrichtung zu konvertieren.

Bitte vorschlagen. Gläser benutzt: Updated jars

Edit: Ich suchte diese API, https://cloudconvert.com/api, jemand weiß, wie dieser Code in Java zu implementieren.

+0

Mögliche Duplikat (http://stackoverflow.com/questions/3022376/how-to-convert-ms-doc-to-pdf) –

+0

@KrzysztofCichocki sein kann [Wie MS doc in PDF konvertieren] , aber ich habe von dieser Frage keine Hilfe bekommen. –

+1

Hier ist auch eine andere Antwort, wenn Sie auf ApachePOI bestehen: http://stackoverflow.com/questions/6201736/javausing-apache-po-how-to-convert-ms-word-file-to-pdf –

Antwort

8

Ihnen fehlen einige Bibliotheken.

Ich bin in der Lage Ihren Code auszuführen, indem Sie die folgenden Bibliotheken hinzu:

 
    Apache POI 3.15 
    org.apache.poi.xwpf.converter.core-1.0.6.jar 
    org.apache.poi.xwpf.converter.pdf-1.0.6.jar 
    fr.opensagres.xdocreport.itext.extension-2.0.0.jar 
    itext-2.1.7.jar 
    ooxml-schemas-1.3.jar 

Ich habe erfolgreich ein 6 Seiten langen Word-Dokument (.docx) mit Tabellen, Bildern und verschiedenen Formatierungen umgewandelt.

+0

Nur eine Anmerkung, dies ist nicht mit POI, um die Konvertierung trotz der Paketnamen zu tun. Nur das 'ooxml-schemas-1.3.jar' stammt von Apache POI. Der Rest stammt aus den Projekten "opensagres" und "itext". – jmarkmurphy

+0

@jmarkmurphy Mein Ansatz war nicht, das Rad neu zu erfinden, nur um den fraglichen Code zum Laufen zu bringen. – VivekRatanSinha

+0

Nichts ist falsch mit Ihrer Antwort, ich wollte nur nicht, dass irgendjemand die falsche Vorstellung davon bekommt, dass die 'org.apache.poi.xwpf.converter. *' - Pakete Teil von Apache POI sind. – jmarkmurphy

12

Zusätzlich zu der VivekRatanSinha answer, würde ich gerne den vollen Code und erforderliche Gläser für die Menschen, die es in Zukunft benötigen, posten.

Code:

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 

import org.apache.poi.xwpf.converter.pdf.PdfConverter; 
import org.apache.poi.xwpf.converter.pdf.PdfOptions; 
import org.apache.poi.xwpf.usermodel.XWPFDocument; 

public class WordConvertPDF { 
    public static void main(String[] args) { 
     WordConvertPDF cwoWord = new WordConvertPDF(); 
     cwoWord.ConvertToPDF("D:/Test.docx", "D:/Test.pdf"); 
    } 

    public void ConvertToPDF(String docPath, String pdfPath) { 
     try { 
      InputStream doc = new FileInputStream(new File(docPath)); 
      XWPFDocument document = new XWPFDocument(doc); 
      PdfOptions options = PdfOptions.create(); 
      OutputStream out = new FileOutputStream(new File(pdfPath)); 
      PdfConverter.getInstance().convert(document, out, options); 
     } catch (IOException ex) { 
      System.out.println(ex.getMessage()); 
     } 
    } 
} 

und JARS:

required jars

Enjoy :)

0

ich diesen Code verwenden.

private byte[] toPdf(ByteArrayOutputStream docx) { 
    InputStream isFromFirstData = new ByteArrayInputStream(docx.toByteArray()); 

    XWPFDocument document = new XWPFDocument(isFromFirstData); 
    PdfOptions options = PdfOptions.create(); 

    //make new file in c:\temp\ 
    OutputStream out = new FileOutputStream(new File("c:\\tmp\\HelloWord.pdf")); 
    PdfConverter.getInstance().convert(document, out, options); 

    //return byte array for return in http request. 
    ByteArrayOutputStream pdf = new ByteArrayOutputStream(); 
    PdfConverter.getInstance().convert(document, pdf, options); 

    document.write(pdf); 
    document.close(); 
    return pdf.toByteArray(); 
} 
Verwandte Themen