diff options
author | Paul Gardiner <paul.gardiner@artifex.com> | 2014-02-14 14:09:41 +0000 |
---|---|---|
committer | Paul Gardiner <paul.gardiner@artifex.com> | 2014-02-14 14:29:56 +0000 |
commit | 3f0004acad7da3fcac4687844cb36e2b1ee855b0 (patch) | |
tree | 084f97ec66920088e966d2a027ea9b7f1eca4318 /source/pdf/pdf-pkcs7.c | |
parent | 520dbcb30f9f303fa13f4f2dbd5e7589dd5d7ca6 (diff) | |
download | mupdf-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.c | 40 |
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) { |