web-dev-qa-db-ja.com

javaでdocxを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)

私の要件は、Javaコードを作成して、既存のdocxを適切な形式と配置でPDFに変換することです。

提案してください。

使用される瓶:

Updated jars

11
user1999397

一部のライブラリがありません。

次のライブラリを追加して、コードを実行できます。

 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)を正常に変換しました。

14
VivekRatanSinha

VivekRatanSinha answer に加えて、将来それを必要とする人々のために完全なコードと必要なjarを投稿したいと思います。

コード:

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

およびJARS:

required jars

楽しい :)

18
user1999397

これらのMaven依存関係を追加する必要があります

  <dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.0.1</version>
    </dependency>

    <dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.0.1</version>
    </dependency>

    <dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi-scratchpad</artifactId>
        <version>4.0.1</version>
    </dependency>

    <dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi-ooxml-schemas</artifactId>
        <version>4.0.1</version>
    </dependency>

    <dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi-excelant</artifactId>
        <version>4.0.1</version>
    </dependency>

    <dependency>
        <groupId>org.Apache.poi</groupId>
        <artifactId>poi-examples</artifactId>
        <version>4.0.1</version>
    </dependency>

    <dependency>
        <groupId>fr.opensagres.xdocreport</groupId>
        <artifactId>org.Apache.poi.xwpf.converter.core</artifactId>
        <version>1.0.6</version>
    </dependency>

    <dependency>
        <groupId>fr.opensagres.xdocreport</groupId>
        <artifactId>org.Apache.poi.xwpf.converter.pdf</artifactId>
        <version>1.0.6</version>
    </dependency>
1
iraqi eagle

私は多くの研究を行ってきましたが、Documents4jはdocxをpdfに変換するための最高の無料APIです。位置合わせ、すべてを文書化するfonts4jが良い仕事をしています。

Mavenの依存関係:

<dependency>
    <groupId>com.documents4j</groupId>
    <artifactId>documents4j-local</artifactId>
    <version>1.0.3</version>
</dependency>
<dependency>
    <groupId>com.documents4j</groupId>
    <artifactId>documents4j-transformer-msoffice-Word</artifactId>
    <version>1.0.3</version>
</dependency>

以下のコードを使用して、docxをpdfに変換します。

import Java.io.File;
import Java.io.FileInputStream;
import Java.io.FileOutputStream;
import Java.io.InputStream;
import Java.io.OutputStream;

import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.LocalConverter;

public class Document4jApp {

    public static void main(String[] args) {

        File inputWord = new File("Tests.docx");
        File outputFile = new File("Test_out.pdf");
        try  {
            InputStream docxInputStream = new FileInputStream(inputWord);
            OutputStream outputStream = new FileOutputStream(outputFile);
            IConverter converter = LocalConverter.builder().build();
            converter.convert(docxInputStream).as(DocumentType.DOCX).to(outputStream).as(DocumentType.PDF).execute();
            outputStream.close();
            System.out.println("success");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
0
Shakthifuture

このコードを使用します。

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();
}
0
Jesús Sánchez