gpt4 book ai didi

ios - 如何使用 iOS 以编程方式生成 PDF 的缩略图?

转载 作者:技术小花猫 更新时间:2023-10-29 10:43:26 24 4
gpt4 key购买 nike

我们目前正在使用 UIWebViews 显示 PDF 内容。理想情况下,我希望能够在 UITableView 中显示缩略图,而无需同时加载许多不同的 UIWebViews ...它们加载一个文档的速度已经够慢了 - 别介意 10+!

我该怎么做?

我考虑过使用 UIDocumentInteractionControllerUIWebView 来截屏加载文档,但这意味着在显示表格之前它们都必须缩略图。

最佳答案

Apple 在 CoreGraphics 级别提供了一大堆直接绘制 PDF 内容的方法。据我所知,它们都没有在 UIKit 级别整齐地打包,因此此时它可能不适合您的项目,特别是如果您不太习惯降到C级。但是,相关函数是 CGContextDrawPDFPage; 按照正常的 CoreGraphics 方式,还有其他方法可以从数据源创建 PDF 引用,然后从中获取页面引用一个PDF。然后你需要处理缩放和转换到你想要的 View ,并被警告你需要执行水平翻转,因为 PDF(和 OS X)使用左下角作为原点,而 iOS 使用左上角.示例代码,超出我的想象:

UIGraphicsBeginImageContext(thumbnailSize);
CGPDFDocumentRef pdfRef = CGPDFDocumentCreateWithProvider( (CGDataProviderRef)instanceOfNSDataWithPDFInside );
CGPDFPageRef pageRef = CGPDFDocumentGetPage(pdfRef, 1); // get the first page

CGContextRef contextRef = UIGraphicsGetCurrentContext();

// ignore issues of transforming here; depends on exactly what you want and
// involves a whole bunch of normal CoreGraphics stuff that is nothing to do
// with PDFs
CGContextDrawPDFPage(contextRef, pageRef);

UIImage *imageToReturn = UIGraphicsGetImageFromCurrentImageContext();

// clean up
UIGraphicsEndImageContext();
CGPDFDocumentRelease(pdfRef);

return imageToReturn;

猜测一下,您可能想要使用 CGPDFPageGetBoxRect(pageRef, kCGPDFCropBox) 获取页面的裁剪框,然后找出如何缩放/移动它以适合您的图像大小。

CALayer 上的 -renderInContext: 方法可能更容易实现您的目的(参见 QA 1703 )——获取屏幕截图的旧方法是 UIGetScreenImage,但这从来都不是真正的官方 API,似乎只是因为 RedLaser 的意外批准才被暂时允许。使用 QA 中的代码,您可以自行设置以从任何其他 View 获取 UIImage,而无需该 View 必须在屏幕上。哪个可能解决您的一些屏幕捕获问题?尽管这意味着您只能支持 OS 4.x。

无论哪种情况,PDF 的绘制速度都不会那么快。您可能需要填充表格,然后在后台线程上绘制缩略图,并在可用时将它们向上推。您实际上不能在后台线程上安全地使用 UIKit 对象,但所有 CoreGraphics 东西都是安全的。

关于ios - 如何使用 iOS 以编程方式生成 PDF 的缩略图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4107850/

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