我知道使用 CGPDFDocumentUnlockWithPassword
解锁 pdf,但它返回了一个 CGPDFDocumentRef
,如果我想使用 AirPrint 打印它,它应该是一个 NSData
或 url,但我不知道如何将 CGPDFDocumentRef
转换为 NSData
对象或将其保存为文件。有人有解决此案的想法吗?
最佳答案
只需将源 pdf 的每一页打印到新创建的 CGPDFContext
并将生成的 pdf 保存到单独的文件即可。原则上,它应该是这样的:
// create PDFContext
NSURL* dstPath = [NSURL fileURLWithPath:pathInCachesFolder]
CGRect pageRect = CGRectMake(0,0,1024,1024); // example, use real page size of src document here
CGContextRef pdfContext = CGPDFContextCreateWithURL(dstPath, &pageRect, nil);
// use for loop here to repeat following stuff for each pdf page from the src pdf
CGPDFContextBeginPage(pdfContext, NULL);
CGContextDrawPDFPage(pdfContext, sourcePDFpageRef);
CGPDFContextEndPage(pdfContext);
// close pdfContext, saves dst file
CGPDFContextClose(pdfContext);
CGContextRelease (pdfContext);
这段代码只是从源pdf打印一页到新建的pdf,并将pdf保存到dst路径。当然,您需要为源文档中的每一页重复绘图部分。之后,您应该可以通过 AirPrint 毫无问题地打印 pdf。
关于ios - 如何使用 AirPrint 打印锁定的 pdf 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11895385/