ios - 如何使用 AirPrint 打印锁定的 pdf 文件

标签 ios pdf passwords core-graphics

我知道使用 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/

相关文章:

MySQL命令提示符不需要密码

ios - 用于设置颜色的iOS宏

ios - 在 iOS 设备上找不到 libSwiftCore.dylib 图像错误

Python作为PDF编辑和处理框架

python - 将 PDF 数据抓取到 Excel *绝对初学者*

Java Android - iText - 使用 cellEvent writeSelectedRows

ios - 缺少 DSYM 以处理崩溃

ios - 使用 withLatestFrom 收集存储的变量属性

C# 通过 Process 的 StandardInput 传递密码

python - 如何在我自己的模板中使用内置的密码重置/更改 View