diff --git a/src/UglyToad.PdfPig.Tests/Parser/Parts/FileHeaderParserTests.cs b/src/UglyToad.PdfPig.Tests/Parser/Parts/FileHeaderParserTests.cs index 374b8396..6a50d0c6 100644 --- a/src/UglyToad.PdfPig.Tests/Parser/Parts/FileHeaderParserTests.cs +++ b/src/UglyToad.PdfPig.Tests/Parser/Parts/FileHeaderParserTests.cs @@ -51,7 +51,7 @@ var result = FileHeaderParser.Parse(scanner.scanner, scanner.bytes, false, log); Assert.Equal(1.2m, result.Version); - Assert.Equal(TestEnvironment.IsUnixPlatform ? 7 : 9, result.OffsetInFile); + Assert.Equal(TestEnvironment.IsSingleByteNewLine(input) ? 7 : 9, result.OffsetInFile); } [Fact] @@ -66,38 +66,42 @@ [Fact] public void HeaderPrecededByJunkNonLenientDoesNotThrow() - { - var scanner = StringBytesTestConverter.Scanner(@"one - %PDF-1.2"); + { + var input = @"one + %PDF-1.2"; + var scanner = StringBytesTestConverter.Scanner(input); var result = FileHeaderParser.Parse(scanner.scanner, scanner.bytes, false, log); Assert.Equal(1.2m, result.Version); - Assert.Equal(TestEnvironment.IsUnixPlatform ? 12 : 13, result.OffsetInFile); + Assert.Equal(TestEnvironment.IsSingleByteNewLine(input) ? 12 : 13, result.OffsetInFile); } [Fact] public void HeaderPrecededByJunkLenientReads() - { - var scanner = StringBytesTestConverter.Scanner(@"one - %PDF-1.7"); + { + var input = @"one + %PDF-1.7"; + var scanner = StringBytesTestConverter.Scanner(input); var result = FileHeaderParser.Parse(scanner.scanner, scanner.bytes, true, log); Assert.Equal(1.7m, result.Version); - Assert.Equal(TestEnvironment.IsUnixPlatform ? 12 : 13, result.OffsetInFile); + Assert.Equal(TestEnvironment.IsSingleByteNewLine(input) ? 12 : 13, result.OffsetInFile); } [Fact] public void HeaderPrecededByJunkDoesNotThrow() - { - var scanner = StringBytesTestConverter.Scanner(@"one two -three %PDF-1.6"); + { + var s = @"one two +three %PDF-1.6"; + + var scanner = StringBytesTestConverter.Scanner(s); var result = FileHeaderParser.Parse(scanner.scanner, scanner.bytes, true, log); Assert.Equal(1.6m, result.Version); - Assert.Equal(TestEnvironment.IsUnixPlatform ? 14 : 15, result.OffsetInFile); + Assert.Equal(TestEnvironment.IsSingleByteNewLine(s) ? 14 : 15, result.OffsetInFile); } [Fact] diff --git a/src/UglyToad.PdfPig.Tests/TestEnvironment.cs b/src/UglyToad.PdfPig.Tests/TestEnvironment.cs index abc44914..17545a27 100644 --- a/src/UglyToad.PdfPig.Tests/TestEnvironment.cs +++ b/src/UglyToad.PdfPig.Tests/TestEnvironment.cs @@ -4,6 +4,7 @@ public static class TestEnvironment { - public static readonly bool IsUnixPlatform = Environment.NewLine.Length == 1; + public static bool IsSingleByteNewLine(string s) => s.IndexOf('\r') < 0; + } } diff --git a/src/UglyToad.PdfPig/Content/Catalog.cs b/src/UglyToad.PdfPig/Content/Catalog.cs index 61906602..9bbdd71f 100644 --- a/src/UglyToad.PdfPig/Content/Catalog.cs +++ b/src/UglyToad.PdfPig/Content/Catalog.cs @@ -29,7 +29,12 @@ /// /// The page tree for this document containing all pages, page numbers and their dictionaries. /// - public PageTreeNode PageTree { get; } + public PageTreeNode PageTree { get; } + + /// + /// Number of discovered pages. + /// + public int? NumberOfDiscoveredPages => pagesByNumber?.Count; /// /// Create a new . diff --git a/src/UglyToad.PdfPig/Content/Pages.cs b/src/UglyToad.PdfPig/Content/Pages.cs index 8d25b2db..3bd55c09 100644 --- a/src/UglyToad.PdfPig/Content/Pages.cs +++ b/src/UglyToad.PdfPig/Content/Pages.cs @@ -21,11 +21,12 @@ this.pdfScanner = pdfScanner ?? throw new ArgumentNullException(nameof(pdfScanner)); Count = catalog.PagesDictionary.GetIntOrDefault(NameToken.Count); - var CountOfPagesByPagesTree = catalog.PageTree.Children.Count; - if (Count != CountOfPagesByPagesTree) + var CountOfPagesByPagesTree = catalog.PageTree.Children.Count; + var numberOfDiscoveredPages = catalog.NumberOfDiscoveredPages; + if (numberOfDiscoveredPages is null == false && Count != numberOfDiscoveredPages) { - //log.Warning($"Dicrionary Page Count {Count} different to discovered pages {CountOfPagesByPagesTree}. Using {CountOfPagesByPagesTree}."); - Count = CountOfPagesByPagesTree; + //log.Warning($"Dictionary Page Count {Count} different to discovered pages {numberOfDiscoveredPages}. Using {numberOfDiscoveredPages}."); + Count = numberOfDiscoveredPages.Value; } }