如何结合两个pdf而不丢失任何信息?

时间:2018-02-16 05:21:45

标签: objective-c pdf nsdata nsmutabledata

我的目标是合并两个PDF。一个有10页,另一个有6页,所以输出应该是16页。我的方法是将两个PDF加载到存储在NSData中的两个NSMutableArray中。

这是我的保存方法:

NSMutableData *toSave = [NSMutableData data];
for(NSData *pdf in PDFArray){
    [toSave appendData:pdf];
}
[toSave writeToFile:path atomically:YES];

但输出PDF仅包含第二部分,仅包含6页。所以我不知道我错过了什么。谁能给我一些提示?

2 个答案:

答案 0 :(得分:3)

PDF是一种描述单个文档的文件格式。您无法连接到PDF文件以获取连接文档。

但可以通过PDFKit实现此目的:

  1. 使用initWithData:创建两个文档。
  2. 使用insertPage:atIndex:将第二个文档的所有页面插入第一个文档。
  3. 这应该是:

    PDFDocument *theDocument = [[PDFDocument alloc] initWithData:PDFArray[0]]
    PDFDocument *theSecondDocument = [[PDFDocument alloc] initWithData:PDFArray[1]]
    NSInteger theCount = theDocument.pageCount;
    NSInteger theSecondCount = theSecondDocument.pageCount;
    
    for(NSInteger i = 0; i < theSecondCount; ++i) {
        PDFPage *thePage = [theSecondDocument pageAtIndex:i];
    
        [theDocument insertPage:thePage atIndex:theCount + i];
    }
    [theDocument writeToURL:theTargetURL];
    

    您必须在源文件中添加#import <PDFKit/PDFKit.h>@import PDFKit;,并且应将PDFKit.framework添加到构建目标的 Linked Frameworks and Libraries 在Xcode中。

答案 1 :(得分:0)

我已经制作了一个Swift命令行工具来组合任意数量的PDF文件。它以输出路径作为第一个参数,输入PDF文件作为其他参数。没有任何错误处理,因此您可以根据需要添加。这是完整的代码:

import PDFKit

let args = CommandLine.arguments.map { URL(fileURLWithPath: $0) }
let doc = PDFDocument(url: args[2])!

for i in 3..<args.count {
    let docAdd = PDFDocument(url: args[i])!
    for i in 0..<docAdd.pageCount {
        let page = docAdd.page(at: i)!
        doc.insert(page, at: doc.pageCount)
    }
}
doc.write(to: args[1])