- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在某些 PDF 日志记录中遇到问题,无法控制某些节点编号和字体系列,这导致我的应用程序变慢。有人知道如何禁用日志记录吗?
我用过: CGContextDrawPDFPage(上下文,页面);
并非所有 PDF 都会出现这种情况,another SO question 中有一个解释。是当渲染器不知道 PDF 使用的字体时会发生日志记录。我使用的PDF是http://dl.dropbox.com/u/861361/test.pdf
仅供引用,我使用的是 3.2 iOS (iPad) 版本
最佳答案
不幸的是我不知道如何抑制日志记录。
有一种方法可以获取字形并将文本绘制为矢量元素而不是文本,从而避免字体问题。 (信用:jegeblad)。字形并不是直接的字符。
创建字体:
//NSString * fontName;
CGFont cgfont = CGFontCreateWithFontName ((CFStringRef)fontName);
CGContextSetFont(cg, cgfont);
CGContextSetFontSize(cg, fontSize);
如果我们想画例如一个名为 word 的 NSString..获取有关字形的一些信息:
int count = [word.s length];
unichar * buffer = new unichar[count+1];
CGGlyph * glyphs = new CGGlyph[count+1];
int * adv = new int[count+1];
CGRect * rects = new CGRect[count+1];
[word.s getCharacters:buffer];
CGFontGetGlyphsForUnichars(cgfont, buffer, glyphs, [word.s length]);
CGFontGetGlyphAdvances(cgfont,glyphs,count,adv);
CGFontGetGlyphBBoxes(cgfont, glyphs, count, rects);
换句话说,我们得到了单词字母的字形,然后得到了各个字形的尺寸和进度。注意:我找不到任何方法来确定单词的字形数量。现在我们准备绘制字形:
CGContextShowGlyphsAtPoint(outputCG, x, y, glyphs,count);
这很简洁,但它并不能解决整个字体嵌入问题。然而,如果让 quartz 将文本绘制为矢量元素而不是……嗯……文本,我们就可以解决这个问题。我们只需使用以下函数更改文本绘制方式:
CGContextSetTextDrawingMode (outputCG, kCGTextClip);
这将使用文本作为剪切路径,而不是简单地绘制它。如果我们首先调用 CGContextShowGlyphsAtPoint,然后在显示字形的区域周围绘制一个填充矩形,则该矩形将被剪切到字形,本质上我们正在绘制单词的字母。但是,由于我们绘制的是矩形而不是文本,因此生成的 PDF 文件将不包含文本,而是包含一组看起来像文本的矢量元素。因此Quartz不再需要在PDF文件中嵌入字体。执行此操作的一种方法是通过以下循环:
double scale = ffontSize / double( CGFontGetUnitsPerEm(cgfont) );
for (size_t i = 0; i < count; ++i) {
CGContextSaveGState(outputCG);
CGContextShowGlyphsAtPoint(outputCG, x, p.y + spaceH, &glyphs[i], 1 );
CGContextBeginPath(outputCG);
CGContextAddRect(outputCG,
CGRectMake(x+scale* rects[i].origin.x , p.y + spaceH + scale*(rects[i].origin.y),
scale*(rects[i].size.width), scale*(rects[i].size.height)) );
CGContextFillPath(outputCG);
CGContextRestoreGState(outputCG);
x += adv[i] * scale;
}
通过将剪切路径设置为单个字形并在其后面绘制一个填充矩形,一次绘制一个字形。当然,我已将当前填充颜色设置为我想要文本的颜色。
完成后记得释放字体:
CGFontRelease(cgfont)
;
关于iphone - 如何禁用 CGContextDrawPDFPage 生成的某些 PDF 上的控制台日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4346557/
我有一个 PDF 阅读器应用程序,它在 UIScrollView 中显示多个带有 PDF 层的 UIViewController。 我遇到的是当用户滑动 ScrollView 时偶尔会崩溃。 Fabr
我正在尝试渲染一个带有一些注释的 PDF 页面(发送到电子邮件),大多数情况下它工作正常。 但是,有了这个 PDF特别是它似乎每次在第一页调用 CGContextDrawPDFPage 时都会崩溃。我
这是 ipad 杂志应用程序。我们需要读取 PDF 并将其转换为 PNG 图像作为缩略图。在转换之前读取 PDF(调用 CGContextDrawPDFPage)后,内存会快速增加,并且永远不会释放,
当我用 Instruments 分析我的应用程序时,我发现 CGContextDrawPDFPage 分配的数据并没有立即释放。由于我的程序收到很多“内存警告”,我想释放尽可能多的内存,但我不知道如何
当我用 Instruments 分析我的应用程序时,我发现 CGContextDrawPDFPage 分配的数据并没有立即释放。应用因 CGContextDrawPDFPage 而崩溃。 你好,这是我
我继承了一些打开源 PDF 并创建一个 CGContextRef 的 iOS 代码,我们从源文档向其绘制单个页面。问题是某些页面只有一个文档,不幸的是我们的帮助文档,这导致此代码崩溃。 最终目标是一次
我在某些 PDF 日志记录中遇到问题,无法控制某些节点编号和字体系列,这导致我的应用程序变慢。有人知道如何禁用日志记录吗? 我用过: CGContextDrawPDFPage(上下文,页面); 并非所
What is the best way to use the custom UI graphics on the iPhone? 我遇到了 CGContextDrawPDFPage 和 Panic
我在尝试编写一个简单的 Automator 脚本来组合多个单页 PDF 文件时遇到了这个问题。我有 88 个文件需要组合,每个文件大小正好为 300KB,所以我预计最终产品约为 30MB;使用“合并
在 iOS 8.1 下,当使用 CGContextDrawPDFPage 将 PDF 页面渲染到图形上下文时,我遇到了内存泄漏。它不会发生在模拟器中,但每次我这样做(在 iPad Air 上)时,我都
我需要显示从 Web 服务接收的 PDF 文件的内容。 我的问题是所有 PDF 框返回相同的值。您知道我正在使用的文件可能有什么问题吗? CGPDFPageRef drawPDFPageRef = C
我正在查看 Apple 的 ZoomingPDFViewer示例(来源可从链接获得)。当它运行时,它给出了这个错误: ZoomingPDFViewer[5751] : KSTFBB+Helvetic
我是一名优秀的程序员,十分优秀!