From 988a751c15b43942b20ed437a15d6da6945aa883 Mon Sep 17 00:00:00 2001 From: yzrh Date: Thu, 29 Dec 2022 02:49:05 +0000 Subject: Handle missing root object which is parent of others. Signed-off-by: yzrh --- CHANGE.md | 1 + src/cnki_pdf.c | 12 +++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/CHANGE.md b/CHANGE.md index c4ce375..a832777 100644 --- a/CHANGE.md +++ b/CHANGE.md @@ -1,6 +1,7 @@ 0.3.0 (2023-XX-XX) ================== +* Handle missing but referenced root object. * Support JPEG 2000 for HN. * Support HN figure placement. * Support HN text overlay. diff --git a/src/cnki_pdf.c b/src/cnki_pdf.c index 887e5f4..502a0ce 100644 --- a/src/cnki_pdf.c +++ b/src/cnki_pdf.c @@ -309,7 +309,9 @@ cnki_pdf(cnki_t **param) if (parent_missing[i] == 1) root_kid++; - if (root_kid <= 1) { + if (root_kid > 1) { + root = pdf_get_free_id(&pdf); + } else { if (root_kid == 0) { for (int i = 1; i <= parent[0]; i++) if (root == 0 || root < parent[i]) @@ -323,15 +325,15 @@ cnki_pdf(cnki_t **param) if ((*param)->stat > 0) printf("Root object is %d.\n", root); - } else { + } + + if (pdf_get_kid_count(&pdf, root) == 0) { if ((*param)->stat > 0) printf("Root object is missing\n"); if ((*param)->stat > 1) printf("Generating root object\n"); - root = pdf_get_free_id(&pdf); - snprintf(buf, 64, "<<\n/Type /Pages\n/Kids "); strcat(dictionary, buf); @@ -886,7 +888,7 @@ cnki_pdf_hn(cnki_t **param) free(dictionary); } - dictionary_size = 64 + 128 * ptr->image_length; + dictionary_size = 128 + 128 * ptr->image_length; dictionary = malloc(dictionary_size); if (dictionary == NULL) { -- cgit v1.2.3