gpt4 book ai didi

ios - 从 UIScrollView 创建 PDF(第一页之后的页面是空白的)

转载 作者:可可西里 更新时间:2023-11-01 01:06:22 25 4
gpt4 key购买 nike

我一直在研究堆栈和谷歌,试图找到正确的方法来解决这个问题,任何帮助都会很棒。

我可以在 PDF 中呈现第一页,但其他所有页面都是空白的。

我在 Storyboard的 View Controller 上有一个 UIScrollView。我在 View Controller 的 viewDidLoad 方法中将内容动态加载到该 ScrollView 中。添加任何项目后,我记录它的高度,然后相应地设置 ScrollView 的内容大小高度,所以 ScrollView 很好。它的内容宽度设置为 612

然后我调用一个函数来创建 PDF:

func createPDF() {

let pdfData = NSMutableData()

let scrollHeigt = scrollViewForContent.contentSize.height

let rawNumberOfPages = scrollHeigt / CGFloat(792)
let numberOfPages = Int(ceil(rawNumberOfPages))

var pageNumber = Int()

let pageSize = CGSizeMake(612, 792)

UIGraphicsBeginPDFContextToData(pdfData, CGRectZero, nil)
let pdfContext : CGContextRef = UIGraphicsGetCurrentContext()

do {

UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pageSize.height), nil)

if pageNumber < 1 {

scrollViewForContent.layer.renderInContext(pdfContext)

} else if pageNumber >= 1 {

let offsetForScroll = CGFloat(pageNumber * 792)

scrollViewForContent.setContentOffset(CGPointMake(0, offsetForScroll), animated: false)

CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0, -offsetForScroll)

scrollViewForContent.layer.renderInContext(pdfContext)

}

pageNumber++

}
while pageNumber < numberOfPages

UIGraphicsEndPDFContext()

let tempDir = NSTemporaryDirectory()

let tempDirWithFilename = tempDir.stringByAppendingPathComponent("test1.pdf")

pdfData.writeToFile(tempDirWithFilename, atomically: true)

let aURL : NSURL = NSURL(fileURLWithPath: tempDirWithFilename)!

let objectsToShare : NSArray = [aURL]

let activityVc = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)

self.presentViewController(activityVc, animated: true, completion: nil)

}

为什么第一页之后的数据没有被呈现?我得到正确的页数,只有第一页有任何数据。谢谢(我是新来的,非常感谢您抽出时间来看)。

最佳答案

您应该使用以下函数将 PDF 上下文的转换矩阵 (CTM) 转换为滚动 UIScrollView 实例的相同数量:

CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0, -offsetForScroll);

那么您对 ​​renderInContext 的调用应该会正常运行。

您可以通过查看以下示例来了解此方法的实际效果,该示例截取特定偏移处的可见区域的屏幕截图并将其保存到图像中:

scrollViewForContent.setContentOffset(CGPoint(x: 0, y: shiftAmount), animated: false)

UIGraphicsBeginImageContextWithOptions(scrollViewForContent.frame.size, true, 0);

CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0, -scrollViewForContent.contentOffset.y);

scrollViewForContent.layer.renderInContext(UIGraphicsGetCurrentContext())

let img = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

此外,您的 if 条件不正确。将 else if pageCount > 1 更改为 else if pageCount >= 1 以便它不会跳过页码 1。

关于ios - 从 UIScrollView 创建 PDF(第一页之后的页面是空白的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28440630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com