Skip to content

Commit 12c5a52

Browse files
committed
[RELEASE] iText pdfSweep 4.0.3
2 parents 06c461b + df6e0ae commit 12c5a52

39 files changed

+576
-77
lines changed

doxyfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ DOXYFILE_ENCODING = UTF-8
3232
# title of most generated pages and in a few other places.
3333
# The default value is: My Project.
3434

35-
PROJECT_NAME = "pdfSweep 4.0.2 API"
35+
PROJECT_NAME = "pdfSweep 4.0.3 API"
3636

3737
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
3838
# could be handy for archiving the generated documentation or if some version
@@ -485,7 +485,7 @@ EXTRACT_PRIV_VIRTUAL = NO
485485
# scope will be included in the documentation.
486486
# The default value is: NO.
487487

488-
EXTRACT_PACKAGE = NO
488+
EXTRACT_PACKAGE = YES
489489

490490
# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
491491
# included in the documentation.

itext.tests/itext.cleanup.tests/Properties/AssemblyInfo.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515

1616
[assembly: Guid("647c862e-d837-4901-8e7b-68f5f8bf8f34")]
1717

18-
[assembly: AssemblyVersion("4.0.2.0")]
19-
[assembly: AssemblyFileVersion("4.0.2.0")]
20-
[assembly: AssemblyInformationalVersion("4.0.2")]
18+
[assembly: AssemblyVersion("4.0.3.0")]
19+
[assembly: AssemblyFileVersion("4.0.3.0")]
20+
[assembly: AssemblyInformationalVersion("4.0.3")]
2121

2222
[assembly: NUnit.Framework.Timeout(300000)]

itext.tests/itext.cleanup.tests/itext.cleanup.tests.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@
3939
</ItemGroup>
4040
<ItemGroup>
4141
<ProjectReference Include="..\..\..\itextcore\itext\itext.io\itext.io.csproj" Condition="Exists('..\..\..\itextcore\itext\itext.io\itext.io.csproj')" />
42-
<PackageReference Include="itext" Version="8.0.3" Condition="!Exists('..\..\..\itextcore\itext\itext.io\itext.io.csproj')" />
42+
<PackageReference Include="itext" Version="8.0.5" Condition="!Exists('..\..\..\itextcore\itext\itext.io\itext.io.csproj')" />
4343
<ProjectReference Include="..\..\..\itextcore\itext\itext.kernel\itext.kernel.csproj" Condition="Exists('..\..\..\itextcore\itext\itext.kernel\itext.kernel.csproj')" />
4444
<ProjectReference Include="..\..\..\itextcore\itext\itext.pdftest\itext.pdftest.csproj" Condition="Exists('..\..\..\itextcore\itext\itext.pdftest\itext.pdftest.csproj')" />
45-
<PackageReference Include="itext.pdftest" Version="8.0.3" Condition="!Exists('..\..\..\itextcore\itext\itext.pdftest\itext.pdftest.csproj')" />
45+
<PackageReference Include="itext.pdftest" Version="8.0.5" Condition="!Exists('..\..\..\itextcore\itext\itext.pdftest\itext.pdftest.csproj')" />
4646
<ProjectReference Include="..\..\..\itextcore\itext\itext.bouncy-castle-adapter\itext.bouncy-castle-adapter.csproj" Condition="Exists('..\..\..\itextcore\itext\itext.bouncy-castle-adapter\itext.bouncy-castle-adapter.csproj')" />
47-
<PackageReference Include="itext.bouncy-castle-adapter" Version="8.0.3" Condition="!Exists('..\..\..\itextcore\itext\itext.bouncy-castle-adapter\itext.bouncy-castle-adapter.csproj')" />
47+
<PackageReference Include="itext.bouncy-castle-adapter" Version="8.0.5" Condition="!Exists('..\..\..\itextcore\itext\itext.bouncy-castle-adapter\itext.bouncy-castle-adapter.csproj')" />
4848

4949
<ProjectReference Include="..\..\itext\itext.cleanup\itext.cleanup.csproj" />
5050
</ItemGroup>

itext.tests/itext.cleanup.tests/itext/pdfcleanup/BigDocumentAutoCleanUpTest.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ private void CompareResults(String cmp, String output, String targetDir, String
158158
}
159159
}
160160

161+
//\cond DO_NOT_DOCUMENT
161162
/*
162163
* color matching text redaction
163164
*/
@@ -180,7 +181,9 @@ public virtual Color GetFillColor() {
180181
return fillColor;
181182
}
182183
}
184+
//\endcond
183185

186+
//\cond DO_NOT_DOCUMENT
184187
internal class CustomLocationExtractionStrategy : RegexBasedLocationExtractionStrategy, ICleanupStrategy {
185188
private String regex;
186189

@@ -217,4 +220,5 @@ public virtual ICleanupStrategy Reset() {
217220
return new iText.PdfCleanup.CustomLocationExtractionStrategy(regex);
218221
}
219222
}
223+
//\endcond
220224
}

itext.tests/itext.cleanup.tests/itext/pdfcleanup/CleanUpImageUtilTest.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,8 @@ public class CleanUpImageUtilTest : ExtendedITextTest {
3838
public virtual void CleanUpImageNullImageBytesTest() {
3939
IList<Rectangle> areasToBeCleaned = new List<Rectangle>();
4040
areasToBeCleaned.Add(new Rectangle(100, 100));
41-
NUnit.Framework.Assert.That(() => {
42-
CleanUpImageUtil.CleanUpImage(null, areasToBeCleaned);
43-
}
44-
, NUnit.Framework.Throws.InstanceOf<Exception>())
45-
;
41+
NUnit.Framework.Assert.Catch(typeof(Exception), () => CleanUpImageUtil.CleanUpImage(null, areasToBeCleaned
42+
));
4643
}
4744

4845
[NUnit.Framework.Test]

itext.tests/itext.cleanup.tests/itext/pdfcleanup/CleanUpInvalidPdfTest.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public static void Before() {
4343
[NUnit.Framework.Ignore("DEVSIX-3608: this test currently throws StackOverflowError, which cannot be caught in .NET"
4444
)]
4545
public virtual void CleanCircularReferencesInResourcesTest() {
46-
NUnit.Framework.Assert.That(() => {
46+
NUnit.Framework.Assert.Catch(typeof(OutOfMemoryException), () => {
4747
String input = inputPath + "circularReferencesInResources.pdf";
4848
PdfDocument pdfDocument = new PdfDocument(new PdfReader(input), new PdfWriter(new MemoryStream()));
4949
IList<iText.PdfCleanup.PdfCleanUpLocation> cleanUpLocations = new List<iText.PdfCleanup.PdfCleanUpLocation
@@ -53,8 +53,7 @@ public virtual void CleanCircularReferencesInResourcesTest() {
5353
PdfCleaner.CleanUp(pdfDocument, cleanUpLocations);
5454
pdfDocument.Close();
5555
}
56-
, NUnit.Framework.Throws.InstanceOf<OutOfMemoryException>())
57-
;
56+
);
5857
}
5958
}
6059
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/*
2+
This file is part of the iText (R) project.
3+
Copyright (c) 1998-2024 Apryse Group NV
4+
Authors: Apryse Software.
5+
6+
This program is offered under a commercial and under the AGPL license.
7+
For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below.
8+
9+
AGPL licensing:
10+
This program is free software: you can redistribute it and/or modify
11+
it under the terms of the GNU Affero General Public License as published by
12+
the Free Software Foundation, either version 3 of the License, or
13+
(at your option) any later version.
14+
15+
This program is distributed in the hope that it will be useful,
16+
but WITHOUT ANY WARRANTY; without even the implied warranty of
17+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18+
GNU Affero General Public License for more details.
19+
20+
You should have received a copy of the GNU Affero General Public License
21+
along with this program. If not, see <https://www.gnu.org/licenses/>.
22+
*/
23+
using System;
24+
using iText.PdfCleanup.Exceptions;
25+
using iText.Test;
26+
27+
namespace iText.PdfCleanup {
28+
[NUnit.Framework.Category("UnitTest")]
29+
public class CleanUpPropertiesUnitTest : ExtendedITextTest {
30+
[NUnit.Framework.Test]
31+
public virtual void NePropsAspectRatioReturnsNull() {
32+
CleanUpProperties properties = new CleanUpProperties();
33+
NUnit.Framework.Assert.IsNull(properties.GetOverlapRatio());
34+
}
35+
36+
[NUnit.Framework.Test]
37+
public virtual void SetAspectRatioWithValue0IsOk() {
38+
CleanUpProperties properties = new CleanUpProperties();
39+
Exception e = NUnit.Framework.Assert.Catch(typeof(ArgumentException), () => properties.SetOverlapRatio(0d)
40+
);
41+
NUnit.Framework.Assert.AreEqual(CleanupExceptionMessageConstant.OVERLAP_RATIO_SHOULD_BE_IN_RANGE, e.Message
42+
);
43+
}
44+
45+
[NUnit.Framework.Test]
46+
public virtual void SetAspectRatioWithValue1IsOk() {
47+
CleanUpProperties properties = new CleanUpProperties();
48+
properties.SetOverlapRatio(1.0);
49+
NUnit.Framework.Assert.AreEqual(1.0, properties.GetOverlapRatio());
50+
}
51+
52+
[NUnit.Framework.Test]
53+
public virtual void SetAspectRatioWithValueGreaterThan1ThrowsException() {
54+
CleanUpProperties properties = new CleanUpProperties();
55+
Exception e = NUnit.Framework.Assert.Catch(typeof(ArgumentException), () => properties.SetOverlapRatio(1.1
56+
));
57+
NUnit.Framework.Assert.AreEqual(CleanupExceptionMessageConstant.OVERLAP_RATIO_SHOULD_BE_IN_RANGE, e.Message
58+
);
59+
}
60+
61+
[NUnit.Framework.Test]
62+
public virtual void SetAspectRatioWithValueLessThan0ThrowsException() {
63+
CleanUpProperties properties = new CleanUpProperties();
64+
Exception e = NUnit.Framework.Assert.Catch(typeof(ArgumentException), () => properties.SetOverlapRatio(-0.1
65+
));
66+
NUnit.Framework.Assert.AreEqual(CleanupExceptionMessageConstant.OVERLAP_RATIO_SHOULD_BE_IN_RANGE, e.Message
67+
);
68+
}
69+
70+
[NUnit.Framework.Test]
71+
public virtual void SetAspectRatioWithValue0_5IsOk() {
72+
CleanUpProperties properties = new CleanUpProperties();
73+
properties.SetOverlapRatio(0.5);
74+
NUnit.Framework.Assert.AreEqual(0.5, properties.GetOverlapRatio());
75+
}
76+
77+
[NUnit.Framework.Test]
78+
public virtual void SettingAspectRatioToNullIsOk() {
79+
CleanUpProperties properties = new CleanUpProperties();
80+
properties.SetOverlapRatio(0.5);
81+
properties.SetOverlapRatio(null);
82+
NUnit.Framework.Assert.IsNull(properties.GetOverlapRatio());
83+
}
84+
}
85+
}
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
/*
2+
This file is part of the iText (R) project.
3+
Copyright (c) 1998-2024 Apryse Group NV
4+
Authors: Apryse Software.
5+
6+
This program is offered under a commercial and under the AGPL license.
7+
For commercial licensing, contact us at https://itextpdf.com/sales. For AGPL licensing, see below.
8+
9+
AGPL licensing:
10+
This program is free software: you can redistribute it and/or modify
11+
it under the terms of the GNU Affero General Public License as published by
12+
the Free Software Foundation, either version 3 of the License, or
13+
(at your option) any later version.
14+
15+
This program is distributed in the hope that it will be useful,
16+
but WITHOUT ANY WARRANTY; without even the implied warranty of
17+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18+
GNU Affero General Public License for more details.
19+
20+
You should have received a copy of the GNU Affero General Public License
21+
along with this program. If not, see <https://www.gnu.org/licenses/>.
22+
*/
23+
using System;
24+
using System.Collections.Generic;
25+
using iText.Kernel.Colors;
26+
using iText.Kernel.Geom;
27+
using iText.Kernel.Pdf;
28+
using iText.Kernel.Utils;
29+
using iText.Test;
30+
31+
namespace iText.PdfCleanup {
32+
[NUnit.Framework.Category("IntegrationTest")]
33+
public class OverlapRatioTest : ExtendedITextTest {
34+
private static readonly String inputPath = iText.Test.TestUtil.GetParentProjectDirectory(NUnit.Framework.TestContext
35+
.CurrentContext.TestDirectory) + "/resources/itext/pdfcleanup/OverlapRatioTest/";
36+
37+
private static readonly String outputPath = NUnit.Framework.TestContext.CurrentContext.TestDirectory + "/test/itext/pdfcleanup/OverlapRatioTest/";
38+
39+
[NUnit.Framework.OneTimeSetUp]
40+
public static void Before() {
41+
CreateOrClearDestinationFolder(outputPath);
42+
}
43+
44+
private static readonly double[][] coordinates = new double[][] {
45+
//Areas with small line spacing
46+
new double[] { 1, 149, 700, 63.75, 10.75 }, new double[] { 1, 149, 640, 63.75, 10.75 }, new double[] { 1,
47+
149, 520, 163.75, 50.75 },
48+
//Areas with big line spacing
49+
new double[] { 1, 149, 374, 63.75, 10.75 }, new double[] { 1, 149, 310, 63.75, 10.75 }, new double[] { 1,
50+
149, 120, 163.75, 50.75 } };
51+
52+
[NUnit.Framework.Test]
53+
public virtual void ExtractionWithoutSettingOverlapRatio() {
54+
String inputFile = inputPath + "redact_aspect_ratio_simple.pdf";
55+
String targetFile = outputPath + "wo_redact_aspect_ratio_simple_redact.pdf";
56+
String cmpFile = inputPath + "cmp_wo_redact_aspect_ratio_simple.pdf";
57+
PdfDocument pdfDoc = new PdfDocument(new PdfReader(inputFile), new PdfWriter(targetFile));
58+
CleanUpProperties properties = new CleanUpProperties();
59+
PdfCleaner.CleanUp(pdfDoc, ConvertCleanupLocations(), properties);
60+
pdfDoc.Close();
61+
CompareTool cmpTool = new CompareTool();
62+
String errorMessage = cmpTool.CompareByContent(targetFile, cmpFile, outputPath, "diff_");
63+
NUnit.Framework.Assert.IsNull(errorMessage);
64+
}
65+
66+
[NUnit.Framework.Test]
67+
public virtual void ExtractionWithSettingOverlapRatio() {
68+
String inputFile = inputPath + "redact_aspect_ratio_simple.pdf";
69+
String targetFile = outputPath + "redact_aspect_ratio_simple_redact.pdf";
70+
String cmpFile = inputPath + "cmp_redact_aspect_ratio_simple.pdf";
71+
PdfDocument pdfDoc = new PdfDocument(new PdfReader(inputFile), new PdfWriter(targetFile));
72+
CleanUpProperties properties = new CleanUpProperties();
73+
properties.SetOverlapRatio(0.35);
74+
PdfCleaner.CleanUp(pdfDoc, ConvertCleanupLocations(), properties);
75+
pdfDoc.Close();
76+
CompareTool cmpTool = new CompareTool();
77+
String errorMessage = cmpTool.CompareByContent(targetFile, cmpFile, outputPath, "diff_");
78+
NUnit.Framework.Assert.IsNull(errorMessage);
79+
}
80+
81+
[NUnit.Framework.Test]
82+
public virtual void ExtractionWithSettingOverlapRatioCloseTo0() {
83+
//In this test we expect it to behave as normal that everything that gets touched by the redaction \
84+
//area should be redacted.
85+
String inputFile = inputPath + "redact_aspect_ratio_simple.pdf";
86+
String targetFile = outputPath + "redact_aspect_ratio_0_simple_redact.pdf";
87+
String cmpFile = inputPath + "cmp_redact_aspect_ratio_0_simple.pdf";
88+
PdfDocument pdfDoc = new PdfDocument(new PdfReader(inputFile), new PdfWriter(targetFile));
89+
CleanUpProperties properties = new CleanUpProperties();
90+
properties.SetOverlapRatio(0.0001);
91+
PdfCleaner.CleanUp(pdfDoc, ConvertCleanupLocations(), properties);
92+
pdfDoc.Close();
93+
CompareTool cmpTool = new CompareTool();
94+
String errorMessage = cmpTool.CompareByContent(targetFile, cmpFile, outputPath, "diff_");
95+
NUnit.Framework.Assert.IsNull(errorMessage);
96+
}
97+
98+
[NUnit.Framework.Test]
99+
public virtual void ExtractionWithSettingOverlapRatio1() {
100+
//In this sample we expect nothing to be redacted because of none of the items actually overlaps all of it.
101+
String inputFile = inputPath + "redact_aspect_ratio_simple.pdf";
102+
String targetFile = outputPath + "redact_aspect_ratio_1_simple_redact.pdf";
103+
String cmpFile = inputPath + "cmp_redact_aspect_ratio_1_simple.pdf";
104+
PdfDocument pdfDoc = new PdfDocument(new PdfReader(inputFile), new PdfWriter(targetFile));
105+
CleanUpProperties properties = new CleanUpProperties();
106+
properties.SetOverlapRatio(1d);
107+
IList<iText.PdfCleanup.PdfCleanUpLocation> cleanUpLocations = new List<iText.PdfCleanup.PdfCleanUpLocation
108+
>();
109+
// convertCleanupLocations();
110+
cleanUpLocations.Add(new iText.PdfCleanup.PdfCleanUpLocation(1, new Rectangle(20, 690, 263.75f, 40), ColorConstants
111+
.YELLOW));
112+
PdfCleaner.CleanUp(pdfDoc, cleanUpLocations, properties);
113+
pdfDoc.Close();
114+
CompareTool cmpTool = new CompareTool();
115+
String errorMessage = cmpTool.CompareByContent(targetFile, cmpFile, outputPath, "diff_");
116+
NUnit.Framework.Assert.IsNull(errorMessage);
117+
}
118+
119+
private static IList<iText.PdfCleanup.PdfCleanUpLocation> ConvertCleanupLocations() {
120+
IList<iText.PdfCleanup.PdfCleanUpLocation> cleanUpLocations = new List<iText.PdfCleanup.PdfCleanUpLocation
121+
>();
122+
foreach (double[] coord in coordinates) {
123+
int pageNumber = (int)coord[0];
124+
double x = coord[1];
125+
double y = coord[2];
126+
double width = coord[3];
127+
double height = coord[4];
128+
iText.PdfCleanup.PdfCleanUpLocation location = new iText.PdfCleanup.PdfCleanUpLocation(pageNumber, new Rectangle
129+
((float)x, (float)y, (float)width, (float)height), ColorConstants.BLACK);
130+
cleanUpLocations.Add(location);
131+
}
132+
return cleanUpLocations;
133+
}
134+
}
135+
}

itext.tests/itext.cleanup.tests/itext/pdfcleanup/PdfCleanUpFilterUnitTest.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2020
You should have received a copy of the GNU Affero General Public License
2121
along with this program. If not, see <https://www.gnu.org/licenses/>.
2222
*/
23+
using System.Collections.Generic;
2324
using iText.Kernel.Geom;
2425
using iText.Test;
2526

@@ -32,7 +33,8 @@ public virtual void CheckIfRectanglesIntersect_completelyCoveredBasic() {
3233
(70, 80) };
3334
Point[] intersecting = new Point[] { new Point(50, 50), new Point(100, 50), new Point(100, 100), new Point
3435
(50, 100) };
35-
NUnit.Framework.Assert.IsTrue(PdfCleanUpFilter.CheckIfRectanglesIntersect(intersectSubject, intersecting));
36+
PdfCleanUpFilter filter = new PdfCleanUpFilter(new List<Rectangle>(), new CleanUpProperties());
37+
NUnit.Framework.Assert.IsTrue(filter.CheckIfRectanglesIntersect(intersectSubject, intersecting));
3638
}
3739

3840
[NUnit.Framework.Test]
@@ -41,7 +43,8 @@ public virtual void CheckIfRectanglesIntersect_completelyCoveredDegenerateWidth(
4143
(70, 80) };
4244
Point[] intersecting = new Point[] { new Point(50, 50), new Point(100, 50), new Point(100, 100), new Point
4345
(50, 100) };
44-
NUnit.Framework.Assert.IsTrue(PdfCleanUpFilter.CheckIfRectanglesIntersect(intersectSubject, intersecting));
46+
NUnit.Framework.Assert.IsTrue(new PdfCleanUpFilter(new List<Rectangle>(), new CleanUpProperties()).CheckIfRectanglesIntersect
47+
(intersectSubject, intersecting));
4548
}
4649

4750
[NUnit.Framework.Test]
@@ -50,7 +53,8 @@ public virtual void CheckIfRectanglesIntersect_completelyCoveredDegenerateHeight
5053
(70, 70) };
5154
Point[] intersecting = new Point[] { new Point(50, 50), new Point(100, 50), new Point(100, 100), new Point
5255
(50, 100) };
53-
NUnit.Framework.Assert.IsTrue(PdfCleanUpFilter.CheckIfRectanglesIntersect(intersectSubject, intersecting));
56+
NUnit.Framework.Assert.IsTrue(new PdfCleanUpFilter(new List<Rectangle>(), new CleanUpProperties()).CheckIfRectanglesIntersect
57+
(intersectSubject, intersecting));
5458
}
5559

5660
[NUnit.Framework.Test]
@@ -59,7 +63,8 @@ public virtual void CheckIfRectanglesIntersect_completelyCoveredDegeneratePoint(
5963
(70, 70) };
6064
Point[] intersecting = new Point[] { new Point(50, 50), new Point(100, 50), new Point(100, 100), new Point
6165
(50, 100) };
62-
NUnit.Framework.Assert.IsTrue(PdfCleanUpFilter.CheckIfRectanglesIntersect(intersectSubject, intersecting));
66+
NUnit.Framework.Assert.IsTrue(new PdfCleanUpFilter(new List<Rectangle>(), new CleanUpProperties()).CheckIfRectanglesIntersect
67+
(intersectSubject, intersecting));
6368
}
6469
}
6570
}

itext.tests/itext.cleanup.tests/itext/pdfcleanup/PdfCleanUpProcessorUnitTest.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,11 @@ public _PdfCleanUpProcessor_161(LinkedList<CanvasTag> tags, IList<Rectangle> bas
158158
this.tags = tags;
159159
}
160160

161+
//\cond DO_NOT_DOCUMENT
161162
internal override PdfCanvas GetCanvas() {
162163
return new _PdfCanvas_164(tags, new PdfStream(), null, null);
163164
}
165+
//\endcond
164166

165167
private sealed class _PdfCanvas_164 : PdfCanvas {
166168
public _PdfCanvas_164(LinkedList<CanvasTag> tags, PdfStream baseArg1, PdfResources baseArg2, PdfDocument baseArg3
@@ -170,7 +172,9 @@ public _PdfCanvas_164(LinkedList<CanvasTag> tags, PdfStream baseArg1, PdfResourc
170172
this.tagsToCompare = tags;
171173
}
172174

175+
//\cond DO_NOT_DOCUMENT
173176
internal readonly LinkedList<CanvasTag> tagsToCompare;
177+
//\endcond
174178

175179
public override PdfCanvas OpenTag(CanvasTag tag) {
176180
NUnit.Framework.Assert.AreEqual(this.tagsToCompare.JRemoveFirst(), tag);

0 commit comments

Comments
 (0)