Как я могу читать, изменять и писать PDF (CGPDFDocument) на iOS? - PullRequest
3 голосов
/ 21 января 2012

Я пытаюсь изменить метаданные PDF (название, автор и т. Д.) Существующего PDF на iOS. Несмотря на то, что легко найти пример кода для разбора PDF и создания PDF с нуля, не представляется простым способом вывести существующий PDF в новый файл и слегка его изменить.

Более конкретно, как мне получить информацию, полученную при чтении PDF, примерно так:

CGPDFDocumentRef myPDF = CGPDFDocumentCreateWithURL((CFURLRef)urlOfInputPDF);
CGPDFDictionaryRef myPDFDict=CGPDFDocumentGetInfo(myPDF);

в новый PDF, который я бы создал примерно так:

CGRect pageRect;
CFMutableDictionaryRef myDictionary = CFDictionaryCreateMutable(NULL, 0,
                                         &kCFTypeDictionaryKeyCallBacks,
                                         &kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(myDictionary, kCGPDFContextTitle, CFSTR("My PDF File"));
CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("My Name"));
pdfContext = CGPDFContextCreateWithURL (urlOfOutputPDF, &pageRect, myDictionary);

Очевидно, что типы словарей не совпадают, и созданный таким образом вывод связан со страницей (не документом).

Любые идеи, как я могу скопировать весь CGPDFDocumentRef в новый файл? И как сделать его изменчивым, чтобы я мог изменить метаданные перед сохранением?

Ответы [ 2 ]

1 голос
/ 04 февраля 2018

Не использовать CGPDFDocument (Core Graphics); используйте взамен PDFDocument (PDFKit). Это обеспечивает гораздо более простые методы для такого рода вещей.

Метод writeToFile:withOptions позволяет сохранить PDF-файл в новый файл, указав данные DOCINFO в словаре.

0 голосов
/ 12 января 2013

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

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

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