【问题标题】:How to output a Euro symbol in a PDF如何在 PDF 中输出欧元符号
【发布时间】:2011-09-21 18:57:28
【问题描述】:

我正在尝试使用 Core Graphics 将欧元符号输出到 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));

【问题讨论】:

  • 我怀疑CGFontCreateCopyWithVariations 方法可能掌握着指定变化的秘密,但我几乎没有发现它的用法示例,所以不知道从哪里开始。任何更多的指针都会非常方便!

标签: iphone cocoa pdf currency euro


【解决方案1】:

那是因为MacRomanEncoding 默认不包含欧元符号,请参阅“PDF 参考 1.7”(第 D.1 节拉丁字符集和编码)中的此引用:

  1. 在 PDF 1.3 中,欧元字符被添加到 Adob​​e 标准拉丁字符集中。它在 WinAnsiEncoding 中编码为 200,在 PDFDocEncoding 中编码为 240,分配以前未使用的代码。 Apple 将代码 333 的 Mac OS 拉丁文本编码从货币字符更改为欧元字符。然而,这种不兼容的变化并没有反映在 PDF 的 MacRomanEncoding 中,它继续将代码 333 映射到货币。如果需要欧元字符,可以使用编码字典来指定与 MacRomanEncoding 的唯一区别。

【讨论】:

  • 谢谢你,非常有用。现在只需要了解如何应用“编码字典”。
【解决方案2】:

您应该可以使用CGContextShowGlyphsAtPoint 来绘制欧元符号。问题是您需要将该函数传递给 CGGlyph 作为输入,而不是 Unicode 字符。此外,从 Unicode 字符到 CGGlyphs 的映射是依赖于字体的,而且通常很重要。 (有时它是一个简单的偏移量,您可以根据试验和错误猜测。)

看起来 Core Text 有一个函数 CTFontGetGlyphsForCharacters 可以执行转换;不过,我从未在实践中使用过它:

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

另外:如果您使用CGContextShowGlyphsAtPoint,则需要将对CGContextSelectFont 的调用替换为CGContextSetFontCGContextSetFontSize

【讨论】:

  • 好的,所以我使用了CTFontGetGlyphsForCharacters(ctFont, (const unichar*)[@"€" cStringUsingEncoding:NSUnicodeStringEncoding], glyphs, 1);CGContextShowGlyphsAtPoint(pdfContext, 10, 10, glyphs, 1);。这成功地将欧元符号输出到 PDF,所以我现在正在路上。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-15
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多