2017-04-12 54 views
6

में ddx में pdf में कनवर्ट करना मैं docx फ़ाइल को कनवर्ट करने का प्रयास कर रहा हूं जिसमें तालिका और छवियों को pdf प्रारूप फ़ाइल में परिवर्तित करने का प्रयास किया जा रहा है।जावा

यहाँ मैं क्या कोशिश की है:

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

} 

अपवाद:

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) 

मैं हर जगह खोज रहे होते हैं लेकिन उचित समाधान नहीं मिला, उचित और सही समाधान देने के लिए अनुरोध कर

मेरी आवश्यकता उचित दस्तावेज़ और संरेखण के साथ मौजूदा डॉक्स को पीडीएफ में परिवर्तित करने के लिए जावा कोड बनाना है।

कृपया सुझाव दें। जार उपयोग किया: Updated jars

संपादित करें: मैं इस एपीआई, https://cloudconvert.com/api खोजा गया, किसी को भी जानता है कि कैसे जावा कोड में इस लागू करने के लिए।

+0

की [कैसे पीडीएफ करने के लिए एमएस दस्तावेज़ कन्वर्ट करने के लिए] (http://stackoverflow.com/questions/3022376/how-to-convert-ms-doc-to-pdf) –

+0

@KrzysztofCichocki हो सकता है संभावित डुप्लिकेट , लेकिन मुझे उस सवाल से मदद नहीं मिली हालांकि। –

+1

यदि आप अपाचेपीओआई पर जोर देते हैं तो यहां एक और जवाब भी है: http://stackoverflow.com/questions/6201736/javausing-apache-poi-how-to-convert-ms-word-file-to-pdf –

उत्तर

8

आप कुछ पुस्तकालयों को याद कर रहे हैं।

मैं निम्नलिखित पुस्तकालयों जोड़कर अपने कोड चलाने के लिए सक्षम हूँ:

 
    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 

मैं सफलतापूर्वक तालिकाओं, छवियों और विभिन्न स्वरूपण के साथ एक 6 पेज लंबा वर्ड दस्तावेज़ (.docx) परिवर्तित कर दिया है।

+0

बस एक नोट, यह पैकेज नामों के बावजूद रूपांतरण करने के लिए पीओआई का उपयोग नहीं कर रहा है। केवल 'ooxml-schemas-1.3.jar' अपाचे पीओआई से है। शेष 'opensagres' और' itext' परियोजनाओं से हैं। – jmarkmurphy

+0

@jmarkmurphy मेरा दृष्टिकोण पहिया को फिर से शुरू करने के लिए नहीं था, बस काम करने के लिए कोड प्राप्त करने के लिए। – VivekRatanSinha

+0

आपके उत्तर में कुछ भी गलत नहीं है, सिर्फ यह नहीं चाहता था कि कोई भी गलत विचार प्राप्त करे कि 'org.apache.poi.xwpf.converter। *' पैकेज अपाचे पीओआई का हिस्सा थे। – jmarkmurphy

12

विवेकराटन सिन्हा answer के अलावा, मैं उन लोगों के लिए पूर्ण कोड और आवश्यक जार पोस्ट करना चाहता हूं जिन्हें भविष्य में इसकी आवश्यकता है।

कोड:

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

और जार:

required jars

का आनंद लें :)

0

मैं इस कोड का उपयोग करें।

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