From 2effedd3c53a48e2928dc111096bac1766453bec Mon Sep 17 00:00:00 2001 From: Eliot Jones Date: Mon, 2 Mar 2020 16:07:36 +0000 Subject: [PATCH] add inheritable keys back into the copied pages node keys suchs as resources, mediabox, cropbox, etc can be inherited. we now copy them if they are present on the parent pages node. --- src/UglyToad.PdfPig/Writer/PdfMerger.cs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/UglyToad.PdfPig/Writer/PdfMerger.cs b/src/UglyToad.PdfPig/Writer/PdfMerger.cs index c198c9e1..8d6e04cc 100644 --- a/src/UglyToad.PdfPig/Writer/PdfMerger.cs +++ b/src/UglyToad.PdfPig/Writer/PdfMerger.cs @@ -234,13 +234,25 @@ pageReferences.Add(new IndirectReferenceToken(newEntry.Number)); } - var pagesDictionary = new DictionaryToken(new Dictionary + var newPagesNode = new Dictionary { { NameToken.Type, NameToken.Pages }, { NameToken.Kids, new ArrayToken(pageReferences) }, { NameToken.Count, new NumericToken(pageReferences.Count) }, { NameToken.Parent, treeParentReference } - }); + }; + + foreach (var pair in treeNode.NodeDictionary.Data) + { + if (IgnoreKeyForPagesNode(pair)) + { + continue; + } + + newPagesNode[NameToken.Create(pair.Key)] = CopyToken(pair.Value, tokenScanner); + } + + var pagesDictionary = new DictionaryToken(newPagesNode); return context.WriteObject(memory, pagesDictionary, currentNodeReserved); } @@ -342,6 +354,14 @@ stream.Write(bytes, 0, bytes.Length); stream.WriteNewLine(); } + + private static bool IgnoreKeyForPagesNode(KeyValuePair token) + { + return string.Equals(token.Key, NameToken.Type.Data, StringComparison.OrdinalIgnoreCase) + || string.Equals(token.Key, NameToken.Kids.Data, StringComparison.OrdinalIgnoreCase) + || string.Equals(token.Key, NameToken.Count.Data, StringComparison.OrdinalIgnoreCase) + || string.Equals(token.Key, NameToken.Parent.Data, StringComparison.OrdinalIgnoreCase); + } } } } \ No newline at end of file