Commit 56f1b411feeb58b55e92ee77daffaa49c51b7dad

Authored by Jay Berkenbilt
1 parent 7e7a9c43

Back out fluent QPDFObjectHandle methods. Keep the andGet methods.

I decided these were confusing and inconsistent with how JSON works.
They muddle the API rather than improving it.
ChangeLog
@@ -86,15 +86,12 @@ @@ -86,15 +86,12 @@
86 2022-04-29 Jay Berkenbilt <ejb@ql.org> 86 2022-04-29 Jay Berkenbilt <ejb@ql.org>
87 87
88 * QPDFObjectHandle: for the methods insertItem, appendItem, 88 * QPDFObjectHandle: for the methods insertItem, appendItem,
89 - eraseItem, replaceKey, and removeKey, have the methods return a  
90 - reference to the original object, making a fluent interface to  
91 - initializing or modifying QPDFObjectHandle possible. Also, for  
92 - each one, add a corresponding "AndGet" method (insertItemAndGet,  
93 - appendItemAndGet, eraseItemAndGet, replaceKeyAndGet, and  
94 - removeKeyAndGet) that returns the newly inserted, replaced, or  
95 - removed item. This makes it possible to create a new object, add  
96 - it to an array or dictionary, and get a handle to it all in one  
97 - line. 89 + eraseItem, replaceKey, and removeKey, add a corresponding "AndGet"
  90 + method (insertItemAndGet, appendItemAndGet, eraseItemAndGet,
  91 + replaceKeyAndGet, and removeKeyAndGet) that returns the newly
  92 + inserted, replaced, or removed item. This makes it possible to
  93 + create a new object, add it to an array or dictionary, and get a
  94 + handle to it all in one line.
98 95
99 2022-04-24 Jay Berkenbilt <ejb@ql.org> 96 2022-04-24 Jay Berkenbilt <ejb@ql.org>
100 97
examples/pdf-attach-file.cc
@@ -106,10 +106,10 @@ process( @@ -106,10 +106,10 @@ process(
106 // apdict.replaceKey("/Type", QPDFObjectHandle::newName("/XObject")); 106 // apdict.replaceKey("/Type", QPDFObjectHandle::newName("/XObject"));
107 // apdict.replaceKey("/Subtype", QPDFObjectHandle::newName("/Form")); 107 // apdict.replaceKey("/Subtype", QPDFObjectHandle::newName("/Form"));
108 // apdict.replaceKey("/BBox", QPDFObjectHandle::parse("[ 0 0 20 20 ]")); 108 // apdict.replaceKey("/BBox", QPDFObjectHandle::parse("[ 0 0 20 20 ]"));
109 - apdict.replaceKey("/Resources", "<< >>"_qpdf)  
110 - .replaceKey("/Type", "/XObject"_qpdf)  
111 - .replaceKey("/Subtype", "/Form"_qpdf)  
112 - .replaceKey("/BBox", "[ 0 0 20 20 ]"_qpdf); 109 + apdict.replaceKey("/Resources", "<< >>"_qpdf);
  110 + apdict.replaceKey("/Type", "/XObject"_qpdf);
  111 + apdict.replaceKey("/Subtype", "/Form"_qpdf);
  112 + apdict.replaceKey("/BBox", "[ 0 0 20 20 ]"_qpdf);
113 auto annot = q.makeIndirectObject(QPDFObjectHandle::parse( 113 auto annot = q.makeIndirectObject(QPDFObjectHandle::parse(
114 &q, 114 &q,
115 ("<<" 115 ("<<"
examples/pdf-create.cc
@@ -181,9 +181,9 @@ add_page( @@ -181,9 +181,9 @@ add_page(
181 " /Subtype /Image" 181 " /Subtype /Image"
182 " /BitsPerComponent 8" 182 " /BitsPerComponent 8"
183 ">>"_qpdf; 183 ">>"_qpdf;
184 - image_dict.replaceKey("/ColorSpace", newName(color_space))  
185 - .replaceKey("/Width", newInteger(width))  
186 - .replaceKey("/Height", newInteger(height)); 184 + image_dict.replaceKey("/ColorSpace", newName(color_space));
  185 + image_dict.replaceKey("/Width", newInteger(width));
  186 + image_dict.replaceKey("/Height", newInteger(height));
187 image.replaceDict(image_dict); 187 image.replaceDict(image_dict);
188 188
189 // Provide the stream data. 189 // Provide the stream data.
@@ -200,9 +200,9 @@ add_page( @@ -200,9 +200,9 @@ add_page(
200 xobject.replaceKey("/Im1", image); 200 xobject.replaceKey("/Im1", image);
201 201
202 QPDFObjectHandle resources = QPDFObjectHandle::newDictionary(); 202 QPDFObjectHandle resources = QPDFObjectHandle::newDictionary();
203 - resources.replaceKey("/ProcSet", procset)  
204 - .replaceKey("/Font", rfont)  
205 - .replaceKey("/XObject", xobject); 203 + resources.replaceKey("/ProcSet", procset);
  204 + resources.replaceKey("/Font", rfont);
  205 + resources.replaceKey("/XObject", xobject);
206 206
207 // Create the page content stream 207 // Create the page content stream
208 QPDFObjectHandle contents = 208 QPDFObjectHandle contents =
@@ -213,7 +213,8 @@ add_page( @@ -213,7 +213,8 @@ add_page(
213 " /Type /Page" 213 " /Type /Page"
214 " /MediaBox [0 0 612 392]" 214 " /MediaBox [0 0 612 392]"
215 ">>"_qpdf); 215 ">>"_qpdf);
216 - page.replaceKey("/Contents", contents).replaceKey("/Resources", resources); 216 + page.replaceKey("/Contents", contents);
  217 + page.replaceKey("/Resources", resources);
217 218
218 // Add the page to the PDF file 219 // Add the page to the PDF file
219 dh.addPage(page, false); 220 dh.addPage(page, false);
include/qpdf/QPDFObjectHandle.hh
@@ -1024,25 +1024,22 @@ class QPDFObjectHandle @@ -1024,25 +1024,22 @@ class QPDFObjectHandle
1024 void setArrayFromVector(std::vector<QPDFObjectHandle> const& items); 1024 void setArrayFromVector(std::vector<QPDFObjectHandle> const& items);
1025 // Insert an item before the item at the given position ("at") so 1025 // Insert an item before the item at the given position ("at") so
1026 // that it has that position after insertion. If "at" is equal to 1026 // that it has that position after insertion. If "at" is equal to
1027 - // the size of the array, insert the item at the end. Return a  
1028 - // reference to the array (not the new item). 1027 + // the size of the array, insert the item at the end.
1029 QPDF_DLL 1028 QPDF_DLL
1030 - QPDFObjectHandle& insertItem(int at, QPDFObjectHandle const& item); 1029 + void insertItem(int at, QPDFObjectHandle const& item);
1031 // Like insertItem but return the item that was inserted. 1030 // Like insertItem but return the item that was inserted.
1032 QPDF_DLL 1031 QPDF_DLL
1033 QPDFObjectHandle insertItemAndGet(int at, QPDFObjectHandle const& item); 1032 QPDFObjectHandle insertItemAndGet(int at, QPDFObjectHandle const& item);
1034 - // Append an item, and return a reference to the original array  
1035 - // (not the new item). 1033 + // Append an item to an array.
1036 QPDF_DLL 1034 QPDF_DLL
1037 - QPDFObjectHandle& appendItem(QPDFObjectHandle const& item); 1035 + void appendItem(QPDFObjectHandle const& item);
1038 // Append an item, and return the newly added item. 1036 // Append an item, and return the newly added item.
1039 QPDF_DLL 1037 QPDF_DLL
1040 QPDFObjectHandle appendItemAndGet(QPDFObjectHandle const& item); 1038 QPDFObjectHandle appendItemAndGet(QPDFObjectHandle const& item);
1041 // Remove the item at that position, reducing the size of the 1039 // Remove the item at that position, reducing the size of the
1042 - // array by one. Return a reference the original array (not the  
1043 - // item that was removed). 1040 + // array by one.
1044 QPDF_DLL 1041 QPDF_DLL
1045 - QPDFObjectHandle& eraseItem(int at); 1042 + void eraseItem(int at);
1046 // Erase and item and return the item that was removed. 1043 // Erase and item and return the item that was removed.
1047 QPDF_DLL 1044 QPDF_DLL
1048 QPDFObjectHandle eraseItemAndGet(int at); 1045 QPDFObjectHandle eraseItemAndGet(int at);
@@ -1050,19 +1047,16 @@ class QPDFObjectHandle @@ -1050,19 +1047,16 @@ class QPDFObjectHandle
1050 // Mutator methods for dictionary objects 1047 // Mutator methods for dictionary objects
1051 1048
1052 // Replace value of key, adding it if it does not exist. If value 1049 // Replace value of key, adding it if it does not exist. If value
1053 - // is null, remove the key. Return a reference to the original  
1054 - // dictionary (not the new item). 1050 + // is null, remove the key.
1055 QPDF_DLL 1051 QPDF_DLL
1056 - QPDFObjectHandle&  
1057 - replaceKey(std::string const& key, QPDFObjectHandle const& value); 1052 + void replaceKey(std::string const& key, QPDFObjectHandle const& value);
1058 // Replace value of key and return the value. 1053 // Replace value of key and return the value.
1059 QPDF_DLL 1054 QPDF_DLL
1060 QPDFObjectHandle 1055 QPDFObjectHandle
1061 replaceKeyAndGet(std::string const& key, QPDFObjectHandle const& value); 1056 replaceKeyAndGet(std::string const& key, QPDFObjectHandle const& value);
1062 - // Remove key, doing nothing if key does not exist. Return the  
1063 - // original dictionary (not the removed item). 1057 + // Remove key, doing nothing if key does not exist.
1064 QPDF_DLL 1058 QPDF_DLL
1065 - QPDFObjectHandle& removeKey(std::string const& key); 1059 + void removeKey(std::string const& key);
1066 // Remove key and return the old value. If the old value didn't 1060 // Remove key and return the old value. If the old value didn't
1067 // exist, return a null object. 1061 // exist, return a null object.
1068 QPDF_DLL 1062 QPDF_DLL
libqpdf/NNTree.cc
@@ -208,8 +208,9 @@ NNTreeIterator::resetLimits( @@ -208,8 +208,9 @@ NNTreeIterator::resetLimits(
208 } 208 }
209 } 209 }
210 if (first.isInitialized() && last.isInitialized()) { 210 if (first.isInitialized() && last.isInitialized()) {
211 - auto limits =  
212 - QPDFObjectHandle::newArray().appendItem(first).appendItem(last); 211 + auto limits = QPDFObjectHandle::newArray();
  212 + limits.appendItem(first);
  213 + limits.appendItem(last);
213 auto olimits = node.getKey("/Limits"); 214 auto olimits = node.getKey("/Limits");
214 if (olimits.isArray() && (olimits.getArrayNItems() == 2)) { 215 if (olimits.isArray() && (olimits.getArrayNItems() == 2)) {
215 auto ofirst = olimits.getArrayItem(0); 216 auto ofirst = olimits.getArrayItem(0);
@@ -340,10 +341,9 @@ NNTreeIterator::split( @@ -340,10 +341,9 @@ NNTreeIterator::split(
340 first_node.replaceKey(key, first_half); 341 first_node.replaceKey(key, first_half);
341 QPDFObjectHandle new_kids = QPDFObjectHandle::newArray(); 342 QPDFObjectHandle new_kids = QPDFObjectHandle::newArray();
342 new_kids.appendItem(first_node); 343 new_kids.appendItem(first_node);
343 - to_split  
344 - .removeKey("/Limits") // already shouldn't be there for root  
345 - .removeKey(impl.details.itemsKey())  
346 - .replaceKey("/Kids", new_kids); 344 + to_split.removeKey("/Limits"); // already shouldn't be there for root
  345 + to_split.removeKey(impl.details.itemsKey());
  346 + to_split.replaceKey("/Kids", new_kids);
347 if (is_leaf) { 347 if (is_leaf) {
348 QTC::TC("qpdf", "NNTree split root + leaf"); 348 QTC::TC("qpdf", "NNTree split root + leaf");
349 this->node = first_node; 349 this->node = first_node;
@@ -884,8 +884,9 @@ NNTreeImpl::repair() @@ -884,8 +884,9 @@ NNTreeImpl::repair()
884 for (auto const& i: *this) { 884 for (auto const& i: *this) {
885 repl.insert(i.first, i.second); 885 repl.insert(i.first, i.second);
886 } 886 }
887 - this->oh.replaceKey("/Kids", new_node.getKey("/Kids"))  
888 - .replaceKey(details.itemsKey(), new_node.getKey(details.itemsKey())); 887 + this->oh.replaceKey("/Kids", new_node.getKey("/Kids"));
  888 + this->oh.replaceKey(
  889 + details.itemsKey(), new_node.getKey(details.itemsKey()));
889 } 890 }
890 891
891 NNTreeImpl::iterator 892 NNTreeImpl::iterator
libqpdf/QPDFAcroFormDocumentHelper.cc
@@ -733,7 +733,8 @@ QPDFAcroFormDocumentHelper::adjustAppearanceStream( @@ -733,7 +733,8 @@ QPDFAcroFormDocumentHelper::adjustAppearanceStream(
733 auto existing_old = subdict.getKey(old_key); 733 auto existing_old = subdict.getKey(old_key);
734 if (!existing_old.isNull()) { 734 if (!existing_old.isNull()) {
735 QTC::TC("qpdf", "QPDFAcroFormDocumentHelper ap rename"); 735 QTC::TC("qpdf", "QPDFAcroFormDocumentHelper ap rename");
736 - subdict.replaceKey(new_key, existing_old).removeKey(old_key); 736 + subdict.replaceKey(new_key, existing_old);
  737 + subdict.removeKey(old_key);
737 } 738 }
738 } 739 }
739 } 740 }
libqpdf/QPDFFileSpecObjectHelper.cc
@@ -103,8 +103,8 @@ QPDFFileSpecObjectHelper::createFileSpec( @@ -103,8 +103,8 @@ QPDFFileSpecObjectHelper::createFileSpec(
103 QPDFFileSpecObjectHelper result(oh); 103 QPDFFileSpecObjectHelper result(oh);
104 result.setFilename(filename); 104 result.setFilename(filename);
105 auto ef = QPDFObjectHandle::newDictionary(); 105 auto ef = QPDFObjectHandle::newDictionary();
106 - ef.replaceKey("/F", efsoh.getObjectHandle())  
107 - .replaceKey("/UF", efsoh.getObjectHandle()); 106 + ef.replaceKey("/F", efsoh.getObjectHandle());
  107 + ef.replaceKey("/UF", efsoh.getObjectHandle());
108 oh.replaceKey("/EF", ef); 108 oh.replaceKey("/EF", ef);
109 return result; 109 return result;
110 } 110 }
libqpdf/QPDFObjectHandle.cc
@@ -959,7 +959,7 @@ QPDFObjectHandle::setArrayFromVector(std::vector&lt;QPDFObjectHandle&gt; const&amp; items) @@ -959,7 +959,7 @@ QPDFObjectHandle::setArrayFromVector(std::vector&lt;QPDFObjectHandle&gt; const&amp; items)
959 } 959 }
960 } 960 }
961 961
962 -QPDFObjectHandle& 962 +void
963 QPDFObjectHandle::insertItem(int at, QPDFObjectHandle const& item) 963 QPDFObjectHandle::insertItem(int at, QPDFObjectHandle const& item)
964 { 964 {
965 if (isArray()) { 965 if (isArray()) {
@@ -968,7 +968,6 @@ QPDFObjectHandle::insertItem(int at, QPDFObjectHandle const&amp; item) @@ -968,7 +968,6 @@ QPDFObjectHandle::insertItem(int at, QPDFObjectHandle const&amp; item)
968 typeWarning("array", "ignoring attempt to insert item"); 968 typeWarning("array", "ignoring attempt to insert item");
969 QTC::TC("qpdf", "QPDFObjectHandle array ignoring insert item"); 969 QTC::TC("qpdf", "QPDFObjectHandle array ignoring insert item");
970 } 970 }
971 - return *this;  
972 } 971 }
973 972
974 QPDFObjectHandle 973 QPDFObjectHandle
@@ -978,7 +977,7 @@ QPDFObjectHandle::insertItemAndGet(int at, QPDFObjectHandle const&amp; item) @@ -978,7 +977,7 @@ QPDFObjectHandle::insertItemAndGet(int at, QPDFObjectHandle const&amp; item)
978 return item; 977 return item;
979 } 978 }
980 979
981 -QPDFObjectHandle& 980 +void
982 QPDFObjectHandle::appendItem(QPDFObjectHandle const& item) 981 QPDFObjectHandle::appendItem(QPDFObjectHandle const& item)
983 { 982 {
984 if (isArray()) { 983 if (isArray()) {
@@ -988,7 +987,6 @@ QPDFObjectHandle::appendItem(QPDFObjectHandle const&amp; item) @@ -988,7 +987,6 @@ QPDFObjectHandle::appendItem(QPDFObjectHandle const&amp; item)
988 typeWarning("array", "ignoring attempt to append item"); 987 typeWarning("array", "ignoring attempt to append item");
989 QTC::TC("qpdf", "QPDFObjectHandle array ignoring append item"); 988 QTC::TC("qpdf", "QPDFObjectHandle array ignoring append item");
990 } 989 }
991 - return *this;  
992 } 990 }
993 991
994 QPDFObjectHandle 992 QPDFObjectHandle
@@ -998,7 +996,7 @@ QPDFObjectHandle::appendItemAndGet(QPDFObjectHandle const&amp; item) @@ -998,7 +996,7 @@ QPDFObjectHandle::appendItemAndGet(QPDFObjectHandle const&amp; item)
998 return item; 996 return item;
999 } 997 }
1000 998
1001 -QPDFObjectHandle& 999 +void
1002 QPDFObjectHandle::eraseItem(int at) 1000 QPDFObjectHandle::eraseItem(int at)
1003 { 1001 {
1004 if (isArray() && (at < getArrayNItems()) && (at >= 0)) { 1002 if (isArray() && (at < getArrayNItems()) && (at >= 0)) {
@@ -1012,7 +1010,6 @@ QPDFObjectHandle::eraseItem(int at) @@ -1012,7 +1010,6 @@ QPDFObjectHandle::eraseItem(int at)
1012 QTC::TC("qpdf", "QPDFObjectHandle array ignoring erase item"); 1010 QTC::TC("qpdf", "QPDFObjectHandle array ignoring erase item");
1013 } 1011 }
1014 } 1012 }
1015 - return *this;  
1016 } 1013 }
1017 1014
1018 QPDFObjectHandle 1015 QPDFObjectHandle
@@ -1289,7 +1286,7 @@ QPDFObjectHandle::getOwningQPDF() @@ -1289,7 +1286,7 @@ QPDFObjectHandle::getOwningQPDF()
1289 1286
1290 // Dictionary mutators 1287 // Dictionary mutators
1291 1288
1292 -QPDFObjectHandle& 1289 +void
1293 QPDFObjectHandle::replaceKey( 1290 QPDFObjectHandle::replaceKey(
1294 std::string const& key, QPDFObjectHandle const& value) 1291 std::string const& key, QPDFObjectHandle const& value)
1295 { 1292 {
@@ -1300,7 +1297,6 @@ QPDFObjectHandle::replaceKey( @@ -1300,7 +1297,6 @@ QPDFObjectHandle::replaceKey(
1300 typeWarning("dictionary", "ignoring key replacement request"); 1297 typeWarning("dictionary", "ignoring key replacement request");
1301 QTC::TC("qpdf", "QPDFObjectHandle dictionary ignoring replaceKey"); 1298 QTC::TC("qpdf", "QPDFObjectHandle dictionary ignoring replaceKey");
1302 } 1299 }
1303 - return *this;  
1304 } 1300 }
1305 1301
1306 QPDFObjectHandle 1302 QPDFObjectHandle
@@ -1311,7 +1307,7 @@ QPDFObjectHandle::replaceKeyAndGet( @@ -1311,7 +1307,7 @@ QPDFObjectHandle::replaceKeyAndGet(
1311 return value; 1307 return value;
1312 } 1308 }
1313 1309
1314 -QPDFObjectHandle& 1310 +void
1315 QPDFObjectHandle::removeKey(std::string const& key) 1311 QPDFObjectHandle::removeKey(std::string const& key)
1316 { 1312 {
1317 if (isDictionary()) { 1313 if (isDictionary()) {
@@ -1320,7 +1316,6 @@ QPDFObjectHandle::removeKey(std::string const&amp; key) @@ -1320,7 +1316,6 @@ QPDFObjectHandle::removeKey(std::string const&amp; key)
1320 typeWarning("dictionary", "ignoring key removal request"); 1316 typeWarning("dictionary", "ignoring key removal request");
1321 QTC::TC("qpdf", "QPDFObjectHandle dictionary ignoring removeKey"); 1317 QTC::TC("qpdf", "QPDFObjectHandle dictionary ignoring removeKey");
1322 } 1318 }
1323 - return *this;  
1324 } 1319 }
1325 1320
1326 QPDFObjectHandle 1321 QPDFObjectHandle
libqpdf/QPDFPageLabelDocumentHelper.cc
@@ -44,8 +44,9 @@ QPDFPageLabelDocumentHelper::getLabelForPage(long long page_idx) @@ -44,8 +44,9 @@ QPDFPageLabelDocumentHelper::getLabelForPage(long long page_idx)
44 QIntC::range_check(start, offset); 44 QIntC::range_check(start, offset);
45 start += offset; 45 start += offset;
46 result = QPDFObjectHandle::newDictionary(); 46 result = QPDFObjectHandle::newDictionary();
47 - result.replaceKey("/S", S).replaceKey("/P", P).replaceKey(  
48 - "/St", QPDFObjectHandle::newInteger(start)); 47 + result.replaceKey("/S", S);
  48 + result.replaceKey("/P", P);
  49 + result.replaceKey("/St", QPDFObjectHandle::newInteger(start));
49 return result; 50 return result;
50 } 51 }
51 52
libqpdf/QPDFPageObjectHelper.cc
@@ -78,8 +78,8 @@ QPDFObjectHandle @@ -78,8 +78,8 @@ QPDFObjectHandle
78 InlineImageTracker::convertIIDict(QPDFObjectHandle odict) 78 InlineImageTracker::convertIIDict(QPDFObjectHandle odict)
79 { 79 {
80 QPDFObjectHandle dict = QPDFObjectHandle::newDictionary(); 80 QPDFObjectHandle dict = QPDFObjectHandle::newDictionary();
81 - dict.replaceKey("/Type", QPDFObjectHandle::newName("/XObject"))  
82 - .replaceKey("/Subtype", QPDFObjectHandle::newName("/Image")); 81 + dict.replaceKey("/Type", QPDFObjectHandle::newName("/XObject"));
  82 + dict.replaceKey("/Subtype", QPDFObjectHandle::newName("/Image"));
83 std::set<std::string> keys = odict.getKeys(); 83 std::set<std::string> keys = odict.getKeys();
84 for (auto key: keys) { 84 for (auto key: keys) {
85 QPDFObjectHandle value = odict.getKey(key); 85 QPDFObjectHandle value = odict.getKey(key);
@@ -752,11 +752,11 @@ QPDFPageObjectHelper::getFormXObjectForPage(bool handle_transformations) @@ -752,11 +752,11 @@ QPDFPageObjectHelper::getFormXObjectForPage(bool handle_transformations)
752 } 752 }
753 QPDFObjectHandle result = QPDFObjectHandle::newStream(qpdf); 753 QPDFObjectHandle result = QPDFObjectHandle::newStream(qpdf);
754 QPDFObjectHandle newdict = result.getDict(); 754 QPDFObjectHandle newdict = result.getDict();
755 - newdict.replaceKey("/Type", QPDFObjectHandle::newName("/XObject"))  
756 - .replaceKey("/Subtype", QPDFObjectHandle::newName("/Form"))  
757 - .replaceKey(  
758 - "/Resources", getAttribute("/Resources", false).shallowCopy())  
759 - .replaceKey("/Group", getAttribute("/Group", false).shallowCopy()); 755 + newdict.replaceKey("/Type", QPDFObjectHandle::newName("/XObject"));
  756 + newdict.replaceKey("/Subtype", QPDFObjectHandle::newName("/Form"));
  757 + newdict.replaceKey(
  758 + "/Resources", getAttribute("/Resources", false).shallowCopy());
  759 + newdict.replaceKey("/Group", getAttribute("/Group", false).shallowCopy());
760 QPDFObjectHandle bbox = getTrimBox(false).shallowCopy(); 760 QPDFObjectHandle bbox = getTrimBox(false).shallowCopy();
761 if (!bbox.isRectangle()) { 761 if (!bbox.isRectangle()) {
762 this->oh.warnIfPossible("bounding box is invalid; form" 762 this->oh.warnIfPossible("bounding box is invalid; form"
libqpdf/QPDF_Stream.cc
@@ -725,8 +725,8 @@ QPDF_Stream::replaceFilterData( @@ -725,8 +725,8 @@ QPDF_Stream::replaceFilterData(
725 QPDFObjectHandle const& decode_parms, 725 QPDFObjectHandle const& decode_parms,
726 size_t length) 726 size_t length)
727 { 727 {
728 - this->stream_dict.replaceKey("/Filter", filter)  
729 - .replaceKey("/DecodeParms", decode_parms); 728 + this->stream_dict.replaceKey("/Filter", filter);
  729 + this->stream_dict.replaceKey("/DecodeParms", decode_parms);
730 if (length == 0) { 730 if (length == 0) {
731 QTC::TC("qpdf", "QPDF_Stream unknown stream length"); 731 QTC::TC("qpdf", "QPDF_Stream unknown stream length");
732 this->stream_dict.removeKey("/Length"); 732 this->stream_dict.removeKey("/Length");
libtests/nntree.cc
@@ -62,15 +62,16 @@ test_bsearch() @@ -62,15 +62,16 @@ test_bsearch()
62 auto mk = [&q](std::vector<int> const& v) { 62 auto mk = [&q](std::vector<int> const& v) {
63 auto nums = QPDFObjectHandle::newArray(); 63 auto nums = QPDFObjectHandle::newArray();
64 for (auto i: v) { 64 for (auto i: v) {
65 - nums.appendItem(QPDFObjectHandle::newInteger(i))  
66 - .appendItem(QPDFObjectHandle::newString(  
67 - "-" + QUtil::int_to_string(i) + "-")); 65 + nums.appendItem(QPDFObjectHandle::newInteger(i));
  66 + nums.appendItem(QPDFObjectHandle::newString(
  67 + "-" + QUtil::int_to_string(i) + "-"));
68 } 68 }
69 auto limits = QPDFObjectHandle::newArray(); 69 auto limits = QPDFObjectHandle::newArray();
70 - limits.appendItem(QPDFObjectHandle::newInteger(v.at(0)))  
71 - .appendItem(QPDFObjectHandle::newInteger(v.at(v.size() - 1))); 70 + limits.appendItem(QPDFObjectHandle::newInteger(v.at(0)));
  71 + limits.appendItem(QPDFObjectHandle::newInteger(v.at(v.size() - 1)));
72 auto node = q.makeIndirectObject(QPDFObjectHandle::newDictionary()); 72 auto node = q.makeIndirectObject(QPDFObjectHandle::newDictionary());
73 - node.replaceKey("/Nums", nums).replaceKey("/Limits", limits); 73 + node.replaceKey("/Nums", nums);
  74 + node.replaceKey("/Limits", limits);
74 return node; 75 return node;
75 }; 76 };
76 77
@@ -168,8 +169,8 @@ test_depth() @@ -168,8 +169,8 @@ test_depth()
168 int val = 169 int val =
169 (((((i1 * NITEMS) + i2) * NITEMS) + i3) * NITEMS) + i4; 170 (((((i1 * NITEMS) + i2) * NITEMS) + i3) * NITEMS) + i4;
170 std::string str = QUtil::int_to_string(10 * val, 6); 171 std::string str = QUtil::int_to_string(10 * val, 6);
171 - items.appendItem(QPDFObjectHandle::newString(str))  
172 - .appendItem(QPDFObjectHandle::newString("val " + str)); 172 + items.appendItem(QPDFObjectHandle::newString(str));
  173 + items.appendItem(QPDFObjectHandle::newString("val " + str));
173 if (i4 == 0) { 174 if (i4 == 0) {
174 first = str; 175 first = str;
175 } else if (i4 == NITEMS - 1) { 176 } else if (i4 == NITEMS - 1) {
@@ -178,23 +179,21 @@ test_depth() @@ -178,23 +179,21 @@ test_depth()
178 } 179 }
179 auto limits = QPDFObjectHandle::newArray(); 180 auto limits = QPDFObjectHandle::newArray();
180 n3.replaceKey("/Limits", limits); 181 n3.replaceKey("/Limits", limits);
181 - limits.appendItem(QPDFObjectHandle::newString(first))  
182 - .appendItem(QPDFObjectHandle::newString(last)); 182 + limits.appendItem(QPDFObjectHandle::newString(first));
  183 + limits.appendItem(QPDFObjectHandle::newString(last));
183 } 184 }
184 auto limits = QPDFObjectHandle::newArray(); 185 auto limits = QPDFObjectHandle::newArray();
185 n2.replaceKey("/Limits", limits); 186 n2.replaceKey("/Limits", limits);
186 - limits  
187 - .appendItem(  
188 - k2.getArrayItem(0).getKey("/Limits").getArrayItem(0))  
189 - .appendItem(k2.getArrayItem(NITEMS - 1)  
190 - .getKey("/Limits")  
191 - .getArrayItem(1)); 187 + limits.appendItem(
  188 + k2.getArrayItem(0).getKey("/Limits").getArrayItem(0));
  189 + limits.appendItem(
  190 + k2.getArrayItem(NITEMS - 1).getKey("/Limits").getArrayItem(1));
192 } 191 }
193 auto limits = QPDFObjectHandle::newArray(); 192 auto limits = QPDFObjectHandle::newArray();
194 n1.replaceKey("/Limits", limits); 193 n1.replaceKey("/Limits", limits);
195 - limits.appendItem(k1.getArrayItem(0).getKey("/Limits").getArrayItem(0))  
196 - .appendItem(  
197 - k1.getArrayItem(NITEMS - 1).getKey("/Limits").getArrayItem(1)); 194 + limits.appendItem(k1.getArrayItem(0).getKey("/Limits").getArrayItem(0));
  195 + limits.appendItem(
  196 + k1.getArrayItem(NITEMS - 1).getKey("/Limits").getArrayItem(1));
198 } 197 }
199 198
200 QPDFNameTreeObjectHelper nh(n0, q); 199 QPDFNameTreeObjectHelper nh(n0, q);
manual/release-notes.rst
@@ -98,12 +98,9 @@ For a detailed list of changes, please see the file @@ -98,12 +98,9 @@ For a detailed list of changes, please see the file
98 98
99 - Library Enhancements 99 - Library Enhancements
100 100
101 - - Support for more fluent programming with ``QPDFObjectHandle``.  
102 - The methods ``insertItem``, ``appendItem``, ``eraseItem``,  
103 - ``replaceKey``, and ``removeKey`` all return a reference to the  
104 - object being modified. New methods ``insertItemAndGet``,  
105 - ``appendItemAndGet``, ``eraseItemAndGet``, ``replaceKeyAndGet``,  
106 - and ``removeKeyAndGet`` return the newly added or removed object. 101 + - New methods ``insertItemAndGet``, ``appendItemAndGet``,
  102 + ``eraseItemAndGet``, ``replaceKeyAndGet``, and
  103 + ``removeKeyAndGet`` return the newly added or removed object.
107 104
108 - Add new ``Pipeline`` methods to reduce the amount of casting that is 105 - Add new ``Pipeline`` methods to reduce the amount of casting that is
109 needed: 106 needed:
qpdf/pdf_from_scratch.cc
@@ -60,14 +60,15 @@ runtest(int n) @@ -60,14 +60,15 @@ runtest(int n)
60 rfont.replaceKey("/F1", font); 60 rfont.replaceKey("/F1", font);
61 61
62 QPDFObjectHandle resources = QPDFObjectHandle::newDictionary(); 62 QPDFObjectHandle resources = QPDFObjectHandle::newDictionary();
63 - resources.replaceKey("/ProcSet", procset).replaceKey("/Font", rfont); 63 + resources.replaceKey("/ProcSet", procset);
  64 + resources.replaceKey("/Font", rfont);
64 65
65 QPDFObjectHandle page = 66 QPDFObjectHandle page =
66 pdf.makeIndirectObject(QPDFObjectHandle::newDictionary()); 67 pdf.makeIndirectObject(QPDFObjectHandle::newDictionary());
67 - page.replaceKey("/Type", newName("/Page"))  
68 - .replaceKey("/MediaBox", mediabox)  
69 - .replaceKey("/Contents", contents)  
70 - .replaceKey("/Resources", resources); 68 + page.replaceKey("/Type", newName("/Page"));
  69 + page.replaceKey("/MediaBox", mediabox);
  70 + page.replaceKey("/Contents", contents);
  71 + page.replaceKey("/Resources", resources);
71 72
72 QPDFPageDocumentHelper(pdf).addPage(page, true); 73 QPDFPageDocumentHelper(pdf).addPage(page, true);
73 74
qpdf/test_driver.cc
@@ -525,7 +525,8 @@ test_9(QPDF&amp; pdf, char const* arg2) @@ -525,7 +525,8 @@ test_9(QPDF&amp; pdf, char const* arg2)
525 "data for other stream\n", 525 "data for other stream\n",
526 QPDFObjectHandle::newNull(), 526 QPDFObjectHandle::newNull(),
527 QPDFObjectHandle::newNull()); 527 QPDFObjectHandle::newNull());
528 - root.replaceKey("/QStream", qstream).replaceKey("/RStream", rstream); 528 + root.replaceKey("/QStream", qstream);
  529 + root.replaceKey("/RStream", rstream);
529 QPDFWriter w(pdf, "a.pdf"); 530 QPDFWriter w(pdf, "a.pdf");
530 w.setStaticID(true); 531 w.setStaticID(true);
531 w.setStreamDataMode(qpdf_s_preserve); 532 w.setStreamDataMode(qpdf_s_preserve);
@@ -895,12 +896,15 @@ test_24(QPDF&amp; pdf, char const* arg2) @@ -895,12 +896,15 @@ test_24(QPDF&amp; pdf, char const* arg2)
895 QPDFObjectHandle res1 = QPDFObjectHandle::newReserved(&pdf); 896 QPDFObjectHandle res1 = QPDFObjectHandle::newReserved(&pdf);
896 QPDFObjectHandle res2 = QPDFObjectHandle::newReserved(&pdf); 897 QPDFObjectHandle res2 = QPDFObjectHandle::newReserved(&pdf);
897 QPDFObjectHandle trailer = pdf.getTrailer(); 898 QPDFObjectHandle trailer = pdf.getTrailer();
898 - trailer.replaceKey("Array1", res1).replaceKey("Array2", res2); 899 + trailer.replaceKey("Array1", res1);
  900 + trailer.replaceKey("Array2", res2);
899 901
900 QPDFObjectHandle array1 = QPDFObjectHandle::newArray(); 902 QPDFObjectHandle array1 = QPDFObjectHandle::newArray();
901 QPDFObjectHandle array2 = QPDFObjectHandle::newArray(); 903 QPDFObjectHandle array2 = QPDFObjectHandle::newArray();
902 - array1.appendItem(res2).appendItem(QPDFObjectHandle::newInteger(1));  
903 - array2.appendItem(res1).appendItem(QPDFObjectHandle::newInteger(2)); 904 + array1.appendItem(res2);
  905 + array1.appendItem(QPDFObjectHandle::newInteger(1));
  906 + array2.appendItem(res1);
  907 + array2.appendItem(QPDFObjectHandle::newInteger(2));
904 // Make sure trying to ask questions about a reserved object 908 // Make sure trying to ask questions about a reserved object
905 // doesn't break it. 909 // doesn't break it.
906 if (res1.isArray()) { 910 if (res1.isArray()) {
@@ -1065,14 +1069,13 @@ test_27(QPDF&amp; pdf, char const* arg2) @@ -1065,14 +1069,13 @@ test_27(QPDF&amp; pdf, char const* arg2)
1065 dh.addPage(O3.getKey("/OtherPage"), false); 1069 dh.addPage(O3.getKey("/OtherPage"), false);
1066 dh.addPage(O3, false); 1070 dh.addPage(O3, false);
1067 QPDFObjectHandle s2 = QPDFObjectHandle::newStream(&oldpdf, "potato\n"); 1071 QPDFObjectHandle s2 = QPDFObjectHandle::newStream(&oldpdf, "potato\n");
1068 - pdf.getTrailer()  
1069 - .replaceKey("/QTest", pdf.copyForeignObject(qtest))  
1070 - .replaceKey("/QTest2", QPDFObjectHandle::newArray());  
1071 - pdf.getTrailer()  
1072 - .getKey("/QTest2")  
1073 - .appendItem(pdf.copyForeignObject(s1))  
1074 - .appendItem(pdf.copyForeignObject(s2))  
1075 - .appendItem(pdf.copyForeignObject(s3)); 1072 + auto trailer = pdf.getTrailer();
  1073 + trailer.replaceKey("/QTest", pdf.copyForeignObject(qtest));
  1074 + auto qtest2 =
  1075 + trailer.replaceKeyAndGet("/QTest2", QPDFObjectHandle::newArray());
  1076 + qtest2.appendItem(pdf.copyForeignObject(s1));
  1077 + qtest2.appendItem(pdf.copyForeignObject(s2));
  1078 + qtest2.appendItem(pdf.copyForeignObject(s3));
1076 } 1079 }
1077 1080
1078 QPDFWriter w(pdf, "a.pdf"); 1081 QPDFWriter w(pdf, "a.pdf");
@@ -2035,12 +2038,6 @@ test_55(QPDF&amp; pdf, char const* arg2) @@ -2035,12 +2038,6 @@ test_55(QPDF&amp; pdf, char const* arg2)
2035 QPDFPageDocumentHelper(pdf).getAllPages(); 2038 QPDFPageDocumentHelper(pdf).getAllPages();
2036 QPDFObjectHandle qtest = QPDFObjectHandle::newArray(); 2039 QPDFObjectHandle qtest = QPDFObjectHandle::newArray();
2037 for (auto& ph: pages) { 2040 for (auto& ph: pages) {
2038 - // Note: using fluent appendItem causes a test failure with  
2039 - // MSVC 19.31.31107, which appears to evaluate the argument to  
2040 - // the second appendItem before the first. Since these  
2041 - // arguments have the side effect of creating objects, the  
2042 - // object numbers end up being different even though the  
2043 - // resulting file is semantically correct.  
2044 qtest.appendItem(ph.getFormXObjectForPage()); 2041 qtest.appendItem(ph.getFormXObjectForPage());
2045 qtest.appendItem(ph.getFormXObjectForPage(false)); 2042 qtest.appendItem(ph.getFormXObjectForPage(false));
2046 } 2043 }
@@ -2196,10 +2193,10 @@ test_60(QPDF&amp; pdf, char const* arg2) @@ -2196,10 +2193,10 @@ test_60(QPDF&amp; pdf, char const* arg2)
2196 2193
2197 // The only differences between /QTest and /QTest3 should be 2194 // The only differences between /QTest and /QTest3 should be
2198 // the direct objects merged from r2. 2195 // the direct objects merged from r2.
2199 - pdf.getTrailer()  
2200 - .replaceKey("/QTest1", r1)  
2201 - .replaceKey("/QTest2", r2)  
2202 - .replaceKey("/QTest3", r3); 2196 + auto trailer = pdf.getTrailer();
  2197 + trailer.replaceKey("/QTest1", r1);
  2198 + trailer.replaceKey("/QTest2", r2);
  2199 + trailer.replaceKey("/QTest3", r3);
2203 QPDFWriter w(pdf, "a.pdf"); 2200 QPDFWriter w(pdf, "a.pdf");
2204 w.setQDFMode(true); 2201 w.setQDFMode(true);
2205 w.setStaticID(true); 2202 w.setStaticID(true);
@@ -2259,9 +2256,9 @@ test_62(QPDF&amp; pdf, char const* arg2) @@ -2259,9 +2256,9 @@ test_62(QPDF&amp; pdf, char const* arg2)
2259 long long q2 = QIntC::to_longlong(q2_l); 2256 long long q2 = QIntC::to_longlong(q2_l);
2260 unsigned int q3_i = UINT_MAX; 2257 unsigned int q3_i = UINT_MAX;
2261 long long q3 = QIntC::to_longlong(q3_i); 2258 long long q3 = QIntC::to_longlong(q3_i);
2262 - t.replaceKey("/Q1", QPDFObjectHandle::newInteger(q1))  
2263 - .replaceKey("/Q2", QPDFObjectHandle::newInteger(q2))  
2264 - .replaceKey("/Q3", QPDFObjectHandle::newInteger(q3)); 2259 + t.replaceKey("/Q1", QPDFObjectHandle::newInteger(q1));
  2260 + t.replaceKey("/Q2", QPDFObjectHandle::newInteger(q2));
  2261 + t.replaceKey("/Q3", QPDFObjectHandle::newInteger(q3));
2265 assert_compare_numbers(q1, t.getKey("/Q1").getIntValue()); 2262 assert_compare_numbers(q1, t.getKey("/Q1").getIntValue());
2266 assert_compare_numbers(q1_l, t.getKey("/Q1").getUIntValue()); 2263 assert_compare_numbers(q1_l, t.getKey("/Q1").getUIntValue());
2267 assert_compare_numbers(INT_MAX, t.getKey("/Q1").getIntValueAsInt()); 2264 assert_compare_numbers(INT_MAX, t.getKey("/Q1").getIntValueAsInt());
@@ -3120,17 +3117,16 @@ test_87(QPDF&amp; pdf, char const* arg2) @@ -3120,17 +3117,16 @@ test_87(QPDF&amp; pdf, char const* arg2)
3120 static void 3117 static void
3121 test_88(QPDF& pdf, char const* arg2) 3118 test_88(QPDF& pdf, char const* arg2)
3122 { 3119 {
3123 - // Exercise fluent QPDFObjectHandle mutators and similar methods  
3124 - // added for qpdf 11.  
3125 - auto dict = QPDFObjectHandle::newDictionary()  
3126 - .replaceKey("/One", QPDFObjectHandle::newInteger(1))  
3127 - .replaceKey("/Two", QPDFObjectHandle::newInteger(2));  
3128 - dict.replaceKeyAndGet("/Three", QPDFObjectHandle::newArray())  
3129 - .appendItem("(a)"_qpdf)  
3130 - .appendItem("(b)"_qpdf)  
3131 - .appendItemAndGet(QPDFObjectHandle::newDictionary())  
3132 - .replaceKey("/Z", "/Y"_qpdf)  
3133 - .replaceKey("/X", "/W"_qpdf); 3120 + // Exercise mutate and get methods added for qpdf 11.
  3121 + auto dict = QPDFObjectHandle::newDictionary();
  3122 + dict.replaceKey("/One", QPDFObjectHandle::newInteger(1));
  3123 + dict.replaceKey("/Two", QPDFObjectHandle::newInteger(2));
  3124 + auto three = dict.replaceKeyAndGet("/Three", QPDFObjectHandle::newArray());
  3125 + three.appendItem("(a)"_qpdf);
  3126 + three.appendItem("(b)"_qpdf);
  3127 + auto newdict = three.appendItemAndGet(QPDFObjectHandle::newDictionary());
  3128 + newdict.replaceKey("/Z", "/Y"_qpdf);
  3129 + newdict.replaceKey("/X", "/W"_qpdf);
3134 assert(dict.unparse() == R"( 3130 assert(dict.unparse() == R"(
3135 << 3131 <<
3136 /One 1 3132 /One 1
@@ -3138,14 +3134,15 @@ test_88(QPDF&amp; pdf, char const* arg2) @@ -3138,14 +3134,15 @@ test_88(QPDF&amp; pdf, char const* arg2)
3138 /Three [ (a) (b) << /Z /Y /X /W >> ] 3134 /Three [ (a) (b) << /Z /Y /X /W >> ]
3139 >> 3135 >>
3140 )"_qpdf.unparse()); 3136 )"_qpdf.unparse());
3141 - auto arr = dict.getKey("/Three")  
3142 - .insertItem(0, QPDFObjectHandle::newString("0"))  
3143 - .insertItem(0, QPDFObjectHandle::newString("00")); 3137 + auto arr = dict.getKey("/Three");
  3138 + arr.insertItem(0, QPDFObjectHandle::newString("0"));
  3139 + arr.insertItem(0, QPDFObjectHandle::newString("00"));
3144 assert( 3140 assert(
3145 arr.unparse() == 3141 arr.unparse() ==
3146 "[ (00) (0) (a) (b) << /Z /Y /X /W >> ]"_qpdf.unparse()); 3142 "[ (00) (0) (a) (b) << /Z /Y /X /W >> ]"_qpdf.unparse());
3147 auto new_dict = arr.insertItemAndGet(1, "<< /P /Q /R /S >>"_qpdf); 3143 auto new_dict = arr.insertItemAndGet(1, "<< /P /Q /R /S >>"_qpdf);
3148 - arr.eraseItem(2).eraseItem(0); 3144 + arr.eraseItem(2);
  3145 + arr.eraseItem(0);
3149 assert( 3146 assert(
3150 arr.unparse() == 3147 arr.unparse() ==
3151 "[ << /P /Q /R /S >> (a) (b) << /Z /Y /X /W >> ]"_qpdf.unparse()); 3148 "[ << /P /Q /R /S >> (a) (b) << /Z /Y /X /W >> ]"_qpdf.unparse());
@@ -3154,7 +3151,8 @@ test_88(QPDF&amp; pdf, char const* arg2) @@ -3154,7 +3151,8 @@ test_88(QPDF&amp; pdf, char const* arg2)
3154 // always been this way, and there is code that relies on this 3151 // always been this way, and there is code that relies on this
3155 // behavior. Maybe it would be different if I could start over 3152 // behavior. Maybe it would be different if I could start over
3156 // again... 3153 // again...
3157 - new_dict.removeKey("/R").replaceKey("/T", "/U"_qpdf); 3154 + new_dict.removeKey("/R");
  3155 + new_dict.replaceKey("/T", "/U"_qpdf);
3158 assert( 3156 assert(
3159 arr.unparse() == 3157 arr.unparse() ==
3160 "[ << /P /Q /T /U >> (a) (b) << /Z /Y /X /W >> ]"_qpdf.unparse()); 3158 "[ << /P /Q /T /U >> (a) (b) << /Z /Y /X /W >> ]"_qpdf.unparse());
qpdf/test_large_file.cc
@@ -187,37 +187,37 @@ create_pdf(char const* filename) @@ -187,37 +187,37 @@ create_pdf(char const* filename)
187 187
188 QPDFObjectHandle font = 188 QPDFObjectHandle font =
189 pdf.makeIndirectObject(QPDFObjectHandle::newDictionary()); 189 pdf.makeIndirectObject(QPDFObjectHandle::newDictionary());
190 - font.replaceKey("/Type", newName("/Font"))  
191 - .replaceKey("/Subtype", newName("/Type1"))  
192 - .replaceKey("/Name", newName("/F1"))  
193 - .replaceKey("/BaseFont", newName("/Helvetica"))  
194 - .replaceKey("/Encoding", newName("/WinAnsiEncoding")); 190 + font.replaceKey("/Type", newName("/Font"));
  191 + font.replaceKey("/Subtype", newName("/Type1"));
  192 + font.replaceKey("/Name", newName("/F1"));
  193 + font.replaceKey("/BaseFont", newName("/Helvetica"));
  194 + font.replaceKey("/Encoding", newName("/WinAnsiEncoding"));
195 195
196 QPDFObjectHandle procset = 196 QPDFObjectHandle procset =
197 pdf.makeIndirectObject(QPDFObjectHandle::newArray()); 197 pdf.makeIndirectObject(QPDFObjectHandle::newArray());
198 - procset.appendItem(newName("/PDF"))  
199 - .appendItem(newName("/Text"))  
200 - .appendItem(newName("/ImageC")); 198 + procset.appendItem(newName("/PDF"));
  199 + procset.appendItem(newName("/Text"));
  200 + procset.appendItem(newName("/ImageC"));
201 201
202 QPDFObjectHandle rfont = QPDFObjectHandle::newDictionary(); 202 QPDFObjectHandle rfont = QPDFObjectHandle::newDictionary();
203 rfont.replaceKey("/F1", font); 203 rfont.replaceKey("/F1", font);
204 204
205 QPDFObjectHandle mediabox = QPDFObjectHandle::newArray(); 205 QPDFObjectHandle mediabox = QPDFObjectHandle::newArray();
206 - mediabox.appendItem(newInteger(0))  
207 - .appendItem(newInteger(0))  
208 - .appendItem(newInteger(612))  
209 - .appendItem(newInteger(792)); 206 + mediabox.appendItem(newInteger(0));
  207 + mediabox.appendItem(newInteger(0));
  208 + mediabox.appendItem(newInteger(612));
  209 + mediabox.appendItem(newInteger(792));
210 210
211 QPDFPageDocumentHelper dh(pdf); 211 QPDFPageDocumentHelper dh(pdf);
212 for (size_t pageno = 1; pageno <= npages; ++pageno) { 212 for (size_t pageno = 1; pageno <= npages; ++pageno) {
213 QPDFObjectHandle image = QPDFObjectHandle::newStream(&pdf); 213 QPDFObjectHandle image = QPDFObjectHandle::newStream(&pdf);
214 QPDFObjectHandle image_dict = image.getDict(); 214 QPDFObjectHandle image_dict = image.getDict();
215 - image_dict.replaceKey("/Type", newName("/XObject"))  
216 - .replaceKey("/Subtype", newName("/Image"))  
217 - .replaceKey("/ColorSpace", newName("/DeviceGray"))  
218 - .replaceKey("/BitsPerComponent", newInteger(8))  
219 - .replaceKey("/Width", newInteger(width))  
220 - .replaceKey("/Height", newInteger(height)); 215 + image_dict.replaceKey("/Type", newName("/XObject"));
  216 + image_dict.replaceKey("/Subtype", newName("/Image"));
  217 + image_dict.replaceKey("/ColorSpace", newName("/DeviceGray"));
  218 + image_dict.replaceKey("/BitsPerComponent", newInteger(8));
  219 + image_dict.replaceKey("/Width", newInteger(width));
  220 + image_dict.replaceKey("/Height", newInteger(height));
221 ImageProvider* p = new ImageProvider(pageno); 221 ImageProvider* p = new ImageProvider(pageno);
222 std::shared_ptr<QPDFObjectHandle::StreamDataProvider> provider(p); 222 std::shared_ptr<QPDFObjectHandle::StreamDataProvider> provider(p);
223 image.replaceStreamData( 223 image.replaceStreamData(
@@ -227,18 +227,18 @@ create_pdf(char const* filename) @@ -227,18 +227,18 @@ create_pdf(char const* filename)
227 xobject.replaceKey("/Im1", image); 227 xobject.replaceKey("/Im1", image);
228 228
229 QPDFObjectHandle resources = QPDFObjectHandle::newDictionary(); 229 QPDFObjectHandle resources = QPDFObjectHandle::newDictionary();
230 - resources.replaceKey("/ProcSet", procset)  
231 - .replaceKey("/Font", rfont)  
232 - .replaceKey("/XObject", xobject); 230 + resources.replaceKey("/ProcSet", procset);
  231 + resources.replaceKey("/Font", rfont);
  232 + resources.replaceKey("/XObject", xobject);
233 233
234 QPDFObjectHandle contents = create_page_contents(pdf, pageno); 234 QPDFObjectHandle contents = create_page_contents(pdf, pageno);
235 235
236 QPDFObjectHandle page = 236 QPDFObjectHandle page =
237 pdf.makeIndirectObject(QPDFObjectHandle::newDictionary()); 237 pdf.makeIndirectObject(QPDFObjectHandle::newDictionary());
238 - page.replaceKey("/Type", newName("/Page"))  
239 - .replaceKey("/MediaBox", mediabox)  
240 - .replaceKey("/Contents", contents)  
241 - .replaceKey("/Resources", resources); 238 + page.replaceKey("/Type", newName("/Page"));
  239 + page.replaceKey("/MediaBox", mediabox);
  240 + page.replaceKey("/Contents", contents);
  241 + page.replaceKey("/Resources", resources);
242 242
243 dh.addPage(page, false); 243 dh.addPage(page, false);
244 } 244 }