Clone a GoDocument

We have a requirement to clone a document, massage the “cloned” document, and print the “cloned” document.
How do we go about making a replica of the original GoDocument with all the settings of GoObject intact (CanPrint for example)
The replica would have to be completely separate from the original GoDocument because we will massage it quite a bit and we don’t want to modify the source GoDocument.

That seems like a good feature to have, but I think you are the first person to have ever mentioned it.
I haven’t tested this, but you could define a method to do something like:
public virtual GoDocument CopyDocument(GoDocument olddoc) {
GoDocument newdoc = new GoDocument();
// copy properties
newdoc.UserFlags = olddoc.UserFlags;
. . . and copy all the other properties you care about, such as
all the Allow… properties, the PaperColor, et al. . . .
// copy layers
newdoc.MergeLayersFrom(olddoc);
if (olddoc.LinksLayer != null) {
newdoc.LinksLayer = newdoc.Layers.Find(olddoc.LinksLayer.Identifier);
}
// copy objects
newdoc.CopyFromCollection(olddoc);
newdoc.IsModified = false;
return newdoc;
}