[poppler] poppler/Annot.cc poppler/Annot.h
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Jan 10 23:09:10 UTC 2022
poppler/Annot.cc | 50 +++++++++++++++++++++++++-------------------------
poppler/Annot.h | 3 +--
2 files changed, 26 insertions(+), 27 deletions(-)
New commits:
commit 95fe93b32e740c48c9c8eac3ec59a72dcf3f6f41
Author: Martin <martinbts at gmx.net>
Date: Mon Jan 10 23:09:08 2022 +0000
AnnotAppearanceBuilder: Also use the image when there is left signature text
diff --git a/poppler/Annot.cc b/poppler/Annot.cc
index c62cdd49..506a5fe8 100644
--- a/poppler/Annot.cc
+++ b/poppler/Annot.cc
@@ -4925,6 +4925,16 @@ bool AnnotAppearanceBuilder::drawFormFieldText(const FormFieldText *fieldText, c
return true;
}
+static void setChildDictEntryValue(Dict *parentDict, const char *childDictName, const char *childDictEntryName, const Ref childDictEntryValue, XRef *xref)
+{
+ Object childDictionaryObj = parentDict->lookup(childDictName);
+ if (!childDictionaryObj.isDict()) {
+ childDictionaryObj = Object(new Dict(xref));
+ parentDict->set(childDictName, childDictionaryObj.copy());
+ }
+ childDictionaryObj.dictSet(childDictEntryName, Object(childDictEntryValue));
+}
+
bool AnnotAppearanceBuilder::drawSignatureFieldText(const FormFieldSignature *field, const Form *form, const GfxResources *resources, const GooString *_da, const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs,
const PDFRectangle *rect, XRef *xref, Dict *resourcesDict)
{
@@ -4932,9 +4942,22 @@ bool AnnotAppearanceBuilder::drawSignatureFieldText(const FormFieldSignature *fi
if (contents.toStr().empty())
return false;
+ if (field->getImageResource() != Ref::INVALID()) {
+ const double width = rect->x2 - rect->x1;
+ const double height = rect->y2 - rect->y1;
+ static const char *imageResourceId = "SigImg";
+ setChildDictEntryValue(resourcesDict, "XObject", imageResourceId, field->getImageResource(), xref);
+ Matrix matrix = { 1.0, 0.0, 0.0, 1.0, 0.0, 0.0 };
+ matrix.scale(width, height);
+ static const char *IMG_TMPL = "\nq {0:.1g} {1:.1g} {2:.1g} {3:.1g} {4:.1g} {5:.1g} cm /{6:s} Do Q\n";
+ const GooString *imgBuffer = GooString::format(IMG_TMPL, matrix.m[0], matrix.m[1], matrix.m[2], matrix.m[3], matrix.m[4], matrix.m[5], imageResourceId);
+ append(imgBuffer->c_str());
+ delete imgBuffer;
+ }
+
const GooString &leftText = field->getCustomAppearanceLeftContent();
if (leftText.toStr().empty()) {
- drawSignatureFieldText(contents, DefaultAppearance(_da), border, rect, xref, resourcesDict, 0, false /* don't center vertically */, false /* don't center horizontally */, field->getImageResource());
+ drawSignatureFieldText(contents, DefaultAppearance(_da), border, rect, xref, resourcesDict, 0, false /* don't center vertically */, false /* don't center horizontally */);
} else {
DefaultAppearance daLeft(_da);
daLeft.setFontPtSize(field->getCustomAppearanceLeftFontSize());
@@ -4949,18 +4972,8 @@ bool AnnotAppearanceBuilder::drawSignatureFieldText(const FormFieldSignature *fi
return true;
}
-static void setChildDictEntryValue(Dict *parentDict, const char *childDictName, const char *childDictEntryName, const Ref childDictEntryValue, XRef *xref)
-{
- Object childDictionaryObj = parentDict->lookup(childDictName);
- if (!childDictionaryObj.isDict()) {
- childDictionaryObj = Object(new Dict(xref));
- parentDict->set(childDictName, childDictionaryObj.copy());
- }
- childDictionaryObj.dictSet(childDictEntryName, Object(childDictEntryValue));
-}
-
void AnnotAppearanceBuilder::drawSignatureFieldText(const GooString &text, const DefaultAppearance &da, const AnnotBorder *border, const PDFRectangle *rect, XRef *xref, Dict *resourcesDict, double leftMargin, bool centerVertically,
- bool centerHorizontally, const Ref imageResourceRef)
+ bool centerHorizontally)
{
double borderWidth = 0;
append("q\n");
@@ -4977,19 +4990,6 @@ void AnnotAppearanceBuilder::drawSignatureFieldText(const GooString &text, const
const double textmargin = borderWidth * 2;
const double textwidth = width - 2 * textmargin;
- // Print a background image.
- if (imageResourceRef != Ref::INVALID()) {
- static const char *imageResourceId = "SigImg";
- setChildDictEntryValue(resourcesDict, "XObject", imageResourceId, imageResourceRef, xref);
-
- Matrix matrix = { 1.0, 0.0, 0.0, 1.0, 0.0, 0.0 };
- matrix.scale(width, height);
- static const char *IMG_TMPL = "\nq {0:.1g} {1:.1g} {2:.1g} {3:.1g} {4:.1g} {5:.1g} cm /{6:s} Do Q\n";
- const GooString *imgBuffer = GooString::format(IMG_TMPL, matrix.m[0], matrix.m[1], matrix.m[2], matrix.m[3], matrix.m[4], matrix.m[5], imageResourceId);
- append(imgBuffer->c_str());
- delete imgBuffer;
- }
-
// create a Helvetica fake font
GfxFont *font = createAnnotDrawFont(xref, resourcesDict, da.getFontName().getName());
diff --git a/poppler/Annot.h b/poppler/Annot.h
index 13ccc58b..d25f24fd 100644
--- a/poppler/Annot.h
+++ b/poppler/Annot.h
@@ -598,8 +598,7 @@ private:
XRef *xref, Dict *resourcesDict);
bool drawSignatureFieldText(const FormFieldSignature *field, const Form *form, const GfxResources *resources, const GooString *da, const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect,
XRef *xref, Dict *resourcesDict);
- void drawSignatureFieldText(const GooString &text, const DefaultAppearance &da, const AnnotBorder *border, const PDFRectangle *rect, XRef *xref, Dict *resourcesDict, double leftMargin, bool centerVertically, bool centerHorizontally,
- const Ref imageResourceRef = Ref::INVALID());
+ void drawSignatureFieldText(const GooString &text, const DefaultAppearance &da, const AnnotBorder *border, const PDFRectangle *rect, XRef *xref, Dict *resourcesDict, double leftMargin, bool centerVertically, bool centerHorizontally);
bool drawText(const GooString *text, const GooString *da, const GfxResources *resources, const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect, bool multiline, int comb, int quadding,
bool txField, bool forceZapfDingbats, XRef *xref, bool password, Dict *resourcesDict, const char *defaultFallback = "Helvetica");
void drawArrowPath(double x, double y, const Matrix &m, int orientation = 1);
More information about the poppler
mailing list