2017-04-12 115 views
6

テーブルと画像を含むdocxファイルをpdfフォーマットファイルに変換しようとしています。ここdocxをjavaの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) 
私はどこにでも探してきたが、適切な解決策を取得していない

は、適切かつ正確なソリューションを提供するよう要求します

私の必要条件は、既存のdocxをpdfに変換するためのJavaコードを適切なフォーマットと位置合わせで作成することです。

お勧めします。使用さ ジャー:Updated jars

編集:私はこのAPIを探索し、https://cloudconvert.com/api、誰もがJavaコードでこれを実装する方法を知っています。

+0

[PDFにMSのドキュメントを変換する方法]の可能な重複(http://stackoverflow.com/questions/3022376/how-to-convert-ms-doc-to-pdf) –

+0

@KrzysztofCichockiであってもよいですしかし、私はその質問から助けを得なかった。 –

+1

ここにApachePOIを主張する場合の別の答えもあります: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ページの長Word文書(.docxのを)変換に成功してきました。

+0

パッケージ名にもかかわらずPOIを使用して変換していません。 'ooxml-schemas-1.3.jar'のみがApache POIからのものです。残りは 'opensagres'と' itext'プロジェクトのものです。 – jmarkmurphy

+0

@jmarkmurphy私のアプローチは、問題のコードを動作させるために、ホイールを再発明することではありませんでした。 – VivekRatanSinha

+0

あなたの答えは間違っていませんでしたが、 'org.apache.poi.xwpf.converter。*'パッケージがApache POIの一部であるという間違った考え方を誰にも与えたくないだけでした。 – jmarkmurphy

12

VivekRatanSinha 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(); 
} 
関連する問題