2017-04-12 49 views
6

Próbuję przekonwertować plik docx, który zawiera tabelę i obrazy do pliku formatu pdf.Konwersja docx do pdf w java

Szukałem wszędzie, ale nie mieli właściwego rozwiązania, zażądać, aby dać właściwe i prawidłowe rozwiązanie:

tutaj co próbowałem:

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()); 
     } 
    } 

} 

Wyjątek:

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) 

Moim żądaniem jest utworzenie kodu Java do konwersji istniejącego dokumentu docx do formatu pdf z odpowiednim formatem i wyrównaniem.

Proszę sugerować. Słoiki Używane: Updated jars

EDIT: Szukałem tego API, https://cloudconvert.com/api, ktoś wie jak zaimplementować to w kodzie Java.

+0

Możliwy duplikat [Jak przekonwertować MS doc do pdf] (http://stackoverflow.com/questions/3022376/how-to-convert-ms-doc-to-pdf) –

+0

@KrzysztofCichocki może być , ale nie otrzymałem pomocy od tego pytania. –

+1

tutaj jest również inna odpowiedź, jeśli nalegasz na ApachePOI: http://stackoverflow.com/questions/6201736/javausing-apache-poi-how-to-convert-ms-word-file-to-pdf –

Odpowiedz

8

Brakuje niektórych bibliotek.

jestem w stanie uruchomić kod poprzez dodanie następujących bibliotek:

 
    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 

I zostały pomyślnie konwertowane dokument 6 stron Word (.docx) z tabel, obrazów i różnych formatowania.

+0

Tylko uwaga, to nie korzysta z POI do konwersji pomimo nazw pakietów. Tylko 'ooxml-schemas-1.3.jar' pochodzi z Apache POI. Reszta pochodzi z projektów 'opensagres' i' itext'. – jmarkmurphy

+0

@jmarkmurphy Moje podejście polegało na tym, aby nie wymyślać koła na nowo, tylko po to, aby kod zadziałał. – VivekRatanSinha

+0

Nic złego z twoją odpowiedzią, po prostu nie chciałem, aby ktokolwiek pomylił się, że pakiety 'org.apache.poi.xwpf.converter. *' Były częścią Apache POI. – jmarkmurphy

12

Oprócz VivekRatanSinha answer, chciałbym zamieścić pełny kod i wymagane słoiki dla ludzi, którzy potrzebują go w przyszłości.

Kod:

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()); 
     } 
    } 
} 

i słoiki:

required jars

Enjoy :)

0

używam tego kodu.

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(); 
}