2017-08-15 12 views
-1

フォントをcyrillic.Iにあるテキストに設定したいのですが、テキストをcyrilicに変換できますが、Fontを同じテキストに設定することはできません。Itext UTFエンコーディングとフォントの両方を段落に設定する方法

File fontFile = new File("arialuni.ttf"); 
    Document document = new Document(); 
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(RESULT)); 
    document.open(); 
    writer.getAcroForm().setNeedAppearances(true); 
    Font boldFont = new Font(Font.FontFamily.TIMES_ROMAN, 18, Font.BOLD); 
    Font normalFont = new Font(Font.FontFamily.TIMES_ROMAN, 10, Font.ITALIC); 
    BaseFont unicode = BaseFont.createFont(fontFile.getAbsolutePath(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
    FontSelector fs = new FontSelector(); 
    fs.addFont(new Font(unicode)); 
    addContent(document,article.getTitle(),fs,boldFont); 

private static void addContent(Document document,String paragraph,FontSelector fs,Font font) throws DocumentException { 
     Phrase phrase = fs.process(paragraph); 
     Paragraph p = new Paragraph(phrase.toString(),font); 
     document.add(p); 
} 
+1

なぜ 'addContent'で' FontSelector'と 'Font'の両方を適用しようとしますか?あなたがセレクタにフォントを選択させるか、それとも明示的に自分自身で行うかを指定します。 – mkl

答えて

2

@mklはコメントで示しているように、あなたはあなたに簡単なフォント(とParagraphを作成し、適切なユニコードフォント(符号化パラメータとしてBaseFont.IDENTITY_Hとフォント)を使用することができPhraseを与えるFontSelector機能が混合されていますFont.FontFamily.TIMES_ROMAN)。

あなたがfs.process(paragraph)を行うと、あなたはすべてのChunkが正しいフォントを持っていますが、あなたがphrase.toString()を行うとき、あなたはすべてのこれらのフォントを捨て、そしてあなたがFont.FontFamily.TIMES_ROMANに置き換えているPhraseを取得します。それは意味をなさない。

は、なぜあなたはこれに代わるものではありません。

Phrase phrase = fs.process(paragraph); 
Paragraph p = new Paragraph(phrase.toString(),font); 
document.add(p); 

で:

document.add(fs.process(paragraph)); 

あなたaddContent()メソッドは、パラメータとしてFontを必要としないのはなぜ?

Paragraph p = new Paragraph(); 
p.add(fs.process(paragraph)); 
document.add(p); 

あるいは:限り、あなたが平坦化「によって間違ったフォントで、正しいフォントを置き換えるものではありませんよう

Paragraph p = new Paragraph(fs.process(paragraph)); 
document.add(p); 

また、あなたが本当にあなたもこれを行うことができますParagraphオブジェクトが必要な場合"PhraseからStringまでは、おそらく問題ありません。

おそらくFontSelectorは必要ありません。これを行うには何も問題はありません。

BaseFont unicode = BaseFont.createFont(
    fontFile.getAbsolutePath(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
Font font = new Font(unicode, 12); 
Paragraph p = new Paragraph(paragraph, font); 

複雑なことを複雑にしているようです。

+0

それは動作します!どうもありがとうございました! :) –

+0

通常、答えが問題を解決すると、答えが受け入れられます。スコアの左側にあるチェックマークをチェックしてください(スコアは0です)。 –

関連する問題