PDF отображает диалоговое окно с сообщением об ошибке после удаления водяного знака в c ++ (PDFWriter) - PullRequest
0 голосов
/ 17 апреля 2019

Я использую библиотеку PDFWriter для создания PDF-файла и добавления к нему изображения.Теперь мне нужно удалить изображение из файла PDF, как только пользователь нажмет кнопку «Удалить».Вот часть кода:

PDFWriter pdfWriter;

pdfWriter.ModifyPDF(inputFilePath, ePDFVersion13, "");

PDFParser& parser = pdfWriter.GetModifiedFileParser();

ObjectIDType imageID = pdfWriter.GetObjectsContext().GetInDirectObjectsRegistry().AllocateNewObjectID();
StoreInDatabase(imageID);

PDFModifiedPage modifiedPage(&pdfWriter, 0, true);

AbstractContentContext* pContentContext = modifiedPage.StartContentContext();

pContentContext->q();
pContentContext->cm(1, 0, 0, 1, imagePositionX, imagePositionY);

pContentContext->Do(modifiedPage.GetCurrentResourcesDictionary()->AddImageXObjectMapping(imageID));

pContentContext->Q();

modifiedPage.EndContentContext();
modifiedPage.WritePage();


// Create image xobject  
PDFFormXObject* imageXObject = pdfWriter.CreateFormXObjectFromPNGFile(imagePath, imageID);

pdfWriter.EndPDF();

Приведенный выше код работает для добавления изображения в pdf в виде водяного знака.Теперь мне нужно удалить изображение из pdf:

PDFWriter pdfWriter;

pdfWriter.ModifyPDF(strFilePath, ePDFVersion13, strFilePath);

PDFParser& parser = pdfWriter.GetModifiedFileParser();

PDFParser* pdfParser = new PDFParser(parser);

PDFModifiedPage modifiedPage(&pdfWriter, pageIndex, true);

AbstractContentContext* pContentContext = modifiedPage.StartContentContext();
ObjectIDType imageID = GetImageIdFromDatabase();
 pdfWriter.GetObjectsContext().GetInDirectObjectsRegistry().DeleteObject(imageID);

modifiedPage.EndContentContext();
modifiedPage.WritePage();


pdfWriter.EndPDF();

Однако после запуска этого кода и открытия pdf-файла отобразится следующее диалоговое окно: enter image description here

После того, как я нажму OK, pdf отобразится корректно.

Есть ли способ удалить добавленное изображение, не показывая диалоговое окно с ошибкой?

Вот что-то о XObject:https://github.com/galkahana/PDF-Writer/wiki/Using-Form-XObjects

Я пытался с

pdfWriter.GetObjectsContext().StartNewIndirectObject(imageID);

    pdfWriter.GetObjectsContext().EndIndirectObject();

Но никто из них не может решить мою проблему.

...