Skip to content

Commit

Permalink
Issue #27: Signature plugin - inserting bitmap images does not work
Browse files Browse the repository at this point in the history
  • Loading branch information
JakubMelka committed Oct 22, 2022
1 parent 87a1524 commit cb1c31b
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 2 deletions.
37 changes: 35 additions & 2 deletions Pdf4QtLib/sources/pdfdocumentbuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -821,9 +821,10 @@ void PDFPageContentStreamBuilder::end(QPainter* painter)
}
}

PDFObject oldResourcesObject = pageDictionary->get("Resources");
PDFObject oldResourcesObject = m_documentBuilder->getObject(pageDictionary->get("Resources"));
oldResourcesObject = removeDictionaryReferencesFromResources(oldResourcesObject);
replaceResources(contentsReference, resourcesReference, oldResourcesObject);
m_documentBuilder->mergeTo(resourcesReference, m_documentBuilder->getObject(oldResourcesObject));
m_documentBuilder->mergeTo(resourcesReference, oldResourcesObject);
}

switch (m_mode)
Expand Down Expand Up @@ -859,6 +860,38 @@ void PDFPageContentStreamBuilder::end(QPainter* painter)
}
}

PDFObject PDFPageContentStreamBuilder::removeDictionaryReferencesFromResources(PDFObject resources)
{
PDFObjectFactory resourcesBuilder;

resources = m_documentBuilder->getObject(resources);
if (resources.isDictionary())
{
resourcesBuilder.beginDictionary();

const PDFDictionary* resourcesDictionary = resources.getDictionary();
const size_t count = resourcesDictionary->getCount();
for (size_t i = 0; i < count; ++i)
{
PDFObject object = m_documentBuilder->getObject(resourcesDictionary->getValue(i));

if (object.isNull())
{
continue;
}

resourcesBuilder.beginDictionaryItem(resourcesDictionary->getKey(i).getString());
resourcesBuilder << object;
resourcesBuilder.endDictionaryItem();
}

resourcesBuilder.endDictionary();
resources = resourcesBuilder.takeObject();
}

return resources;
}

void PDFPageContentStreamBuilder::replaceResources(PDFObjectReference contentStreamReference,
PDFObjectReference resourcesReference,
PDFObject oldResources)
Expand Down
2 changes: 2 additions & 0 deletions Pdf4QtLib/sources/pdfdocumentbuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,8 @@ class PDF4QTLIBSHARED_EXPORT PDFPageContentStreamBuilder
void end(QPainter* painter);

private:
PDFObject removeDictionaryReferencesFromResources(PDFObject resources);

void replaceResources(PDFObjectReference contentStreamReference,
PDFObjectReference resourcesReference,
PDFObject oldResources);
Expand Down

0 comments on commit cb1c31b

Please sign in to comment.