我知道使用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,而不会出现任何问题。