CGContextDrawPDFPage显示白色或乱码文本

CGContextDrawPDFPage显示白色或乱码文本,pdf,text,ipad,cgcontext,Pdf,Text,Ipad,Cgcontext,在更新我的iPad应用程序的过程中,我一直在尝试将现有PDF文档中的一个页面绘制到核心图形上下文中,然后将其另存为新的PDF,但很难正确显示文本。新创建的PDF中的图像看起来很棒,但文本很少正确显示:更常见的情况是它显示为白色/不可见或乱码。当文本不可见时,我仍然能够选择它应该在哪里,并将其正确复制/粘贴到文本编辑器中。这是否与iPad上可用字体数量有限有关 我的代码如下: CGPDFDocumentRef document = CGPDFDocumentCreateWithProvider(d

在更新我的iPad应用程序的过程中,我一直在尝试将现有PDF文档中的一个页面绘制到核心图形上下文中,然后将其另存为新的PDF,但很难正确显示文本。新创建的PDF中的图像看起来很棒,但文本很少正确显示:更常见的情况是它显示为白色/不可见或乱码。当文本不可见时,我仍然能够选择它应该在哪里,并将其正确复制/粘贴到文本编辑器中。这是否与iPad上可用字体数量有限有关

我的代码如下:

CGPDFDocumentRef document = CGPDFDocumentCreateWithProvider(dataProvider);
CGPDFPageRef page = CGPDFDocumentGetPage(document, pageNumberToRetrieve);
CGRect pageRect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);

UIGraphicsBeginPDFContextToFile(pathToFile, pageRect, nil);
CGContextRef context = UIGraphicsGetCurrentContext();

CGContextBeginPage(context, NULL);

// I don't think this line is necessary, but I have tried both with and without it.
CGContextSetTextDrawingMode (context, kCGTextFill);

CGContextDrawPDFPage(context, page);

CGContextEndPage(context);
UIGraphicsEndPDFContext();
CGDataProviderRelease(dataProvider);
CGPDFDocumentRelease(document);
如果有人有任何建议,我将非常感谢听取他们的意见

谢谢你抽出时间


Rob

是否要在屏幕上渲染?我不认为需要UIGraphicsBeginPDFContextToFile? 但是,要在屏幕上进行渲染,可以使用以下方法:

pageReference = CGPDFDocumentGetPage(pdfReference, page);

  CGContextRef context = UIGraphicsGetCurrentContext();
  @try {
    CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
    CGContextScaleCTM(context, scale, -scale);

    CGContextSaveGState(context);
    @try {
      CGAffineTransform pdfTransform = CGPDFPageGetDrawingTransform(pageReference, kCGPDFCropBox, self.bounds, 0, true);
      CGContextConcatCTM(context, pdfTransform);
      CGContextDrawPDFPage(context, pageReference);
    }
    @finally {
      CGContextRestoreGState(context);
    }
  }
  @finally {
    UIGraphicsEndImageContext();
  }

在图像上下文中绘图不会造成问题(文本显示正确)

我试图做的是创建一个新的PDF文件,其中只包含原始PDF的几页。由于某种原因,文本似乎无法正确地绘制到新文件中

信息在那里(我可以通过“猜测”文本应该在预览中的位置来选择文本),但它不会呈现。我假设CGContextDrawPDFPage将字符串写入PDF文件,但不绘制它,因为它不知道该字体的字符“看起来像什么”


我认为PDF中嵌入字体的意义在于,即使系统(在本例中是iPad)上没有安装这种字体,程序也能够执行这些操作。这是格式的限制还是石英框架的限制?

“在更新我的iPad应用程序的过程中,我一直试图将一个页面从现有的PDF文档绘制到一个核心图形上下文中,然后将其保存为新的PDF,[…]”这对我来说在早上8:15实际上很简单。说真的,你看过“Quartz 2d编程指南:PDF文档创建、查看和转换”文档了吗?如果没有,则有一个关于如何创建文档、将数据呈现到其上下文并保存该文件的代码示例。