2015-02-16 4 views
4

Я работаю над pdf в своем новом приложении для iPhone. Я проверяю PDF является замок (защищен паролем) или неСохранить разблокировать PDFDocumentsRef в локальный каталог

BOOL bIsUnlock = CGPDFDocumentIsUnlocked(PDFDocument); 

Если PDF является замок, то

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

Здесь мне удалось разблокировать документы. Теперь я хочу сохранить документ разблокировки в каталог приложения.

Я искал и нашел способ

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 и сохранить в папку. Пожалуйста, помогите.

+0

У вас есть NSData для инициализации i PDFDocument? Храните эти данные в случае успеха. – iOSfleer

+0

К сожалению, я не могу найти другого способа сделать это, но спасибо за фрагмент кода. Это сработало отлично для меня. – atulkhatri

ответ

1

Ваш код, к сожалению, является самым простым решением для сохранения расшифрованных PDF-файлов в каталог приложений. Проблема в том, что этот код будет работать только с простыми PDF-файлами, потому что аннотации, ссылки, поля формы, закладки, вложения файлов и т. Д. Не переносятся в новый документ. Это ограничение API CGPDF, и вы ничего не можете сделать.

2

Как уже упоминалось в iPDFdev, вы не окажетесь очень далеко от механизма рендеринга ядра CoreGraphics от Apple - вам, скорее всего, придется повторно реализовать это все самостоятельно. Поскольку у вас, вероятно, не хватает нескольких лет, есть несколько продуктов, которые могут помочь вам изменить документ.

На передней панели с открытым исходным кодом есть PoDoFo или muPDF (GPL/commercial), которые могут решить вашу проблему. Я работаю над коммерческим SDK PSPDFKit, который позволяет вам переписать документ с помощью PSPDFProcessor - мы предлагаем аналогичный API для Android.