2017-05-30 11 views
0

私はdocx4jを使ってHTMLテキストからPDF文書を作成しています。 HTMLテキストには英語とMarathiのテキストがあります。英語のテキストはpdfに適切に書かれています。生成されたpdfにはマラティのテキストは表示されません。docx4jを使用してMarathiテキストのHTMLテキストをPDFドキュメントに書き込む方法は?

テキストの代わりに、四角いボックスが表示されます。

以下は私が使用しているコードです。

import java.io.FileOutputStream; 

import org.docx4j.Docx4J; 
import org.docx4j.convert.in.xhtml.XHTMLImporterImpl; 
import org.docx4j.openpackaging.packages.WordprocessingMLPackage; 

public class ConvertInXHTMLFragment { 

    static String DEST_PDF = "/home/Downloads/Sample.pdf"; 

    public static void main(String[] args) throws Exception { 

     // String content = "<html>Hello</html>"; 
     String content = "<html>पासवर्ड</html>"; 

     WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage(); 

     XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage); 

     wordMLPackage.getMainDocumentPart().getContent().addAll(XHTMLImporter.convert(content, null)); 

     Docx4J.toPDF(wordMLPackage, new FileOutputStream(DEST_PDF)); 
    } 

} 

EDIT 1: -

これはXSLFO

import java.io.OutputStream; 

import org.docx4j.Docx4J; 
import org.docx4j.convert.out.FOSettings; 
import org.docx4j.fonts.IdentityPlusMapper; 
import org.docx4j.fonts.Mapper; 
import org.docx4j.fonts.PhysicalFont; 
import org.docx4j.fonts.PhysicalFonts; 
import org.docx4j.model.fields.FieldUpdater; 
import org.docx4j.openpackaging.packages.WordprocessingMLPackage; 
import org.docx4j.samples.AbstractSample; 

public class ConvertOutPDFviaXSLFO extends AbstractSample { 

    static { 
     inputfilepath = "/home/Downloads/100.docx";; 
     saveFO = true; 
    } 

    static boolean saveFO; 

    public static void main(String[] args) 
      throws Exception { 

     try { 
      getInputFilePath(args); 
     } catch (IllegalArgumentException e) { 
     } 

     String regex = null; 
     PhysicalFonts.setRegex(regex); 

     WordprocessingMLPackage wordMLPackage; 
     System.out.println("Loading file from " + inputfilepath); 
     wordMLPackage = WordprocessingMLPackage.load(new java.io.File(inputfilepath)); 

     FieldUpdater updater = null; 

     Mapper fontMapper = new IdentityPlusMapper(); 
     wordMLPackage.setFontMapper(fontMapper); 

     PhysicalFont font = PhysicalFonts.get("Arial Unicode MS"); 
     fontMapper.put("Mangal", font); 

     FOSettings foSettings = Docx4J.createFOSettings(); 
     if (saveFO) { 
      foSettings.setFoDumpFile(new java.io.File(inputfilepath + ".fo")); 
     } 
     foSettings.setWmlPackage(wordMLPackage); 

     String outputfilepath; 
     if (inputfilepath==null) { 
      outputfilepath = System.getProperty("user.dir") + "/OUT_FontContent.pdf";   
     } else { 
      outputfilepath = inputfilepath + ".pdf"; 
     } 
     OutputStream os = new java.io.FileOutputStream(outputfilepath); 

     Docx4J.toFO(foSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL); 

     System.out.println("Saved: " + outputfilepath); 

     if (wordMLPackage.getMainDocumentPart().getFontTablePart()!=null) { 
      wordMLPackage.getMainDocumentPart().getFontTablePart().deleteEmbeddedFontTempFiles(); 
     } 

     // This would also do it, via finalize() methods 
     updater = null; 
     foSettings = null; 
     wordMLPackage = null; 
    } 
} 

からのサンプルの一つからですが、私は、出力PDFでマラーティー語テキストの代わりに####を取得。

+0

marathiにはどのような一般的なフォントにグリフがありますか?彼らはArial Unicode MSですか? – JasonPlutext

+0

@JasonPlutextマンガルフォントhttp://indiatyping.com/index.php/download/mangal-font – ashishjmeshram

+0

@JasonPlutext Arial Unicode MSも動作するはずです。 – ashishjmeshram

答えて

0

Docx4j v3.3は、2つの全く異なる方法でPDF出力をサポートしています。

デフォルトでは、PlutextのPDFコンバータを使用しています。

<w:r> 
    <w:rPr> 
     <w:rFonts w:ascii="mangal" w:eastAsia="mangal" w:hAnsi="mangal" w:cs="mangal"/> 
    </w:rPr> 
    <w:t>पासवर्ड</w:t> 
    </w:r> 

同じのArial UnicodeのMSのために適用されます:あなたはにリンクされマンガルフォントが最速にインストールされ、DOCXに指定されている場合、物事は動作します。

他の方法はXSL FOによるPDFです。 https://github.com/plutext/docx4j-export-FO

関連するフォントがインストールされている場合は、うまくいくはずです。そうしないと、使用するフォントを教えておく必要があります。

例えば、docxが私が持っていないmangalフォントを指定しているとします。しかし、私はArial Unicode MSを持っています。だから私は、その代わりに使用するXSL FOのプロセスを教えて:

fontMapper.put("mangal", PhysicalFonts.get("Arial Unicode MS")); 

注意が、あなたはあなたのdocxファイルが指定されているフォント、そしてどのようにしたいフォントを指定するようにするかを知る必要があります。行うにはあなたの以前の質問に私の答えからコピーされたXHTMLのインポート、のそれ: -

フォントは、マラーティー語がRFonts オブジェクト内の他のいずれかの属性に依存する可能性があります https://github.com/plutext/docx4j-ImportXHTML/blob/master/src/main/java/org/docx4j/convert/in/xhtml/FontHandler.java#L58

によって処理されます。ご覧になるには、動作するdocxを見る必要があります。適切なフォントマッピングを挿入するには https://github.com/plutext/docx4j-ImportXHTML/blob/master/src/main/java/org/docx4j/convert/in/xhtml/FontHandler.java#L54を使用できます。

+0

私はXSL FOを調べました。今私は#########をマラソンのテキストの代わりに得ます。 – ashishjmeshram

+0

また、PhysicalFonts.get( "Arial Unicode MS")では常にnullが返されます。 – ashishjmeshram

+0

あなたのコンピュータにArial Unicode MSがインストールされていますか?そうでない場合はnullを返します。 – JasonPlutext

関連する問題