2

CoreGraphicsを使用してユーロ記号をPDFに出力しようとしています。NSMacOSRomanStringEncodingを使用する次のコードがあります(£と$の記号を正しく表示するには、これを使用する必要がありました)が、ユーロ記号は¤として表示されます

CGRect pageRect = CGRectMake(0, 0, 800, 1150);
CFMutableDataRef pdfData = (CFMutableDataRef) [NSMutableData dataWithCapacity:0];                     
CGDataConsumerRef dataConsumer = CGDataConsumerCreateWithCFData(pdfData);
CGContextRef pdfContext = CGPDFContextCreate(dataConsumer, &pageRect, nil);

CGContextSelectFont(pdfContext, "Helvetica", 15, kCGEncodingMacRoman);
CGContextSetTextDrawingMode (pdfContext, kCGTextFill);
CGContextSetRGBFillColor (pdfContext, 0, 0, 0, 1);
const char *ctext = [@"€" cStringUsingEncoding:NSMacOSRomanStringEncoding];
CGContextShowTextAtPoint(pdfContext, 10, 10, ctext, strlen(ctext));
4

2 に答える 2

2

これは、デフォルトでユーロ記号が含まれていないためMacRomanEncodingです。「PDFリファレンス1.7」(セクションD.1ラテン文字セットとエンコーディング)からのこの引用を参照してください。

  1. PDF 1.3では、Adobeの標準ラテン文字セットにユーロ文字が追加されました。WinAnsiEncodingでは200、PDFDocEncodingでは240としてエンコードされ、以前は使用されていなかったコードが割り当てられます。Appleは、コード333のMacOSラテンテキストエンコーディングを通貨文字からユーロ文字に変更しました。ただし、この互換性のない変更は、コード333を通貨にマッピングし続けるPDFのMacRomanEncodingには反映されていません。ユーロ文字が必要な場合は、エンコーディング辞書を使用して、MacRomanEncodingとのこの単一の違いを指定できます。
于 2011-09-21T19:11:17.060 に答える
0

CGContextShowGlyphsAtPointを使用してユーロ記号を描画できるはずです。CGGlyph問題は、その関数をUnicode文字ではなく入力として渡す必要があることです。さらに、Unicode文字からへのマッピングCGGlyphsはフォントに依存し、多くの場合重要です。(試行錯誤に基づいて推測できる単純なオフセットの場合もあります。)

コアテキストにはCTFontGetGlyphsForCharacters、変換を実行する可能性のある関数があるようです。ただし、実際に使用したことはありません。

http://developer.apple.com/library/mac/#documentation/Carbon/Reference/CTFontRef/Reference/reference.html

また、を使用する場合は、への呼び出しをとCGContextShowGlyphsAtPointに置き換える必要があります。CGContextSelectFontCGContextSetFontCGContextSetFontSize

于 2011-09-22T10:01:05.520 に答える