aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/qpdf/QPDF.hh21
-rw-r--r--manual/qpdf-manual.xml32
2 files changed, 34 insertions, 19 deletions
diff --git a/include/qpdf/QPDF.hh b/include/qpdf/QPDF.hh
index ad8503dc..58f6af6e 100644
--- a/include/qpdf/QPDF.hh
+++ b/include/qpdf/QPDF.hh
@@ -207,14 +207,19 @@ class QPDF
replaceReserved(QPDFObjectHandle reserved,
QPDFObjectHandle replacement);
- // Copy an object from another QPDF to this one. The return value
- // is an indirect reference to the copied object in this file.
- // This method is intended to be used to copy non-page objects and
- // will not copy page objects. To copy page objects, pass the
- // foreign page object directly to addPage (or addPageAt). If you
- // copy objects that contain references to pages, you should copy
- // the pages first using addPage(At). Otherwise references to the
- // pages that have not been copied will be replaced with nulls.
+ // Copy an object from another QPDF to this one. Please note that
+ // the QPDF object containing the object being copied must stick
+ // around because it is still used to retrieve any stream data
+ // referenced by the copied objects.
+ //
+ // The return value is an indirect reference to the copied object
+ // in this file. This method is intended to be used to copy
+ // non-page objects and will not copy page objects. To copy page
+ // objects, pass the foreign page object directly to addPage (or
+ // addPageAt). If you copy objects that contain references to
+ // pages, you should copy the pages first using addPage(At).
+ // Otherwise references to the pages that have not been copied
+ // will be replaced with nulls.
// When copying objects with this method, object structure will be
// preserved, so all indirectly referenced indirect objects will
diff --git a/manual/qpdf-manual.xml b/manual/qpdf-manual.xml
index 18abc013..4fde831a 100644
--- a/manual/qpdf-manual.xml
+++ b/manual/qpdf-manual.xml
@@ -1983,24 +1983,26 @@ outfile.pdf</option>
Version 3.0 of qpdf introduced the ability to copy objects into a
<classname>QPDF</classname> object from a different
<classname>QPDF</classname> object, which we refer to as
- <firstterm>foreign objects</firstterm>. This allows arbitrary
- merging of PDF files. The <command>qpdf</command> command-line
- tool provides limited support for basic page selection, including
- merging in pages from other files, but the library's API makes it
- possible to implement arbitrarily complex merging operations. The
- main method for copying foreign objects is
- <function>QPDF::copyForeignObject</function>. This takes an
+ <firstterm>foreign objects</firstterm>. This allows arbitrary
+ merging of PDF files. The &ldqo;from&rdqo;
+ <classname>QPDF</classname> object must remain valid after the
+ copy as discussed in the note below. The <command>qpdf</command>
+ command-line tool provides limited support for basic page
+ selection, including merging in pages from other files, but the
+ library's API makes it possible to implement arbitrarily complex
+ merging operations. The main method for copying foreign objects is
+ <function>QPDF::copyForeignObject</function>. This takes an
indirect object from another <classname>QPDF</classname> and
copies it recursively into this object while preserving all object
- structure, including circular references. This means you can add
- a direct object that you create from scratch to a
+ structure, including circular references. This means you can add a
+ direct object that you create from scratch to a
<classname>QPDF</classname> object with
<function>QPDF::makeIndirectObject</function>, and you can add an
indirect object from another file with
- <function>QPDF::copyForeignObject</function>. The fact that
+ <function>QPDF::copyForeignObject</function>. The fact that
<function>QPDF::makeIndirectObject</function> does not
automatically detect a foreign object and copy it is an explicit
- design decision. Copying a foreign object seems like a
+ design decision. Copying a foreign object seems like a
sufficiently significant thing to do that it should be done
explicitly.
</para>
@@ -2012,6 +2014,14 @@ outfile.pdf</option>
automatically distinguishes between indirect objects in the
current file, foreign objects, and direct objects.
</para>
+ <para>
+ Please note: when you copy objects from one
+ <classname>QPDF</classname> to another, the source
+ <classname>QPDF</classname> object must remain valid until you
+ have finished with the destination object. This is because the
+ original object is still used to retrieve any referenced stream
+ data from the copied object.
+ </para>
</sect1>
<sect1 id="ref.rewriting">
<title>Writing PDF Files</title>