2011-10-24 121 views
2

私はitextとColdFusion(java)を使用してテキスト文字列をPDFドキュメントに書き出しています。私は使用する必要のあるtrueTypeフォントとopenTypeフォントの両方を持っています。 Truetypeフォントは正しく動作しているようですが、.otfで終わるフォントファイルではカーニングが使用されていません。下のコードはAirstream(OpenType)に "Line 1 of Text"と書いてありますが、 "T"と "e"の間のカーニングはありません。他のプログラムで同じフォントが使用されている場合は、カーニングしています。私もitextの新しいバージョンをダウンロードしましたが、カーニングはまだ動作しませんでした。誰かがカーテンをどのようにittfフォントで作業するように知っていますか?itextを使用したOpenTypeフォントカーニング

<cfscript> 
pdfContentByte = createObject("java","com.lowagie.text.pdf.PdfContentByte"); 
BaseFont= createObject("java","com.lowagie.text.pdf.BaseFont"); 
bf = BaseFont.createFont("c:\windows\fonts\AirstreamITCStd.otf", "" , BaseFont.EMBEDDED); 
document = createobject("java","com.lowagie.text.Document").init(); 
fileOutput = createObject("java","java.io.FileOutputStream").init("c:\inetpub\test.pdf"); 
writer = createobject("java","com.lowagie.text.pdf.PdfWriter").getInstance(document,fileOutput); 
document.open();  
cb = writer.getDirectContent(); 
cb.beginText(); 
cb.setFontAndSize(bf, 72); 
cb.showTextAlignedKerned(PdfContentByte.ALIGN_LEFT,"Line 1 of Text",0,72,0); 
cb.endText(); 
document.close(); 

bf.hasKernPairs(); //returns NO 
bf.getClass().getName(); //returns "com.lowagie.text.pdf.TrueTypeFont" 
</cfscript> 

答えて

1

準拠仕様:http://www.microsoft.com/typography/otspec/kern.htm 「kern」テーブルではCFFアウトラインを含むOpenType™フォントがサポートされておらず、「GPOS」OpenTypeレイアウトテーブルを使用する必要があります。

私はソースをチェックアウトしましたが、IText実装ではTrueTypeフォントのkernのみをチェックし、GPOSテーブルはまったく読み込まないため、内部kerningsは空でなければならず、hasKernPairsはfalseを返す必要があります。

ので、soloveに2方法があります。

  • はあなたが:)
  • は私が処理しています、私のためGPositionテーブルに
  • 待機を読み取ることによって、truetypefontをパッチ使用OTFを取り除きますcffのコンテンツですが、PDFはこれまでの私のオプションです:)可能性を排除しないでください:)
0

How to use Open Type Fonts in Javaについてこのスレッドをご覧ください。 otfはjavaでサポートされていないことが記載されています(iTextでさえも)。 Otfのサポートは、sdkのバージョンとOSによって異なります。

また、otfをttfに変換するFontForgeを使用することもできます。

関連する問題