2016-12-08 8 views
1

私はiText 7の問題に遭遇しました。ここでは、単一の文字に複数のマークが使用されているときに適切に積み重ねるのではなく、重複したマークが重ねて表示されます。正しく表示される設定がありますか、これはiText 7のバグですか?どんな助けでも大歓迎です。これは、以下のようにPDF内にテキストオブジェクトを作成した場合に発生します。明らかに、関連するビットを実際のフォントオブジェクトに置き換えてください。iText 7分音マークの積み重ねを正しく行うにはどうすればよいですか?

new Text("ḗ and ṓ are characters that display incorrectly").setFont(<UNICODE COMPATIBLE FONT LIKE CHARIS>); 
+0

あなたが書いている実際のUnicodeコードは何ですか? –

+0

文字 "ḗ"は実際には、0x65(e)、0x304(̄、結合マクロン)、および0x301(組み合わせアクセントアクセント)の3つのUnicode文字です。 –

+0

[pdfCalligraph](http://itextpdf.com/itext7/pdfcalligraph)アドオンを使用していますか?もしそうでなければ、それは動作するはずがありません。すべての高度なタイポグラフィは、アドオンによって行われます。 –

答えて

2

ブルーノとブノワは正しくあなたがpdfCalligraphモジュールを必要とする発音記号を積み重ねるような高度なタイポグラフィのもののために、あなたがあなた自身の責任で試すことができます回避策があることを指摘している間。基本グリフと発音区別記号の組み合わせが実際のものである場合、それらが実際のテキストでいくつかの言語やその他の既知のコンテキストで発生することを意味する場合、そのような組み合わせはおそらくUnicodeに存在し、たとえば、指定したテキストには、0xU1E170x1E53のUnicode文字があります。このようなグリフが含まれているフォントもあるので、グリフを組み合わせて表示すると、ベースグリフとスタッキングの区別記号を表示する2つ目のオプションがあります。たとえば、Windowsに同梱されているArialUniには、上記のグリフが含まれています。

このアプローチをとることに、あなたは、単一のグリフに知られているUnicodeの基本グリフ+特殊記号の組み合わせを構成するために、次のコードが必要になります

String originalStr = "ḗ and ṓ are characters that display incorrectly"; 
String normalizedStr = java.text.Normalizer.normalize(originalStr, Normalizer.Form.NFC); 
new Text(normalizedStr); // Use this normalized Text instance 

私はArialUniで得た結果: enter image description here

しかし、私が言及したように、Unicodeとフォントの両方で必要な組み合わせが存在する場合にのみ機能するため、あなた自身の責任で行ってください。正しいレンダリングのためには、まだpdfCalligraphを使用してください。

関連する問題