【问题标题】:PDF from UIScrollView is blankUIScrollView 中的 PDF 为空白
【发布时间】:2015-08-05 11:39:03
【问题描述】:

我有一个 UIScrollView,我想将它导出为 PDF 文件。滚动视图包含另一个实际上包含可见内容的视图(内容视图):

scrollView : UIScrollView
-> contentView : UIView
   -> view1 : UIView
      ...
   -> view2 : UIView
      ...
   ...

PDF导出的代码是:

func generatePDFData() -> NSData {
    // I first tried to use the scroll view but the result was the same
    let bounds = contentView.bounds

    let pdfData = NSMutableData()
    UIGraphicsBeginPDFContextToData(pdfData, bounds, nil)

    let pdfContext = UIGraphicsGetCurrentContext()
    CGContextSetInterpolationQuality(pdfContext, kCGInterpolationMedium)
    CGContextSetRenderingIntent(pdfContext, kCGRenderingIntentDefault)
    CGPDFContextBeginPage(pdfContext, nil)

    // without the following two settings, the result remains the same
    CGContextScaleCTM(pdfContext,1.0,-1.0)
    CGContextTranslateCTM(pdfContext,0.0,-bounds.size.height)

    contentView.layer.renderInContext(pdfContext)

    UIGraphicsEndPDFContext()
    return pdfData
}

然后我使用这些数据生成 PDF 文件。生成的文件大小约为 120 KB,因此我希望它包含一些内容(视图不包含任何图像)。但是,当我尝试打开它时,我只是得到一个空白页。

【问题讨论】:

    标签: ios swift pdf uiscrollview core-graphics


    【解决方案1】:

    看起来您唯一的问题是在上下文中开始新的 pdf 页面。将CGPDFContextBeginPage(pdfContext, nil) 替换为UIGraphicsBeginPDFPage(),一切正常。

    【讨论】:

    • 另外,CGContextScaleCTM CGContextTranslateCTM 需要在 UIGraphicsBeginPDFPage() 发生之前调用。否则,选项对结果没有影响。
    【解决方案2】:

    使用

    contentView.drawViewHierarchyInRect(bounds, afterScreenUpdates: false)
    

    【讨论】:

    • 这不会改变任何东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 2016-05-29
    • 2020-09-09
    • 2016-12-20
    • 2023-04-06
    • 2015-07-28
    相关资源
    最近更新 更多