テーブルと画像を含む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に変換することです。
提案してください。
使用される瓶:
一部のライブラリがありません。
次のライブラリを追加して、コードを実行できます。
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)を正常に変換しました。
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:
楽しい :)
これらの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>
私は多くの研究を行ってきましたが、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();
}
}
}
このコードを使用します。
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();
}