4

我正在我的新 iPhone 应用程序中处理 pdf。我正在检查 PDF 是否被锁定(受密码保护)

BOOL bIsUnlock = CGPDFDocumentIsUnlocked(PDFDocument);

如果pdf被锁定,那么

BOOL success = CGPDFDocumentUnlockWithPassword ( PDFDocument, [password UTF8String]);

在这里,我成功解锁了文档。现在我想将解锁文档保存到 app 目录。

我已经搜索并找到了一种方法

CGPDFPageRef _PDFPage =CGPDFDocumentGetPage(PDFDocument, 1);

CGRect pageRect = CGPDFPageGetBoxRect(_PDFPage, kCGPDFMediaBox);

//create empty pdf file;
UIGraphicsBeginPDFContextToFile(newFilePath, pageRect, nil);
size_t count = CGPDFDocumentGetNumberOfPages(PDFDocument);

for (size_t pageNumber = 1; pageNumber <= count; pageNumber++)

{

    //get bounds of template page

    CGPDFPageRef templatePage = CGPDFDocumentGetPage(PDFDocument, pageNumber);

    CGRect templatePageBounds = CGPDFPageGetBoxRect(templatePage, kCGPDFCropBox);

    //create empty page with corresponding bounds in new document
    UIGraphicsBeginPDFPageWithInfo(templatePageBounds, nil);

    CGContextRef context = UIGraphicsGetCurrentContext();

    //flip context due to different origins
    CGContextTranslateCTM(context, 0.0, templatePageBounds.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);

    //copy content of template page on the corresponding page in new file
    CGContextDrawPDFPage(context, templatePage);

    //flip context back
    CGContextTranslateCTM(context, 0.0, templatePageBounds.size.height);
    CGContextScaleCTM(context, 1.0, -1.0); 
 }
CGPDFDocumentRelease(PDFDocument);

UIGraphicsEndPDFContext(); 

但我想要任何其他简单的方法,比如将 PDFDocument 转换为NSdata并保存到目录。请帮忙。

4

2 回答 2

1

不幸的是,您的代码是将解密的 PDF 文件保存到您的应用程序目录的最简单的解决方案。问题是此代码仅适用于简单的 PDF 文件,因为注释、链接、表单域、书签、文件附件等不会传输到新文档。这是 CGPDF API 的限制,您无能为力。

于 2015-02-16T12:37:14.057 回答
1

正如 iPDFdev 已经提到的,您不会在这里使用 Apple 的 CoreGraphics 渲染引擎 - 您可能需要自己重新实现这一切。由于您可能没有几年时间这样做,因此有一些产品可以帮助您修改文档。

在开源方面,有PoDoFo或 muPDF(GPL/商业)可能能够解决您的问题。我在商业 PSPDFKit SDK 上工作,它允许你重写一个文档PSPDFProcessor——我们也为 Android 提供了一个类似的 API。

于 2016-04-16T19:51:18.730 回答