Преобразование 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 с соответствующим форматом и выравниванием.
Пожалуйста, предложите.
Используемые Банки:
3 ответа:
Вам не хватает некоторых библиотек.
Я могу запустить ваш код, добавив следующие библиотеки:
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Я успешно преобразовал документ Word длиной 6 страниц (.docx) с таблицами, изображениями и различным форматированием.
В дополнение к ответу VivekRatanSinha , я хотел бы опубликовать полный код и необходимые банки для людей, которые нуждаются в этом в будущем.
Код:
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()); } } }
И банки:
Наслаждайтесь :)
Я использую этот код.
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(); }