diff options
author | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2018-12-21 03:39:51 +0000 |
---|---|---|
committer | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2018-12-21 03:39:51 +0000 |
commit | 2daa55943e8c636fa3e239259539126821009288 (patch) | |
tree | 2441bf50f337f3bb1ed59ef0510c90759224fa5b /Build/source/texk/dvipdfm-x/dvipdfmx.c | |
parent | 1b616127961b67a309607c159c39f2a6ad61b341 (diff) |
Add a new special pdf:trailerid (S. Hirata)
git-svn-id: svn://tug.org/texlive/trunk@49467 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/dvipdfm-x/dvipdfmx.c')
-rw-r--r-- | Build/source/texk/dvipdfm-x/dvipdfmx.c | 53 |
1 files changed, 40 insertions, 13 deletions
diff --git a/Build/source/texk/dvipdfm-x/dvipdfmx.c b/Build/source/texk/dvipdfm-x/dvipdfmx.c index 6efb3c4a5d1..a804d84c508 100644 --- a/Build/source/texk/dvipdfm-x/dvipdfmx.c +++ b/Build/source/texk/dvipdfm-x/dvipdfmx.c @@ -39,6 +39,7 @@ #include "dpxconf.h" #include "dpxfile.h" #include "dpxutil.h" +#include "dpxcrypt.h" #include "dvi.h" @@ -452,6 +453,26 @@ get_enc_password (char *oplain, char *uplain) return 0; } +static void +compute_id_string (unsigned char *id, const char *producer, + const char *dviname, const char *pdfname) +{ + char datestr[32]; + MD5_CONTEXT md5; + + MD5_init(&md5); + /* Don't use timezone for compatibility */ + dpx_util_format_asn_date(datestr, 0); + MD5_write(&md5, (const unsigned char *)datestr, strlen(datestr)); + if (producer) + MD5_write(&md5, (const unsigned char *)producer, strlen(producer)); + if (dviname) + MD5_write(&md5, (const unsigned char *)dviname, strlen(dviname)); + if (pdfname) + MD5_write(&md5, (const unsigned char *)pdfname, strlen(pdfname)); + MD5_final(id, &md5); +} + static const char *optstrig = ":hD:r:m:g:x:y:o:s:p:clf:i:qtvV:z:d:I:K:P:O:MSC:Ee"; static struct option long_options[] = { @@ -892,7 +913,8 @@ do_dvi_pages (void) w = page_width; h = page_height; lm = landscape_mode; xo = x_offset; yo = y_offset; dvi_scan_specials(page_no, - &w, &h, &xo, &yo, &lm, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + &w, &h, &xo, &yo, &lm, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); if (lm != landscape_mode) { /* already swapped for the first page */ SWAP(w, h); landscape_mode = lm; @@ -1015,7 +1037,9 @@ main (int argc, char *argv[]) char *base; struct pdf_setting settings; char uplain[MAX_PWD_LEN+1], oplain[MAX_PWD_LEN+1]; /* encryption password */ - const char *ids[4] = {NULL, NULL, NULL, NULL}; + const char *creator = NULL; + unsigned char id1[16], id2[16]; + int has_id = 0; #ifdef WIN32 int ac; @@ -1112,12 +1136,13 @@ main (int argc, char *argv[]) dvi2pts = dvi_init(dvi_filename, mag); if (dvi2pts == 0.0) ERROR("dvi_init() failed!"); - ids[3] = dvi_comment(); /* Set PDF Creator entry */ + creator = dvi_comment(); /* Set PDF Creator entry */ dvi_scan_specials(0, &paper_width, &paper_height, &x_offset, &y_offset, &landscape_mode, &pdf_version_major, &pdf_version_minor, - &do_encryption, &key_bits, &permission, oplain, uplain); + &do_encryption, &key_bits, &permission, oplain, uplain, + &has_id, id1, id2); } /* Command-line options take precedence */ @@ -1132,22 +1157,14 @@ main (int argc, char *argv[]) /* Encryption and Other Settings */ { -#define PRODUCER \ -"%s-%s, Copyright 2002-2015 by Jin-Hwan Cho, Matthias Franz, and Shunsaku Hirata" - char producer[256]; - memset(&settings.encrypt, 0, sizeof(struct pdf_enc_setting)); settings.enable_encrypt = do_encryption; - sprintf(producer, PRODUCER, my_name, VERSION); settings.encrypt.use_aes = 1; settings.encrypt.encrypt_metadata = 1; settings.encrypt.key_size = key_bits; settings.encrypt.permission = permission; settings.encrypt.uplain = uplain; settings.encrypt.oplain = oplain; - ids[0] = producer; - ids[1] = dvi_filename; - ids[2] = pdf_filename; } if (opt_flags & OPT_PDFOBJ_NO_OBJSTM) { @@ -1189,8 +1206,18 @@ main (int argc, char *argv[]) if (enable_thumbnail) pdf_doc_enable_manual_thumbnails(); + if (!has_id) { +#define PRODUCER \ +"%s-%s, Copyright 2002-2015 by Jin-Hwan Cho, Matthias Franz, and Shunsaku Hirata" + char producer[256]; + + sprintf(producer, PRODUCER, my_name, VERSION); + compute_id_string(id1, producer, dvi_filename, pdf_filename); + memcpy(id2, id1, 16); + } + /* Initialize PDF document creation routine. */ - pdf_open_document(pdf_filename, ids, settings); + pdf_open_document(pdf_filename, creator, id1, id2, settings); if (opt_flags & OPT_CIDFONT_FIXEDPITCH) CIDFont_set_flags(CIDFONT_FORCE_FIXEDPITCH); |