From 887f35efaa60653dcb92ea96c5f4d17bdd859d93 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Wed, 3 Mar 2021 16:57:37 -0500 Subject: When resolving font from /DR, copy it into resources --- libqpdf/QPDFFormFieldObjectHelper.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'libqpdf/QPDFFormFieldObjectHelper.cc') diff --git a/libqpdf/QPDFFormFieldObjectHelper.cc b/libqpdf/QPDFFormFieldObjectHelper.cc index c88934a8..c84e31d9 100644 --- a/libqpdf/QPDFFormFieldObjectHelper.cc +++ b/libqpdf/QPDFFormFieldObjectHelper.cc @@ -963,11 +963,28 @@ QPDFFormFieldObjectHelper::generateTextAppearance( // See if the font is encoded with something we know about. QPDFObjectHandle resources = AS.getDict().getKey("/Resources"); QPDFObjectHandle font = getFontFromResource(resources, font_name); + bool found_font_in_dr = false; if (! font.isInitialized()) { QPDFObjectHandle dr = getDefaultResources(); font = getFontFromResource(dr, font_name); + found_font_in_dr = (font.isInitialized() && font.isDictionary()); } + if (found_font_in_dr && resources.isDictionary()) + { + QTC::TC("qpdf", "QPDFFormFieldObjectHelper get font from /DR"); + if (resources.isIndirect()) + { + resources = resources.getOwningQPDF()->makeIndirectObject( + resources.shallowCopy()); + AS.getDict().replaceKey("/Resources", resources); + } + // Use mergeResources to force /Font to be local + resources.mergeResources( + QPDFObjectHandle::parse("<< /Font << >> >>")); + resources.getKey("/Font").replaceKey(font_name, font); + } + if (font.isInitialized() && font.isDictionary() && font.getKey("/Encoding").isName()) -- cgit v1.2.3-54-g00ecf