diff --git a/src/UglyToad.PdfPig.Tests/Integration/GithubIssuesTests.cs b/src/UglyToad.PdfPig.Tests/Integration/GithubIssuesTests.cs index 13d825c2c..0942f718e 100644 --- a/src/UglyToad.PdfPig.Tests/Integration/GithubIssuesTests.cs +++ b/src/UglyToad.PdfPig.Tests/Integration/GithubIssuesTests.cs @@ -6,9 +6,29 @@ using PdfPig.Core; using PdfPig.Tokens; using SkiaSharp; + using UglyToad.PdfPig.AcroForms; + using UglyToad.PdfPig.AcroForms.Fields; public class GithubIssuesTests { + [Fact] + public void Issue1208() + { + string[] files = ["Input.visible.pdf", "Input.invisible.pdf"]; + + foreach (var file in files) + { + var path = IntegrationHelpers.GetSpecificTestDocumentPath(file); + + using (var document = PdfDocument.Open(path, new ParsingOptions() { UseLenientParsing = true })) + { + Assert.True(document.TryGetForm(out AcroForm form)); + Assert.Single(form.Fields); + Assert.Equal(AcroFieldType.Signature, form.Fields[0].FieldType); + } + } + } + [Fact] public void Revert_e11dc6b() { diff --git a/src/UglyToad.PdfPig.Tests/Integration/SpecificTestDocuments/Input.invisible.pdf b/src/UglyToad.PdfPig.Tests/Integration/SpecificTestDocuments/Input.invisible.pdf new file mode 100644 index 000000000..5d3998196 Binary files /dev/null and b/src/UglyToad.PdfPig.Tests/Integration/SpecificTestDocuments/Input.invisible.pdf differ diff --git a/src/UglyToad.PdfPig.Tests/Integration/SpecificTestDocuments/Input.visible.pdf b/src/UglyToad.PdfPig.Tests/Integration/SpecificTestDocuments/Input.visible.pdf new file mode 100644 index 000000000..f714166ef Binary files /dev/null and b/src/UglyToad.PdfPig.Tests/Integration/SpecificTestDocuments/Input.visible.pdf differ diff --git a/src/UglyToad.PdfPig/Parser/FileStructure/FirstPassParser.cs b/src/UglyToad.PdfPig/Parser/FileStructure/FirstPassParser.cs index a0b847e37..4553b8550 100644 --- a/src/UglyToad.PdfPig/Parser/FileStructure/FirstPassParser.cs +++ b/src/UglyToad.PdfPig/Parser/FileStructure/FirstPassParser.cs @@ -61,6 +61,9 @@ public static FirstPassResults Parse( } else { + /* Code below commented to fix issue #1208, while not failing test Issue874 + * The logic would need to be reviewed before re-enabling. + // If we didn't brute force then use the previous position for ordering. foreach (var obj in streamsAndTables) { @@ -81,6 +84,11 @@ public static FirstPassResults Parse( orderedXrefs.Add(obj); } } + */ + + orderedXrefs.AddRange( + streamsAndTables + .OrderBy(x => x.Offset)); } DictionaryToken? lastTrailer = null;