Построение PdfXObject с использованием PoDoFo

Я использую библиотеку C++ PoDoFo ( http://podofo.sourceforge.net/) и пытаюсь добиться встраивания страницы PDF в новый пустой документ PDF.

Документация для конструктора, который я использую, находится здесь: http://podofo.sourceforge.net/doc/html/classPoDoFo_1_1PdfXObject.html

Вот как выглядит мой код:

PoDoFo::PdfMemDocument existingDocument(filename);

PoDoFo::PdfStreamedDocument *newDocument = new PoDoFo::PdfStreamedDocument("new_document.pdf");
PoDoFo::PdfPage *newPage = newDocument->CreatePage(PoDoFo::PdfRect(0.0,0.0,300.0,300.0));
PoDoFo::PdfXObject *XObjectFromPage;

XObjectFromPage = new PoDoFo::PdfXObject(existingDocument, 1, newDocument);

PoDoFo::PdfPainter *painter = new PoDoFo::PdfPainter();
painter->SetPage(newPage);
painter->DrawXObject (50, 50, XObjectFromPage,1);
painter->FinishPage();
newDocument->Close();

При создании PdfXObject из существующего документа PDF выбрасывается PdfError, возможно, я допустил ошибку, потому что я новичок в C++ или потенциально есть ошибка в PoDoFo.

Возникшая ошибка имеет следующее сообщение:

PoDoFo encounter an error. Error: 48 ePdfError_ChangeOnImmutable
    Error Description: Changing values on immutable objects is not allowed.
    Callstack:

Как правильно построить объект PdfXObject из существующей страницы PDF и встроить его в новый документ PDF?

1 ответ

Решение

Чтобы загрузить существующую страницу в XObject, используйте что-то вроде этого (srcDoc и g_outputdoc - это PdfMemDocuments):

    PdfPage* srcPage(srcDoc->GetPage(pageNumber));

    //create XObject owned by outputDoc with size of srcPage
    PdfXObject* xobject = new PdfXObject(srcPage->GetCropBox(), g_outputDoc)));

    //fill the xObject with the content of the page + all references and ressources used on this page
    g_outputDoc->FillXObjectFromDocumentPage(xobject , *srcDoc, pageNumber, false);

Ваша встраиваемая часть верна. Просто нарисуйте объект, используя pdfPainter:-)

Хорошая часть этого метода заключается в том, что все ссылки и ресурсы также копируются. Плохая часть этого заключается в том, что все ссылки и все ресурсы копируются каждый раз;) даже если вы встраиваете те же ресурсы на другие страницы...

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