Commit 96eb96511557469d50bbd55d211ced16acc31e13

Authored by Jay Berkenbilt
1 parent 5039da0b

Use QPDFObjectHandle::getObjGen() where appropriate

In internal code and examples, replace calls to getObjectID() and
getGeneration() with calls to getObjGen() where possible.
examples/pdf-bookmarks.cc
... ... @@ -9,7 +9,7 @@ static char const* whoami = 0;
9 9 static enum { st_none, st_numbers, st_lines } style = st_none;
10 10 static bool show_open = false;
11 11 static bool show_targets = false;
12   -static std::map<int, int> page_map;
  12 +static std::map<QPDFObjGen, int> page_map;
13 13  
14 14 void usage()
15 15 {
... ... @@ -50,7 +50,7 @@ void generate_page_map(QPDF&amp; qpdf)
50 50 iter != pages.end(); ++iter)
51 51 {
52 52 QPDFObjectHandle& oh = *iter;
53   - page_map[oh.getObjectID()] = ++n;
  53 + page_map[oh.getObjGen()] = ++n;
54 54 }
55 55 }
56 56  
... ... @@ -121,10 +121,10 @@ void extract_bookmarks(QPDFObjectHandle outlines, std::vector&lt;int&gt;&amp; numbers)
121 121 if ((dest.isArray()) && (dest.getArrayNItems() > 0))
122 122 {
123 123 QPDFObjectHandle first = dest.getArrayItem(0);
124   - int object_id = first.getObjectID();
125   - if (page_map.count(object_id))
  124 + QPDFObjGen og = first.getObjGen();
  125 + if (page_map.count(og))
126 126 {
127   - target = QUtil::int_to_string(page_map[object_id]);
  127 + target = QUtil::int_to_string(page_map[og]);
128 128 }
129 129 }
130 130  
... ...
examples/pdf-invert-images.cc
... ... @@ -34,10 +34,10 @@ class ImageInverter: public QPDFObjectHandle::StreamDataProvider
34 34 virtual void provideStreamData(int objid, int generation,
35 35 Pipeline* pipeline);
36 36  
37   - // Map [obj][gen] = image object
38   - std::map<int, std::map<int, QPDFObjectHandle> > image_objects;
39   - // Map [obj][gen] = image data
40   - std::map<int, std::map<int, PointerHolder<Buffer> > > image_data;
  37 + // Map [og] = image object
  38 + std::map<QPDFObjGen, QPDFObjectHandle> image_objects;
  39 + // Map [og] = image data
  40 + std::map<QPDFObjGen, PointerHolder<Buffer> > image_data;
41 41 };
42 42  
43 43 void
... ... @@ -47,7 +47,8 @@ ImageInverter::provideStreamData(int objid, int generation,
47 47 // Use the object and generation number supplied to look up the
48 48 // image data. Then invert the image data and write the inverted
49 49 // data to the pipeline.
50   - PointerHolder<Buffer> data = this->image_data[objid][generation];
  50 + PointerHolder<Buffer> data =
  51 + this->image_data[QPDFObjGen(objid, generation)];
51 52 size_t size = data->getSize();
52 53 unsigned char* buf = data->getBuffer();
53 54 unsigned char ch;
... ... @@ -120,12 +121,11 @@ int main(int argc, char* argv[])
120 121 // Store information about the images based on the
121 122 // object and generation number. Recall that a single
122 123 // image object may be used more than once.
123   - int objid = image.getObjectID();
124   - int gen = image.getGeneration();
125   - if (inv->image_objects[objid].count(gen) == 0)
  124 + QPDFObjGen og = image.getObjGen();
  125 + if (inv->image_objects.count(og) == 0)
126 126 {
127   - inv->image_objects[objid][gen] = image;
128   - inv->image_data[objid][gen] = image.getStreamData();
  127 + inv->image_objects[og] = image;
  128 + inv->image_data[og] = image.getStreamData();
129 129  
130 130 // Register our stream data provider for this
131 131 // stream. Future calls to getStreamData or
... ...
include/qpdf/QPDF.hh
... ... @@ -159,6 +159,8 @@ class QPDF
159 159 // Retrieve an object by object ID and generation. Returns an
160 160 // indirect reference to it.
161 161 QPDF_DLL
  162 + QPDFObjectHandle getObjectByObjGen(QPDFObjGen const&);
  163 + QPDF_DLL
162 164 QPDFObjectHandle getObjectByID(int objid, int generation);
163 165  
164 166 // Replace the object with the given object id with the given
... ... @@ -175,6 +177,8 @@ class QPDF
175 177 // object. To replace a reserved object, call replaceReserved
176 178 // instead.
177 179 QPDF_DLL
  180 + void replaceObject(QPDFObjGen const& og, QPDFObjectHandle);
  181 + QPDF_DLL
178 182 void replaceObject(int objid, int generation, QPDFObjectHandle);
179 183  
180 184 // Swap two objects given by ID. Calling this method can have
... ... @@ -189,6 +193,8 @@ class QPDF
189 193 // to the swapped objects with new ones, possibly by calling
190 194 // getObjectByID.
191 195 QPDF_DLL
  196 + void swapObjects(QPDFObjGen const& og1, QPDFObjGen const& og2);
  197 + QPDF_DLL
192 198 void swapObjects(int objid1, int generation1,
193 199 int objid2, int generation2);
194 200  
... ... @@ -623,7 +629,7 @@ class QPDF
623 629 void getAllPagesInternal(QPDFObjectHandle cur_pages,
624 630 std::vector<QPDFObjectHandle>& result);
625 631 void insertPage(QPDFObjectHandle newpage, int pos);
626   - int findPage(int objid, int generation);
  632 + int findPage(QPDFObjGen const& og);
627 633 int findPage(QPDFObjectHandle& page);
628 634 void flattenPagesTree();
629 635 void insertPageobjToPage(QPDFObjectHandle const& obj, int pos,
... ...
include/qpdf/QPDFObjGen.hh
... ... @@ -23,6 +23,8 @@ class QPDFObjGen
23 23 QPDF_DLL
24 24 bool operator<(QPDFObjGen const&) const;
25 25 QPDF_DLL
  26 + bool operator==(QPDFObjGen const&) const;
  27 + QPDF_DLL
26 28 int getObj() const;
27 29 QPDF_DLL
28 30 int getGen() const;
... ...
libqpdf/QPDF.cc
... ... @@ -1574,12 +1574,24 @@ QPDF::makeIndirectObject(QPDFObjectHandle oh)
1574 1574 }
1575 1575  
1576 1576 QPDFObjectHandle
  1577 +QPDF::getObjectByObjGen(QPDFObjGen const& og)
  1578 +{
  1579 + return getObjectByID(og.getObj(), og.getGen());
  1580 +}
  1581 +
  1582 +QPDFObjectHandle
1577 1583 QPDF::getObjectByID(int objid, int generation)
1578 1584 {
1579 1585 return QPDFObjectHandle::Factory::newIndirect(this, objid, generation);
1580 1586 }
1581 1587  
1582 1588 void
  1589 +QPDF::replaceObject(QPDFObjGen const& og, QPDFObjectHandle oh)
  1590 +{
  1591 + replaceObject(og.getObj(), og.getGen(), oh);
  1592 +}
  1593 +
  1594 +void
1583 1595 QPDF::replaceObject(int objid, int generation, QPDFObjectHandle oh)
1584 1596 {
1585 1597 if (oh.isIndirect())
... ... @@ -1604,9 +1616,7 @@ QPDF::replaceReserved(QPDFObjectHandle reserved,
1604 1616 {
1605 1617 QTC::TC("qpdf", "QPDF replaceReserved");
1606 1618 reserved.assertReserved();
1607   - replaceObject(reserved.getObjectID(),
1608   - reserved.getGeneration(),
1609   - replacement);
  1619 + replaceObject(reserved.getObjGen(), replacement);
1610 1620 }
1611 1621  
1612 1622 QPDFObjectHandle
... ... @@ -1663,14 +1673,13 @@ QPDF::copyForeignObject(QPDFObjectHandle foreign, bool allow_page)
1663 1673 replaceForeignIndirectObjects(to_copy, obj_copier, true);
1664 1674 if (! to_copy.isStream())
1665 1675 {
1666   - QPDFObjGen og(to_copy.getObjectID(), to_copy.getGeneration());
  1676 + QPDFObjGen og(to_copy.getObjGen());
1667 1677 replaceReserved(obj_copier.object_map[og], copy);
1668 1678 }
1669 1679 }
1670 1680 obj_copier.to_copy.clear();
1671 1681  
1672   - return obj_copier.object_map[QPDFObjGen(foreign.getObjectID(),
1673   - foreign.getGeneration())];
  1682 + return obj_copier.object_map[foreign.getObjGen()];
1674 1683 }
1675 1684  
1676 1685 void
... ... @@ -1697,7 +1706,7 @@ QPDF::reserveObjects(QPDFObjectHandle foreign, ObjCopier&amp; obj_copier,
1697 1706  
1698 1707 if (foreign.isIndirect())
1699 1708 {
1700   - QPDFObjGen foreign_og(foreign.getObjectID(), foreign.getGeneration());
  1709 + QPDFObjGen foreign_og(foreign.getObjGen());
1701 1710 if (obj_copier.visiting.find(foreign_og) != obj_copier.visiting.end())
1702 1711 {
1703 1712 QTC::TC("qpdf", "QPDF loop reserving objects");
... ... @@ -1750,7 +1759,7 @@ QPDF::reserveObjects(QPDFObjectHandle foreign, ObjCopier&amp; obj_copier,
1750 1759  
1751 1760 if (foreign.isIndirect())
1752 1761 {
1753   - QPDFObjGen foreign_og(foreign.getObjectID(), foreign.getGeneration());
  1762 + QPDFObjGen foreign_og(foreign.getObjGen());
1754 1763 obj_copier.visiting.erase(foreign_og);
1755 1764 }
1756 1765 }
... ... @@ -1763,7 +1772,7 @@ QPDF::replaceForeignIndirectObjects(
1763 1772 if ((! top) && foreign.isIndirect())
1764 1773 {
1765 1774 QTC::TC("qpdf", "QPDF replace indirect");
1766   - QPDFObjGen foreign_og(foreign.getObjectID(), foreign.getGeneration());
  1775 + QPDFObjGen foreign_og(foreign.getObjGen());
1767 1776 std::map<QPDFObjGen, QPDFObjectHandle>::iterator mapping =
1768 1777 obj_copier.object_map.find(foreign_og);
1769 1778 if (mapping == obj_copier.object_map.end())
... ... @@ -1807,7 +1816,7 @@ QPDF::replaceForeignIndirectObjects(
1807 1816 else if (foreign.isStream())
1808 1817 {
1809 1818 QTC::TC("qpdf", "QPDF replace stream");
1810   - QPDFObjGen foreign_og(foreign.getObjectID(), foreign.getGeneration());
  1819 + QPDFObjGen foreign_og(foreign.getObjGen());
1811 1820 result = obj_copier.object_map[foreign_og];
1812 1821 result.assertStream();
1813 1822 QPDFObjectHandle dict = result.getDict();
... ... @@ -1826,7 +1835,7 @@ QPDF::replaceForeignIndirectObjects(
1826 1835 this->copied_stream_data_provider = new CopiedStreamDataProvider();
1827 1836 this->copied_streams = this->copied_stream_data_provider;
1828 1837 }
1829   - QPDFObjGen local_og(result.getObjectID(), result.getGeneration());
  1838 + QPDFObjGen local_og(result.getObjGen());
1830 1839 this->copied_stream_data_provider->registerForeignStream(
1831 1840 local_og, foreign);
1832 1841 result.replaceStreamData(this->copied_streams,
... ... @@ -1849,6 +1858,12 @@ QPDF::replaceForeignIndirectObjects(
1849 1858 }
1850 1859  
1851 1860 void
  1861 +QPDF::swapObjects(QPDFObjGen const& og1, QPDFObjGen const& og2)
  1862 +{
  1863 + swapObjects(og1.getObj(), og1.getGen(), og2.getObj(), og2.getGen());
  1864 +}
  1865 +
  1866 +void
1852 1867 QPDF::swapObjects(int objid1, int generation1, int objid2, int generation2)
1853 1868 {
1854 1869 // Force objects to be loaded into cache; then swap them in the
... ... @@ -2101,8 +2116,7 @@ QPDF::findAttachmentStreams()
2101 2116 item.getKey("/EF").getKey("/F").isStream())
2102 2117 {
2103 2118 QPDFObjectHandle stream = item.getKey("/EF").getKey("/F");
2104   - this->attachment_streams.insert(
2105   - QPDFObjGen(stream.getObjectID(), stream.getGeneration()));
  2119 + this->attachment_streams.insert(stream.getObjGen());
2106 2120 }
2107 2121 }
2108 2122 }
... ...
libqpdf/QPDFObjGen.cc
... ... @@ -13,6 +13,12 @@ QPDFObjGen::operator&lt;(QPDFObjGen const&amp; rhs) const
13 13 ((this->obj == rhs.obj) && (this->gen < rhs.gen)));
14 14 }
15 15  
  16 +bool
  17 +QPDFObjGen::operator==(QPDFObjGen const& rhs) const
  18 +{
  19 + return ((this->obj == rhs.obj) && (this->gen == rhs.gen));
  20 +}
  21 +
16 22 int
17 23 QPDFObjGen::getObj() const
18 24 {
... ...
libqpdf/QPDF_linearization.cc
... ... @@ -336,9 +336,7 @@ QPDF::readHintStream(Pipeline&amp; pl, qpdf_offset_t offset, size_t length)
336 336 QTC::TC("qpdf", "QPDF hint table length indirect");
337 337 // Force resolution
338 338 (void) length_obj.getIntValue();
339   - ObjCache& oc = this->obj_cache
340   - [QPDFObjGen(length_obj.getObjectID(),
341   - length_obj.getGeneration())];
  339 + ObjCache& oc = this->obj_cache[length_obj.getObjGen()];
342 340 min_end_offset = oc.end_before_space;
343 341 max_end_offset = oc.end_after_space;
344 342 }
... ... @@ -499,7 +497,7 @@ QPDF::checkLinearizationInternal()
499 497 for (int i = 0; i < npages; ++i)
500 498 {
501 499 QPDFObjectHandle const& page = pages[i];
502   - QPDFObjGen og(page.getObjectID(), page.getGeneration());
  500 + QPDFObjGen og(page.getObjGen());
503 501 if (this->xref_table[og].getType() == 2)
504 502 {
505 503 errors.push_back("page dictionary for page " +
... ... @@ -582,7 +580,7 @@ QPDF::checkLinearizationInternal()
582 580 for (std::vector<QPDFObjectHandle>::iterator iter = this->part6.begin();
583 581 iter != this->part6.end(); ++iter)
584 582 {
585   - QPDFObjGen og((*iter).getObjectID(), (*iter).getGeneration());
  583 + QPDFObjGen og((*iter).getObjGen());
586 584 // All objects have to have been dereferenced to be classified.
587 585 assert(this->obj_cache.count(og) > 0);
588 586 ObjCache const& oc = this->obj_cache[og];
... ... @@ -740,7 +738,7 @@ QPDF::checkHPageOffset(std::list&lt;std::string&gt;&amp; errors,
740 738 unsigned int npages = pages.size();
741 739 int table_offset = adjusted_offset(
742 740 this->page_offset_hints.first_page_offset);
743   - QPDFObjGen first_page_og(pages[0].getObjectID(), pages[0].getGeneration());
  741 + QPDFObjGen first_page_og(pages[0].getObjGen());
744 742 assert(this->xref_table.count(first_page_og) > 0);
745 743 int offset = getLinearizationOffset(first_page_og);
746 744 if (table_offset != offset)
... ... @@ -750,8 +748,7 @@ QPDF::checkHPageOffset(std::list&lt;std::string&gt;&amp; errors,
750 748  
751 749 for (unsigned int pageno = 0; pageno < npages; ++pageno)
752 750 {
753   - QPDFObjGen page_og(pages[pageno].getObjectID(),
754   - pages[pageno].getGeneration());
  751 + QPDFObjGen page_og(pages[pageno].getObjGen());
755 752 int first_object = page_og.getObj();
756 753 assert(this->xref_table.count(page_og) > 0);
757 754 offset = getLinearizationOffset(page_og);
... ... @@ -961,7 +958,7 @@ QPDF::checkHOutlines(std::list&lt;std::string&gt;&amp; warnings)
961 958 {
962 959 // Check length and offset. Acrobat gets these wrong.
963 960 QPDFObjectHandle outlines = getRoot().getKey("/Outlines");
964   - QPDFObjGen og(outlines.getObjectID(), outlines.getGeneration());
  961 + QPDFObjGen og(outlines.getObjGen());
965 962 assert(this->xref_table.count(og) > 0);
966 963 int offset = getLinearizationOffset(og);
967 964 ObjUser ou(ObjUser::ou_root_key, "/Outlines");
... ... @@ -1466,7 +1463,7 @@ QPDF::calculateLinearizationData(std::map&lt;int, int&gt; const&amp; object_stream_data)
1466 1463 // will do the same.
1467 1464  
1468 1465 // First, place the actual first page object itself.
1469   - QPDFObjGen first_page_og(pages[0].getObjectID(), pages[0].getGeneration());
  1466 + QPDFObjGen first_page_og(pages[0].getObjGen());
1470 1467 if (! lc_first_page_private.count(first_page_og))
1471 1468 {
1472 1469 throw std::logic_error(
... ... @@ -1515,7 +1512,7 @@ QPDF::calculateLinearizationData(std::map&lt;int, int&gt; const&amp; object_stream_data)
1515 1512 {
1516 1513 // Place this page's page object
1517 1514  
1518   - QPDFObjGen page_og(pages[i].getObjectID(), pages[i].getGeneration());
  1515 + QPDFObjGen page_og(pages[i].getObjGen());
1519 1516 if (! lc_other_page_private.count(page_og))
1520 1517 {
1521 1518 throw std::logic_error(
... ... @@ -1598,7 +1595,7 @@ QPDF::calculateLinearizationData(std::map&lt;int, int&gt; const&amp; object_stream_data)
1598 1595 if (! thumb.isNull())
1599 1596 {
1600 1597 // Output the thumbnail itself
1601   - QPDFObjGen thumb_og(thumb.getObjectID(), thumb.getGeneration());
  1598 + QPDFObjGen thumb_og(thumb.getObjGen());
1602 1599 if (lc_thumbnail_private.count(thumb_og))
1603 1600 {
1604 1601 lc_thumbnail_private.erase(thumb_og);
... ... @@ -1753,7 +1750,7 @@ QPDF::pushOutlinesToPart(
1753 1750 return;
1754 1751 }
1755 1752 outlines = getUncompressedObject(outlines, object_stream_data);
1756   - QPDFObjGen outlines_og(outlines.getObjectID(), outlines.getGeneration());
  1753 + QPDFObjGen outlines_og(outlines.getObjGen());
1757 1754 QTC::TC("qpdf", "QPDF lin outlines in part",
1758 1755 ((&part == (&this->part6)) ? 0
1759 1756 : (&part == (&this->part9)) ? 1
... ...
libqpdf/QPDF_optimization.cc
... ... @@ -115,7 +115,7 @@ QPDF::optimize(std::map&lt;int, int&gt; const&amp; object_stream_data,
115 115 }
116 116  
117 117 ObjUser root_ou = ObjUser(ObjUser::ou_root);
118   - QPDFObjGen root_og = QPDFObjGen(root.getObjectID(), root.getGeneration());
  118 + QPDFObjGen root_og = QPDFObjGen(root.getObjGen());
119 119 obj_user_to_objects[root_ou].insert(root_og);
120 120 object_to_obj_users[root_og].insert(root_ou);
121 121  
... ... @@ -338,7 +338,7 @@ QPDF::updateObjectMapsInternal(ObjUser const&amp; ou, QPDFObjectHandle oh,
338 338  
339 339 if (oh.isIndirect())
340 340 {
341   - QPDFObjGen og(oh.getObjectID(), oh.getGeneration());
  341 + QPDFObjGen og(oh.getObjGen());
342 342 if (visited.count(og))
343 343 {
344 344 QTC::TC("qpdf", "QPDF opt loop detected");
... ...
libqpdf/QPDF_pages.cc
... ... @@ -127,7 +127,7 @@ void
127 127 QPDF::insertPageobjToPage(QPDFObjectHandle const& obj, int pos,
128 128 bool check_duplicate)
129 129 {
130   - QPDFObjGen og(obj.getObjectID(), obj.getGeneration());
  130 + QPDFObjGen og(obj.getObjGen());
131 131 if (check_duplicate)
132 132 {
133 133 if (! this->pageobj_to_pages_pos.insert(std::make_pair(og, pos)).second)
... ... @@ -214,8 +214,7 @@ QPDF::removePage(QPDFObjectHandle page)
214 214 pages.replaceKey("/Count", QPDFObjectHandle::newInteger(npages));
215 215 this->all_pages.erase(this->all_pages.begin() + pos);
216 216 assert(this->all_pages.size() == static_cast<size_t>(npages));
217   - this->pageobj_to_pages_pos.erase(
218   - QPDFObjGen(page.getObjectID(), page.getGeneration()));
  217 + this->pageobj_to_pages_pos.erase(page.getObjGen());
219 218 assert(this->pageobj_to_pages_pos.size() == static_cast<size_t>(npages));
220 219 for (int i = pos; i < npages; ++i)
221 220 {
... ... @@ -253,18 +252,18 @@ int
253 252 QPDF::findPage(QPDFObjectHandle& page)
254 253 {
255 254 page.assertPageObject();
256   - return findPage(page.getObjectID(), page.getGeneration());
  255 + return findPage(page.getObjGen());
257 256 }
258 257  
259 258 int
260   -QPDF::findPage(int objid, int generation)
  259 +QPDF::findPage(QPDFObjGen const& og)
261 260 {
262 261 flattenPagesTree();
263 262 std::map<QPDFObjGen, int>::iterator it =
264   - this->pageobj_to_pages_pos.find(QPDFObjGen(objid, generation));
  263 + this->pageobj_to_pages_pos.find(og);
265 264 if (it == this->pageobj_to_pages_pos.end())
266 265 {
267   - setLastObjectDescription("page object", objid, generation);
  266 + setLastObjectDescription("page object", og.getObj(), og.getGen());
268 267 throw QPDFExc(qpdf_e_pages, this->file->getName(),
269 268 this->last_object_description, 0,
270 269 "page object not referenced in /Pages tree");
... ...
qpdf/qpdf.cc
... ... @@ -1621,8 +1621,7 @@ int main(int argc, char* argv[])
1621 1621 {
1622 1622 if (selected_from_orig.count(pageno) == 0)
1623 1623 {
1624   - pdf.replaceObject(orig_pages[pageno].getObjectID(),
1625   - orig_pages[pageno].getGeneration(),
  1624 + pdf.replaceObject(orig_pages[pageno].getObjGen(),
1626 1625 QPDFObjectHandle::newNull());
1627 1626 }
1628 1627 }
... ...
qpdf/test_driver.cc
... ... @@ -659,8 +659,7 @@ void runtest(int n, char const* filename1, char const* arg2)
659 659 " not called 4-page file");
660 660 }
661 661 // Swap pages 2 and 3
662   - pdf.swapObjects(pages[1].getObjectID(), pages[1].getGeneration(),
663   - pages[2].getObjectID(), pages[2].getGeneration());
  662 + pdf.swapObjects(pages[1].getObjGen(), pages[2].getObjGen());
664 663 // Replace object and swap objects
665 664 QPDFObjectHandle trailer = pdf.getTrailer();
666 665 QPDFObjectHandle qdict = trailer.getKey("/QDict");
... ... @@ -672,21 +671,18 @@ void runtest(int n, char const* filename1, char const* arg2)
672 671 try
673 672 {
674 673 // Do it wrong first...
675   - pdf.replaceObject(qdict.getObjectID(), qdict.getGeneration(),
676   - qdict);
  674 + pdf.replaceObject(qdict.getObjGen(), qdict);
677 675 }
678 676 catch (std::logic_error)
679 677 {
680 678 std::cout << "caught logic error as expected" << std::endl;
681 679 }
682   - pdf.replaceObject(qdict.getObjectID(), qdict.getGeneration(),
683   - new_dict);
  680 + pdf.replaceObject(qdict.getObjGen(), new_dict);
684 681 // Now qdict still points to the old dictionary
685 682 std::cout << "old dict: " << qdict.getKey("/Dict").getIntValue()
686 683 << std::endl;
687 684 // Swap dict and array
688   - pdf.swapObjects(qdict.getObjectID(), qdict.getGeneration(),
689   - qarray.getObjectID(), qarray.getGeneration());
  685 + pdf.swapObjects(qdict.getObjGen(), qarray.getObjGen());
690 686 // Now qarray will resolve to new object but qdict is still
691 687 // the old object
692 688 std::cout << "old dict: " << qdict.getKey("/Dict").getIntValue()
... ... @@ -694,7 +690,7 @@ void runtest(int n, char const* filename1, char const* arg2)
694 690 std::cout << "new dict: " << qarray.getKey("/NewDict").getIntValue()
695 691 << std::endl;
696 692 // Reread qdict, now pointing to an array
697   - qdict = pdf.getObjectByID(qdict.getObjectID(), qdict.getGeneration());
  693 + qdict = pdf.getObjectByObjGen(qdict.getObjGen());
698 694 std::cout << "swapped array: " << qdict.getArrayItem(0).getName()
699 695 << std::endl;
700 696  
... ... @@ -788,14 +784,14 @@ void runtest(int n, char const* filename1, char const* arg2)
788 784 pdf.addPage(new_pages[0], true);
789 785 checkPageContents(pages[0], "New page 1");
790 786 pdf.addPageAt(new_pages[1], true, pages[0]);
791   - assert(pages[0].getObjectID() == new_pages[1].getObjectID());
  787 + assert(pages[0].getObjGen() == new_pages[1].getObjGen());
792 788 pdf.addPageAt(new_pages[2], true, pages[5]);
793   - assert(pages[5].getObjectID() == new_pages[2].getObjectID());
  789 + assert(pages[5].getObjGen() == new_pages[2].getObjGen());
794 790 pdf.addPageAt(new_pages[3], false, pages[5]);
795   - assert(pages[6].getObjectID() == new_pages[3].getObjectID());
  791 + assert(pages[6].getObjGen() == new_pages[3].getObjGen());
796 792 assert(pages.size() == 11);
797 793 pdf.addPage(new_pages[4], false);
798   - assert(pages[11].getObjectID() == new_pages[4].getObjectID());
  794 + assert(pages[11].getObjGen() == new_pages[4].getObjGen());
799 795 pdf.addPageAt(new_pages[5], false, pages.back());
800 796 assert(pages.size() == 13);
801 797 checkPageContents(pages[0], "New page 0");
... ... @@ -835,7 +831,7 @@ void runtest(int n, char const* filename1, char const* arg2)
835 831 assert(all_pages.size() == 10);
836 832 pdf.updateAllPagesCache();
837 833 assert(all_pages.size() == 11);
838   - assert(all_pages.back().getObjectID() == page.getObjectID());
  834 + assert(all_pages.back().getObjGen() == page.getObjGen());
839 835  
840 836 QPDFWriter w(pdf, "a.pdf");
841 837 w.setStaticID(true);
... ... @@ -862,7 +858,7 @@ void runtest(int n, char const* filename1, char const* arg2)
862 858 pdf.removePage(page5);
863 859 pdf.addPage(page5, false);
864 860 assert(pages.size() == 10);
865   - assert(pages.back().getObjectID() == page5.getObjectID());
  861 + assert(pages.back().getObjGen() == page5.getObjGen());
866 862  
867 863 QPDFWriter w(pdf, "a.pdf");
868 864 w.setStaticID(true);
... ...