diff --git a/src/UglyToad.Pdf.Tests/Integration/Documents/Multiple Page - from Mortality Statistics.pdf b/src/UglyToad.Pdf.Tests/Integration/Documents/Multiple Page - from Mortality Statistics.pdf
new file mode 100644
index 00000000..3751ea8c
Binary files /dev/null and b/src/UglyToad.Pdf.Tests/Integration/Documents/Multiple Page - from Mortality Statistics.pdf differ
diff --git a/src/UglyToad.Pdf.Tests/Integration/MultiplePageMortalityStatistics.cs b/src/UglyToad.Pdf.Tests/Integration/MultiplePageMortalityStatistics.cs
new file mode 100644
index 00000000..e7223409
--- /dev/null
+++ b/src/UglyToad.Pdf.Tests/Integration/MultiplePageMortalityStatistics.cs
@@ -0,0 +1,36 @@
+namespace UglyToad.Pdf.Tests.Integration
+{
+ using System;
+ using System.IO;
+ using Xunit;
+
+ public class MultiplePageMortalityStatistics
+ {
+ private static string GetFilename()
+ {
+ var documentFolder = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..", "..", "..", "Integration", "Documents"));
+
+ return Path.Combine(documentFolder, "Multiple Page - from Mortality Statistics.pdf");
+ }
+
+ [Fact]
+ public void HasCorrectNumberOfPages()
+ {
+ var file = GetFilename();
+
+ using (var document = PdfDocument.Open(File.ReadAllBytes(file)))
+ {
+ Assert.Equal(6, document.NumberOfPages);
+ }
+ }
+
+ [Fact]
+ public void HasCorrectVersion()
+ {
+ using (var document = PdfDocument.Open(GetFilename()))
+ {
+ Assert.Equal(1.7m, document.Version);
+ }
+ }
+ }
+}
diff --git a/src/UglyToad.Pdf.Tests/UglyToad.Pdf.Tests.csproj b/src/UglyToad.Pdf.Tests/UglyToad.Pdf.Tests.csproj
index 0a38ce05..47c2014f 100644
--- a/src/UglyToad.Pdf.Tests/UglyToad.Pdf.Tests.csproj
+++ b/src/UglyToad.Pdf.Tests/UglyToad.Pdf.Tests.csproj
@@ -12,6 +12,7 @@
+
@@ -32,6 +33,9 @@
PreserveNewest
+
+ PreserveNewest
+
PreserveNewest
diff --git a/src/UglyToad.Pdf/Fonts/Parser/Handlers/Type0FontHandler.cs b/src/UglyToad.Pdf/Fonts/Parser/Handlers/Type0FontHandler.cs
index 9ebfc28a..6503f7c5 100644
--- a/src/UglyToad.Pdf/Fonts/Parser/Handlers/Type0FontHandler.cs
+++ b/src/UglyToad.Pdf/Fonts/Parser/Handlers/Type0FontHandler.cs
@@ -11,6 +11,7 @@
using IO;
using Parts;
using Pdf.Parser;
+ using Pdf.Parser.Parts;
internal class Type0FontHandler : IFontHandler
{
@@ -37,7 +38,7 @@
if (TryGetFirstDescendant(dictionary, out var descendantObject))
{
- var parsed = pdfObjectParser.Parse(descendantObject.ToIndirectReference(), reader, isLenientParsing);
+ var parsed = DirectObjectFinder.Find(descendantObject, pdfObjectParser, reader, isLenientParsing);
if (parsed is PdfDictionary descendantFontDictionary)
{
diff --git a/src/UglyToad.Pdf/Parser/Parts/DirectObjectFinder.cs b/src/UglyToad.Pdf/Parser/Parts/DirectObjectFinder.cs
new file mode 100644
index 00000000..753cc26b
--- /dev/null
+++ b/src/UglyToad.Pdf/Parser/Parts/DirectObjectFinder.cs
@@ -0,0 +1,32 @@
+namespace UglyToad.Pdf.Parser.Parts
+{
+ using System;
+ using Cos;
+ using IO;
+
+ internal static class DirectObjectFinder
+ {
+ public static CosBase Find(CosObject baseObject, IPdfObjectParser parser, IRandomAccessRead reader,
+ bool isLenientParsing) where T : CosBase
+ {
+ var result = parser.Parse(baseObject.ToIndirectReference(), reader, isLenientParsing);
+
+ if (result is T resultT)
+ {
+ return resultT;
+ }
+
+ if (result is CosObject obj)
+ {
+ return Find(obj, parser, reader, isLenientParsing);
+ }
+
+ if (result is COSArray arr && arr.Count == 1 && arr.get(0) is CosObject arrayObject)
+ {
+ return Find(arrayObject, parser, reader, isLenientParsing);
+ }
+
+ throw new InvalidOperationException($"Could not find the object {baseObject.ToIndirectReference()} with type {typeof(T).Name}.");
+ }
+ }
+}