web-dev-qa-db-ja.com

docxファイルをPDF with Java

DOCXファイルをMSWordからPDFに変換するための「安定した」方法を探しています。今からリスナーとしてインストールされているOpenOfficeを使用していますが、ハングすることがよくあります。問題は、多くのユーザーがSXW、DOCXファイルを同時にPDFに変換したいという状況があることです。他の可能性はありますか?このサイトの例を試してみました: https://angelozerr.wordpress.com/2012/12/06/how-to-convert-docxodt-to-pdfhtml-with-Java/ しかし、出力結果は良くありません(変換されたドキュメントにはエラーとレイアウトがありますかなり変更されています)。

ここに「ソース」docxドキュメントがあります: enter image description here

これは、docx4jで変換されたドキュメントですが、ドキュメント内にいくつかの例外テキストがあります。また、右上隅のテキストが欠落しています。

enter image description here

これはPDF docxからpdfへのコンバーターとしてOpenOfficeで作成されました。一部のテキストに「右上隅」がありません

enter image description here

Javaでdocxをpdfに変換する他のオプションはありますか?

6
Ferguson

変換を行う方法はたくさんあります。使用される方法の1つは、POIとDOCX4jを使用することです。

InputStream is = new FileInputStream(new File("your Docx PAth"));
            WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage
                    .load(is);
            List sections = wordMLPackage.getDocumentModel().getSections();
            for (int i = 0; i < sections.size(); i++) {
                wordMLPackage.getDocumentModel().getSections().get(i)
                        .getPageDimensions();
            }
            Mapper fontMapper = new IdentityPlusMapper();
            PhysicalFont font = PhysicalFonts.getPhysicalFonts().get(
                    "Comic Sans MS");//set your desired font 
            fontMapper.getFontMappings().put("Algerian", font);
            wordMLPackage.setFontMapper(fontMapper);
            PdfSettings pdfSettings = new PdfSettings();
            org.docx4j.convert.out.pdf.PdfConversion conversion = new org.docx4j.convert.out.pdf.viaXSLFO.Conversion(
                    wordMLPackage);
            //To turn off logger
            List<Logger> loggers = Collections.<Logger> list(LogManager
                    .getCurrentLoggers());
            loggers.add(LogManager.getRootLogger());
            for (Logger logger : loggers) {
                logger.setLevel(Level.OFF);
            }
            OutputStream out = new FileOutputStream(new File("Your OutPut PDF path"));
            conversion.output(out, pdfSettings);
            System.out.println("DONE!!"); 

これは完璧に機能し、複数のDOCXファイルで試してみました。

2
KishanCS