@@ -136,5 +136,49 @@ public virtual void AnnotationAppearanceTest() {
136136 pdfDocument . Close ( ) ;
137137 NUnit . Framework . Assert . AreEqual ( 1 , objs . Count ) ;
138138 }
139+
140+ [ NUnit . Framework . Test ]
141+ public virtual void SetModifiedFlagTest ( ) {
142+ TestSetModified ( false ) ;
143+ }
144+
145+ [ NUnit . Framework . Test ]
146+ public virtual void SetModifiedFlagAppendModeTest ( ) {
147+ TestSetModified ( true ) ;
148+ }
149+
150+ private static void TestSetModified ( bool isAppendMode ) {
151+ String [ ] expectedKeys = new String [ ] { "new_key1" , "new_key2" , "new_key3" } ;
152+ MemoryStream sourceFile = CreateDocumentInMemory ( ) ;
153+ MemoryStream modifiedFile = new MemoryStream ( ) ;
154+ PdfReader reader = new PdfReader ( new MemoryStream ( sourceFile . ToArray ( ) ) ) ;
155+ PdfDocument pdfDoc = isAppendMode ? new PdfDocument ( reader , new PdfWriter ( modifiedFile ) , new StampingProperties
156+ ( ) . UseAppendMode ( ) ) : new PdfDocument ( reader , new PdfWriter ( modifiedFile ) ) ;
157+ PdfNameTree nameTree = pdfDoc . GetCatalog ( ) . GetNameTree ( PdfName . Dests ) ;
158+ IDictionary < String , PdfObject > names = nameTree . GetNames ( ) ;
159+ List < String > keys = new List < String > ( names . Keys ) ;
160+ for ( int i = 0 ; i < keys . Count ; i ++ ) {
161+ names . Put ( expectedKeys [ i ] , names . Get ( keys [ i ] ) ) ;
162+ names . JRemove ( keys [ i ] ) ;
163+ }
164+ nameTree . SetModified ( ) ;
165+ pdfDoc . Close ( ) ;
166+ reader = new PdfReader ( new MemoryStream ( modifiedFile . ToArray ( ) ) ) ;
167+ pdfDoc = new PdfDocument ( reader ) ;
168+ nameTree = pdfDoc . GetCatalog ( ) . GetNameTree ( PdfName . Dests ) ;
169+ ICollection < String > actualKeys = nameTree . GetNames ( ) . Keys ;
170+ NUnit . Framework . Assert . AreEqual ( expectedKeys , actualKeys . ToArray ( ) ) ;
171+ }
172+
173+ private static MemoryStream CreateDocumentInMemory ( ) {
174+ MemoryStream boas = new MemoryStream ( ) ;
175+ PdfDocument pdfDoc = new PdfDocument ( new PdfWriter ( boas ) ) ;
176+ pdfDoc . AddNewPage ( ) ;
177+ pdfDoc . GetCatalog ( ) . GetNameTree ( PdfName . Dests ) . AddEntry ( "key1" , new PdfArray ( new float [ ] { 0 , 0 , 0 , 0 } ) ) ;
178+ pdfDoc . GetCatalog ( ) . GetNameTree ( PdfName . Dests ) . AddEntry ( "key2" , new PdfArray ( new float [ ] { 1 , 1 , 1 , 1 } ) ) ;
179+ pdfDoc . GetCatalog ( ) . GetNameTree ( PdfName . Dests ) . AddEntry ( "key3" , new PdfArray ( new float [ ] { 2 , 2 , 2 , 2 } ) ) ;
180+ pdfDoc . Close ( ) ;
181+ return boas ;
182+ }
139183 }
140184}
0 commit comments