将pdf页面添加到现有的pdf objective-c

时间:2012-11-19 05:58:25

标签: objective-c ios

我正在为iphone / ipad编写一个应用程序,将相机图像(.png)转换为pdf并保存到/ user / documents文件夹。现在我想弄清楚如何将另一个pdf附加到现有文档,以便它们将成为多页。基本上,如果您将doc1.pdf和doc2.pdf保存在文档文件夹中,您将如何合并2个pdf,使它们成为1个包含2个页面的文档?

感谢你们给我的任何帮助或建议。

谢谢,

1 个答案:

答案 0 :(得分:4)

以下是将一个pdf附加到另一个上的示例代码:

// Documents dir
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

// File paths
NSString *pdfPath1 = [documentsDirectory stringByAppendingPathComponent:@"pdf1.pdf"];
NSString *pdfPath2 = [documentsDirectory stringByAppendingPathComponent:@"pdf2.pdf"];
NSString *pdfPathOutput = [documentsDirectory stringByAppendingPathComponent:@"pdfout.pdf"];

// File URLs
CFURLRef pdfURL1 = (CFURLRef)[[NSURL alloc] initFileURLWithPath:pdfPath1];
CFURLRef pdfURL2 = (CFURLRef)[[NSURL alloc] initFileURLWithPath:pdfPath2];
CFURLRef pdfURLOutput = (CFURLRef)[[NSURL alloc] initFileURLWithPath:pdfPathOutput];

// File references
CGPDFDocumentRef pdfRef1 = CGPDFDocumentCreateWithURL((CFURLRef) pdfURL1);
CGPDFDocumentRef pdfRef2 = CGPDFDocumentCreateWithURL((CFURLRef) pdfURL2);

// Number of pages
NSInteger numberOfPages1 = CGPDFDocumentGetNumberOfPages(pdfRef1);
NSInteger numberOfPages2 = CGPDFDocumentGetNumberOfPages(pdfRef2);

// Create the output context
CGContextRef writeContext = CGPDFContextCreateWithURL(pdfURLOutput, NULL, NULL);

// Loop variables
CGPDFPageRef page;
CGRect mediaBox;

// Read the first PDF and generate the output pages
NSLog(@"Pages from pdf 1 (%i)", numberOfPages1);
for (int i=1; i<=numberOfPages1; i++) {
  page = CGPDFDocumentGetPage(pdfRef1, i);
  mediaBox = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
  CGContextBeginPage(writeContext, &mediaBox);
  CGContextDrawPDFPage(writeContext, page);
  CGContextEndPage(writeContext);
}

// Read the second PDF and generate the output pages
NSLog(@"Pages from pdf 2 (%i)", numberOfPages2);
for (int i=1; i<=numberOfPages2; i++) {
  page = CGPDFDocumentGetPage(pdfRef2, i);
  mediaBox = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
  CGContextBeginPage(writeContext, &mediaBox);
  CGContextDrawPDFPage(writeContext, page);
  CGContextEndPage(writeContext); 
}
NSLog(@"Done");

// Finalize the output file
CGPDFContextClose(writeContext);

// Release from memory
CFRelease(pdfURL1);
CFRelease(pdfURL2);
CFRelease(pdfURLOutput);
CGPDFDocumentRelease(pdfRef1);
CGPDFDocumentRelease(pdfRef2);
CGContextRelease(writeContext);

Source