【问题标题】:Write PDF text to a PDFContext in iOS在 iOS 中将 PDF 文本写入 PDFContext
【发布时间】:2012-05-20 08:47:55
【问题描述】:

通过以下方式绘制到 pdf 上下文非常简单:

UIGraphicsBeginPDFContextToFile(pdfFile, CGRectZero, nil);
UIGraphicsBeginPDFPageWithInfo(sheet.frame, nil);    
CGContextRef ctx = UIGraphicsGetCurrentContext();

CGRect text_rect = ...
NSFont *font = ...
NSString * str = @"foo";
[str drawInRect:text_rect withFont:font];

...draw to context...

但是文本显然是光栅化的......无论如何,是否可以将 pdf 样式文本添加到 pdf 文件中?所以用户可以选择它,复制它等等。可能通过核心图形以外的库?

【问题讨论】:

  • 你是如何绘制文本的?这是重要的部分。根据 API 和配置方式,文本在 PDF 中可能会或可能不会被光栅化。
  • 更新了示例以准确显示它。还有哪些其他 API?我尝试了 [CALayer renderInContext] 和其他一些...全部栅格化。什么图书馆没有?
  • 如果您检查了 pdf 标准规范,您会发现您实际上需要在文件中回显 Tj(ABC) 之类的内容,以使其显示未光栅化的文本。我不知道有任何适用于 iOS 的 pdf 创建库。
  • 像你一样,我希望-[NSString drawInRect:withFont:] 将文本呈现为文本。不知道为什么不是——你使用的是奇怪的字体、阴影还是颜色? -[CALayer renderInContext:] 肯定会光栅化,因为 CALayers 都是关于位图的;你绝对不想那样。
  • This 可以帮到你

标签: objective-c ios pdf-generation core-graphics


【解决方案1】:

这绝对是可能的。 Here's a tutorial 展示了如何在 iOS 5 中生成和显示带有文本的 PDF 文档。

当我下载并运行项目时,放大时文本似乎没有被光栅化。当我在 OS X 的预览中打开生成的 PDF 时,我可以选择并复制文本。

本示例使用 Core Text 将文本绘制到 CGContext 中。如果您想尝试一下,应该很容易更改+[PDFRenderer drawText] 以尝试其他方法。

例如,我将其更改为使用与您类似的代码,并且效果很好:

CGRect text_rect = { 0, 100, 300, 50 };
UIFont *font = [UIFont systemFontOfSize:12];
NSString * str = @"Added foo bar";
[str drawInRect:text_rect withFont:font];

【讨论】:

  • 可能是因为我使用的是自定义字体?今天检查。
  • 我至少在 ios 8.3 中发现的是,如果你在上下文中渲染一个也在屏幕上的视图,它会产生一个非常漂亮的矢量化 PDF。但是如果你渲染一个不在屏幕上的视图,它就会光栅化。这绝对是一些内部核心图形故障。某些东西会在管道中的某个时间点对所有内容进行栅格化。
猜你喜欢
  • 1970-01-01
  • 2019-01-15
  • 2011-06-26
  • 2018-05-14
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 2016-04-19
  • 2013-09-22
相关资源
最近更新 更多