我正在尝试将 11 个 pdf 文件合并为一个 pdf 文件。我正在使用以下代码,但在最终的 pdf 中仅显示第一个 pdf ...我在循环中记录了 pdfurls 和 CGPDFDocumentRef,它们是不是一直为零(在循环中)。可能是什么原因导致最终文档中只显示第一页
-(void)mergeDocuments
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
NSString *oldFile=[documentsDirectory stringByAppendingPathComponent"finalPdf.pdf"];
NSMutableData *data=[[NSMutableData alloc] init];
CGRect paperSize=CGRectMake(0,0,kDefaultPageWidth,kDefaultPageHeight);
UIGraphicsBeginPDFContextToData(data, paperSize, nil);
for (int pageNumber = 1; pageNumber <= 11; pageNumber++)
{
NSString *pdfPath = [[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat"page_%d.pdf",pageNumber]] retain];
NSURL *pdfUrl = [[NSURL fileURLWithPath:pdfPath] retain];
UIGraphicsBeginPDFPageWithInfo(paperSize, nil);
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(currentContext, 0, paperSize.size.height);
CGContextScaleCTM(currentContext, 1.0, -1.0);
CGPDFDocumentRef newDocument = CGPDFDocumentCreateWithURL ((CFURLRef) pdfUrl);
CGPDFPageRef newPage = CGPDFDocumentGetPage (newDocument, pageNumber);
CGContextDrawPDFPage (currentContext, newPage);
newPage = nil;
CGPDFDocumentRelease(newDocument);
newDocument = nil;
[pdfUrl release];
}
NSURL *finalUrl=[NSURL URLWithStringldFile];
UIGraphicsEndPDFContext();
[data writeToURL:finalUrl atomically:YES];
}
Best Answer-推荐答案 strong>
看起来您的代码假定每个文档中只有一页,但是它在打开每个文件时要求页面 pageNumber ,因此要求 page_1 中的第 1 页.pdf、page_2.pdf 中的第 2 页、page_3.pdf 中的第 3 页等...
如果您只想从每个文档的第一页更改此:
CGPDFPageRef newPage = CGPDFDocumentGetPage (newDocument, pageNumber);
对此:
CGPDFPageRef newPage = CGPDFDocumentGetPage (newDocument, 1);
为了它的值(value),在我发现这个之前,我根据我已经拥有的一个例程重新编写了你的例程(请原谅我,但它是在一个 ARC 项目中,所以你必须重新进行内存管理)如下:
(注意:已删除错误检查以使代码更具可读性!)
-(void)mergeDocuments {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *oldFilePath=[documentsDirectory stringByAppendingPathComponent"finalPdf.pdf"];
NSURL *oldFileUrl = [NSURL fileURLWithPathldFilePath];
CGContextRef context = CGPDFContextCreateWithURL((__bridge_retained CFURLRef)oldFileUrl, NULL, NULL);
for (int docNumber = 1; docNumber <= 11; docNumber++)
{
// Get the first page from each source document
NSString *pdfPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat"page_%d.pdf",docNumber]];
NSURL *pdfUrl = [NSURL fileURLWithPath:pdfPath];
CGPDFDocumentRef pdfDoc = CGPDFDocumentCreateWithURL((__bridge_retained CFURLRef)pdfUrl);
CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdfDoc, 1);
CGRect pdfCropBoxRect = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox);
// Copy the page to the new document
CGContextBeginPage(context, &pdfCropBoxRect);
CGContextDrawPDFPage(context, pdfPage);
// Close the source files
CGContextEndPage(context);
CGPDFDocumentRelease(pdfDoc);
}
// Cleanup
CGContextRelease(context);
}
关于iphone - 将多个 pdf 文档合并为单个文档不起作用,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/9668047/
|