summaryrefslogtreecommitdiff
path: root/source/pdf/pdf-pkcs7.c
diff options
context:
space:
mode:
authorPaul Gardiner <paul.gardiner@artifex.com>2014-02-14 14:09:41 +0000
committerPaul Gardiner <paul.gardiner@artifex.com>2014-02-14 14:29:56 +0000
commit3f0004acad7da3fcac4687844cb36e2b1ee855b0 (patch)
tree084f97ec66920088e966d2a027ea9b7f1eca4318 /source/pdf/pdf-pkcs7.c
parent520dbcb30f9f303fa13f4f2dbd5e7589dd5d7ca6 (diff)
downloadmupdf-3f0004acad7da3fcac4687844cb36e2b1ee855b0.tar.xz
Add function for creating form fields (widgets)
This feature is being implemented mostly for the purpose of permitting the addition to a page of invisible signatures. Also change pdf_create_annot to make freshly created annotations printable by default.
Diffstat (limited to 'source/pdf/pdf-pkcs7.c')
-rw-r--r--source/pdf/pdf-pkcs7.c40
1 files changed, 24 insertions, 16 deletions
diff --git a/source/pdf/pdf-pkcs7.c b/source/pdf/pdf-pkcs7.c
index 178d20ea..a36d1592 100644
--- a/source/pdf/pdf-pkcs7.c
+++ b/source/pdf/pdf-pkcs7.c
@@ -741,29 +741,37 @@ void pdf_sign_signature(pdf_document *doc, pdf_widget *widget, const char *sigfi
fz_try(ctx)
{
char *dn_str;
+ pdf_obj *wobj = ((pdf_annot *)widget)->obj;
+ fz_rect rect = fz_empty_rect;
- pdf_signature_set_value(doc, ((pdf_annot *)widget)->obj, signer);
- dn = pdf_signer_designated_name(signer);
- fzbuf = fz_new_buffer(ctx, 256);
- if (!dn->cn)
- fz_throw(ctx, FZ_ERROR_GENERIC, "Certificate has no common name");
+ pdf_signature_set_value(doc, wobj, signer);
- fz_buffer_printf(ctx, fzbuf, "cn=%s", dn->cn);
+ pdf_to_rect(ctx, pdf_dict_gets(wobj, "Rect"), &rect);
+ /* Create an appearance stream only if the signature is intended to be visible */
+ if (!fz_is_empty_rect(&rect))
+ {
+ dn = pdf_signer_designated_name(signer);
+ fzbuf = fz_new_buffer(ctx, 256);
+ if (!dn->cn)
+ fz_throw(ctx, FZ_ERROR_GENERIC, "Certificate has no common name");
+
+ fz_buffer_printf(ctx, fzbuf, "cn=%s", dn->cn);
- if (dn->o)
- fz_buffer_printf(ctx, fzbuf, ", o=%s", dn->o);
+ if (dn->o)
+ fz_buffer_printf(ctx, fzbuf, ", o=%s", dn->o);
- if (dn->ou)
- fz_buffer_printf(ctx, fzbuf, ", ou=%s", dn->ou);
+ if (dn->ou)
+ fz_buffer_printf(ctx, fzbuf, ", ou=%s", dn->ou);
- if (dn->email)
- fz_buffer_printf(ctx, fzbuf, ", email=%s", dn->email);
+ if (dn->email)
+ fz_buffer_printf(ctx, fzbuf, ", email=%s", dn->email);
- if (dn->c)
- fz_buffer_printf(ctx, fzbuf, ", c=%s", dn->c);
+ if (dn->c)
+ fz_buffer_printf(ctx, fzbuf, ", c=%s", dn->c);
- (void)fz_buffer_storage(ctx, fzbuf, (unsigned char **) &dn_str);
- pdf_set_signature_appearance(doc, (pdf_annot *)widget, dn->cn, dn_str, NULL);
+ (void)fz_buffer_storage(ctx, fzbuf, (unsigned char **) &dn_str);
+ pdf_set_signature_appearance(doc, (pdf_annot *)widget, dn->cn, dn_str, NULL);
+ }
}
fz_always(ctx)
{