2010-08-31 2 views
0

Я хочу создать новый PDF-файл из существующего pdf-документа. У меня есть один файл в формате pdf, например «old.pdf», и от этого пользователя можно выбрать некоторые страницы и из выбранных страниц Я хочу создать новый pdf-файл, скажем, «temp1.pdf». Можно ли создать «temp1.pdf»? Plz помогите мне, а также предоставит пример кода для этого. Спасибо.iphone create pdf document from pdf pages

+0

В чем конкретно ваш вопрос? Как сэкономить на диске? Как создать PDF-файл? –

+0

У меня уже есть файл pdf, а затем с выбранных страниц этого файла pdf. Я хочу создать новый pdf-файл. – jaynaiphone

+0

Я выполнил ваш код, его работа отлично. Я проверил его с различными типами PDF-файлов, я не видел никаких проблем. – CKT

ответ

0

это мой демо-код, вы можете попробовать. Но этот код имеет некоторые проблемы. Новый сгенерированный PDF-файл содержит искаженный текст, у меня все еще нет возможности решить эту проблему (может ли кто-нибудь помочь?).

//old pdf 
NSArray* old_PDF_paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString* old_PDF_documentsDirectory = [old_PDF_paths objectAtIndex:0]; 
NSString* old_PDF_ABSOLUTE_PATH = [old_PDF_documentsDirectory stringByAppendingPathComponent:@"old.pdf"]; 

//new generate pdf 
NSArray* output_PDF_paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString* output_PDF_documentsDirectory = [output_PDF_paths objectAtIndex:0]; 
NSString* output_PDF_ABSOLUTE_PATH = [output_PDF_documentsDirectory stringByAppendingPathComponent:@"temp1.pdf"]; 
NSString* outpath = output_PDF_ABSOLUTE_PATH; 

NSURL *url = [[NSURL alloc] initFileURLWithPath:old_PDF_ABSOLUTE_PATH]; 
CGPDFDocumentRef originalPDF = CGPDFDocumentCreateWithURL((CFURLRef)url); 

// query for the number of pages 
int ct = CGPDFDocumentGetNumberOfPages(originalPDF); 

CGFloat width = 0.0f; 
CGFloat height = 0.0f; 

CGRect outRect = CGRectMake(0, 0, width, height); 
CFURLRef outurl = CFURLCreateWithFileSystemPath (NULL, (CFStringRef)outpath, kCFURLPOSIXPathStyle, 0); 
CFMutableDictionaryRef myDictionary = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); 

// create a context for drawing 
CGContextRef context = CGPDFContextCreateWithURL ((CFURLRef)outurl, &outRect, myDictionary); // 5 
CFRelease(myDictionary); 

for(int i = 1; i <= ct; ++i) { 
    //page render 
    CGPDFPageRef pdfPage = CGPDFDocumentGetPage(originalPDF, i); 
    CGRect pageMediaBox = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox); 
    CGContextBeginPage (context, &pageMediaBox); 
    CGContextDrawPDFPage(context, pdfPage); 
    CGContextEndPage (context); 
} 

CGContextClosePath(context); 
CGContextRelease(context); 
+0

ok Спасибо за помощь. Я попробую это и дам вам знать. – jaynaiphone

+0

Я реализовал этот код, и он извлекает null для originalPDF, и поэтому я не могу продолжить. Можете ли вы сказать мне, что будет средством? – Sarah