2016-12-13 32 views
5

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

「ソース」のdocx文書である:ここ enter image description here

文書は、文書内の一部の例外テキストでdocx4jに変換されます。また、右上隅のテキストもありません。

enter image description here

これは、DOCXからPDFへの変換器としてのOpenOfficeで作成したPDFです。いくつかのテキストは、「右上」

enter image description here

のJavaでPDFにdocxファイルを変換するために他のいくつかのオプションがありますが不足していますか?

+0

SOにはありません。 「ツールやライブラリをお勧めしますか?」と尋ねるときに、なぜあなたはオープンオフィスのセットアップを安定させようとしないのですか? –

+0

JODConverter(https://code.google.com/archive/p/jodconverter/)またはdocx4j(http://www.docx4java.org/trac/docx4j) – Davide

+0

JODConverterはバックグラウンドでOpenOfficeを使用しています。 OpenOfficeが何らかの理由なくハングする(クラッシュする)ことがあります。私もdocx4jを試しました(私の質問を見てください) – Ferguson

答えて

2

使用方法の転換 つを行うための方法の多く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ファイルにしようとした作品があります。

+1

あなたのメソッドを試しましたが、いくつかの例外があります:WARN org.apache.fop.image.loader.batik.PreloaderSVG .preloadImage line 76 - Batik notクラスパスに java.lang.NoClassDefFoundErrorが:org.apache.fop.image.loader.batik.PreloaderSVG.preloadImageにおけるORG /アパッチ/バティック/ブリッジ/ユーザーエージェント \t(PreloaderSVG.java:69) – Ferguson

+0

インポートorg.apache。 log4j.Level; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.docx4j.convert.out.pdf.viaXSLFO.PdfSettings; import org.docx4j.fonts.IdentityPlusMapper; import org.docx4j.fonts.Mapper; import org.docx4j.fonts.PhysicalFont; import org.docx4j.fonts.PhysicalFonts; import org.docx4j.openpackaging.packages.WordprocessingMLPackage; –

+0

これらは必須です –

関連する問題