Как показать и редактировать существующие файлы PDF в приложении ios - PullRequest
7 голосов
/ 04 октября 2011

Я не хочу создавать новый PDF-файл, который я уже сделал, но хочу показать и отредактировать существующий PDF-файл в iOS с помощью кода ..

Возможно ли это или нет, и если возможно, то чем, как можноЯ делаю это ...

Обновление

Предположим, будет текстовый документ pdf, и мы хотим ввести какой-то другой текст в этот файл и сохранить его ... так каксделать это путем программирования?

Пожалуйста, помогите мне решить эту проблему ...

Заранее спасибо ...

Ответы [ 3 ]

1 голос
/ 12 марта 2013

Я знаю, что уже слишком поздно для этого вопроса, однако я бы хотел добавить свое решение.

Я использую UIGraphicsBeginPDFContextToFile для создания файла PDF. Я создал класс с именем PDFCreator из базового класса UIViewController, в котором у меня есть две функции, подобные этой:

- (void) beginContextWithFile:(NSString *)filename
{
    pageSize = CGSizeMake(1024, 1424);

    UIGraphicsBeginPDFContextToFile(filename, CGRectZero, nil);

    UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pageSize.height), nil);

    [self createInitialPart];
}

- (void) endContext
{
    UIGraphicsEndPDFContext();
}

Я создал объект этого класса в файле делегата приложения, так как он будет сохранять объект до тех пор, пока приложение не завершится (как было моим требованием).

Вначале я звоню beginContextWithFile:, и он создаст файл pdf в каталоге документов вместе с данными, которые я добавляю посредством вызова метода createInitialPart.

В какой-то момент позже мне нужно обновить этот файл, поэтому у меня есть другой метод с именем secondPart, хотя я вызвал его для добавления дополнительных данных в этот файл.

Как только я заполню все, что я закончил с созданием, мне нужно вызвать endContext класса PDFCreator, который завершит генерацию PDF, и да, у меня будет обновленный файл.

Это немного сложно, и я не выполнял никаких проверок памяти, хотя у меня было требование, я нашел решение:)

1 голос
/ 19 апреля 2017

Мне удалось это сделать, создав копию исходного PDF-файла и изменив его в процессе сборки.

PS: в моем решении мне нужно было редактировать информацию о документе нового PDF, поэтому я использовал параметр субъекта для этого.

В Свифт 3

func createPDF(on path: String?, from templateURL: URL?, with subject: String?) {
    guard let newPDFPath = path,
        let pdfURL = templateURL else { return }

    let options = [(kCGPDFContextSubject as String): subject ?? ""] as CFDictionary

    UIGraphicsBeginPDFContextToFile(newPDFPath, .zero, options as? [AnyHashable : Any])

    let templateDocument = CGPDFDocument(pdfURL as CFURL)
    let pageCount = templateDocument?.numberOfPages ?? 0

    for i in 1...pageCount {

        //get bounds of template page
        if let templatePage = templateDocument?.page(at: i) {
            let templatePageBounds = templatePage.getBoxRect(.cropBox)

            //create empty page with corresponding bounds in new document
            UIGraphicsBeginPDFPageWithInfo(templatePageBounds, nil)
            let context = UIGraphicsGetCurrentContext()

            //flip context due to different origins
            context?.translateBy(x: 0.0, y: templatePageBounds.height)
            context?.scaleBy(x: 1.0, y: -1.0)

            //copy content of template page on the corresponding page in new file
            context?.drawPDFPage(templatePage)

            //flip context back
            context?.translateBy(x: 0.0, y: templatePageBounds.height)
            context?.scaleBy(x: 1.0, y: -1.0)


            // -->>>>  Do your change here  <<<<--
            /* Here you can do any drawings */

        }
    }
    UIGraphicsEndPDFContext()
}
0 голосов
/ 04 октября 2011

Вы можете использовать Quartz2D для управления PDF-файлами, их открытия, преобразования и т. Д.

Ознакомьтесь с официальной документацией

Обновление:

Создайте свой pdf-контекст, как описано в документации, тогда вам просто нужно написать текст:

http://developer.apple.com/library/ios/#documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_text/dq_text.html#//apple_ref/doc/uid/TP30001066-CH213-TPXREF101

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