it-roy-ru.com

Преобразование DOCX в PDF в Java

Я пытаюсь преобразовать файл 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

8
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-схема-1.3.jar 

Я успешно конвертировал документ Word длиной 6 страниц (.docx) с таблицами, изображениями и различным форматированием.

10
VivekRatanSinha

В дополнение к 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

Наслаждаться :)

15
user1999397

Я провел много исследований и обнаружил, что Documents4j - лучший бесплатный API для конвертации docx в pdf. Выравнивание, шрифт everthing Documents4j делает хорошую работу. 

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

Вы должны добавить эти зависимости 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>
0
iraqi eagle