Можно ли программно объединить несколько файлов PDF в один файл PDF в iPhone? - PullRequest
8 голосов
/ 10 марта 2012

Можно ли программно объединить несколько файлов PDF в один файл PDF в iphone. Я создал отдельные страницы из разных частей моей программы, и теперь мне нужно объединить их в один файл

Ответы [ 3 ]

5 голосов
/ 10 марта 2012

Вот процедура, которую я написал, чтобы взять URL для PDF и добавить его в уже созданный вами контекст (чтобы вы могли вызывать его для нескольких файлов и добавлять их все):

- (void)appendPdfAtURL:(NSURL *)pdfURL toContext:(CGContextRef)pdfDestinationContext {
    CGPDFDocumentRef  pdfDoc = CGPDFDocumentCreateWithURL((__bridge_retained CFURLRef)pdfURL);
    if (pdfDoc) {
        size_t numPages = CGPDFDocumentGetNumberOfPages(pdfDoc);
        if (numPages > 0) {
            // Loop through each page in the source file
            for (size_t i = 1; i <= numPages; i++) {
                CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdfDoc, i);
                if (pdfPage) {
                    // Get the page size
                    CGRect pdfCropBoxRect = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox);

                    // Copy the page from the source file to the context
                    CGContextBeginPage(pdfDestinationContext, &pdfCropBoxRect);
                    CGContextDrawPDFPage(pdfDestinationContext, pdfPage);
                }
            }
        }

        // Close the source file
        CGPDFDocumentRelease(pdfDoc);
    }
}
5 голосов
/ 10 марта 2012

Да, вы можете сделать это.Пожалуйста, следуйте приведенному ниже коду

//Open a pdf context for the single file
UIGraphicsBeginPDFContextToFile(oldFile, paperSize, nil);

//Run a loop to the number of pages you want
for (pageNumber = 1; pageNumber <= count; pageNumber++)
{
//Open a pdf page context
UIGraphicsBeginPDFPageWithInfo(paperSize, nil);

//Get graphics context to draw the page
CGContextRef currentContext = UIGraphicsGetCurrentContext();

//Flip and scale context to draw the pdf correctly
CGContextTranslateCTM(currentContext, 0, paperSize.size.height);
CGContextScaleCTM(currentContext, 1.0, -1.0); 

//Get document access of the pdf from which you want a page
CGPDFDocumentRef newDocument = CGPDFDocumentCreateWithURL ((CFURLRef) newUrl);

//Get the page you want
CGPDFPageRef newPage = CGPDFDocumentGetPage (newDocument, pageNumber);

//Drawing the page
CGContextDrawPDFPage (currentContext, newPage);

//Clean up
newPage = nil;       
CGPDFDocumentRelease(newDocument);
newDocument = nil;
newUrl = nil;

}

UIGraphicsEndPDFContext();

Так что вы должны написать необходимое условие для извлечения соответствующих страниц из соответствующего PDF, прежде чем рисовать страницу.Вы создали PDF из нескольких источников!

1 голос
/ 10 марта 2012

Попробуйте Quartz 2D API. Он имеет очень хорошую поддержку для чтения записи файлов PDF.

  1. При просмотре API вы сможете читать все входные PDF документ
  2. получить PDF страницу для них
  3. создать PDF-контекст для вашего нового документа
  4. рисовать PDF-страницы в контексте PDF

Обратите внимание, что код рисования страницы PDF должен находиться между вызовами начальной и конечной страниц

CGPDFDocumentCreateWithURL
CGContextBeginPage
CGPDFDocumentGetPage
CGPDFContextCreateWithURL
CGContextDrawPDFPage
CGContextEndPage

Проверьте Apple Docs для

[CGContext][1]
[CGPDFDocument][2]
[CGPDFPage][3]

Проверьте, помогает ли это, или дайте мне знать, если вам нужен пример псевдокода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...