РЕДАКТИРОВАТЬ CGPDFObject of pdf

Я пытаюсь долго анализировать pdf файл с кварцевым cgpdf api, но мой вопрос правдив, что CGPDF API не может редактировать объект, сохраненный в pdf?

это означает, что API используется только для чтения файлов?

2 ответа

Да, это просто для чтения файлов. Например, словари - это просто представления чего-то, что выглядит так:

3 0 obj 
<< /Font
    << /F0
        << /Type /Font
            /BaseFont /Times-Italic
            /Subtype /Type1 >> 
    >>
>>
endobj

На которые можно ссылаться, что делает чтение намного проще, чем редактирование, если вы удалите определенный объект, то всю страницу, возможно, придется выложить по-другому. Я думаю, что было бы не так уж и сложно написать программу для CGPDF API, но это, конечно, нетривиально. Для написания новых PDF-файлов вы можете использовать обычные графические контексты.

(Извините за опоздание на вечеринку на год, но могут быть и другие).

Я хотел бы иметь возможность редактировать PDFContentStreams, но это невозможно с фреймворками в PDFKit или Core Graphics. Ни один из классов PDF не является изменяемым и не позволяет указать их инициализацию из альтернативного источника данных. Все классы PDFObject просто ссылаются на исходный PDFDocument и не позволяют заменить объект или изменить его данные.

Самое близкое, что вы можете сделать, это создать CGPDFContext и нарисовать страницу из другого документа PDF, а затем добавить к ней дополнительную графику Quartz. По линиям;

      void drawPageToNewPDF (CFURLRef newpdfname, CGRect mediabox, CFDictionaryRef auxdata, PDFPage* pp)
{
    CGContextRef cgpdf = CGPDFContextCreateWithURL(newpdfname, &mediabox, auxdata);

    CGPDFContextBeginPage(cgpdf, NULL);
    CGContextDrawPDFPage(cgpdf, [pp pageRef]);
// draw extra graphics here
    CGPDFContextEndPage(cgpdf);
    CGPDFContextClose(cgpdf);
}

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

Единственный способ сделать это правильно — использовать стороннюю библиотеку, которая поддерживает редактирование объектов PDF. Мне не удалось найти некоммерческую библиотеку PDF с открытым исходным кодом для Objective-C. Есть несколько библиотек C++, для которых не составит труда написать оболочки.

Я только собираюсь пойти по этому пути, поэтому у меня пока нет примера кода. PoDoFo выглядит наиболее перспективным для детального редактирования PDF-файлов http://podofo.sourceforge.net/ QPDF только для редактирования структуры PDF-файлов http://qpdf.sourceforge.net/

Другие вопросы по тегам