mirror of
https://github.com/UglyToad/PdfPig.git
synced 2025-06-28 15:30:17 +08:00
allow indirect references in xref streams as an attempt to fix #457
This commit is contained in:
parent
559f3af5f3
commit
b5d90d1725
@ -1,11 +1,11 @@
|
|||||||
namespace UglyToad.PdfPig.Filters
|
namespace UglyToad.PdfPig.Filters
|
||||||
{
|
{
|
||||||
|
using Core;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Core;
|
|
||||||
using Tokens;
|
using Tokens;
|
||||||
using UglyToad.PdfPig.Util;
|
using Util;
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -269,7 +269,7 @@
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
xrefTablePart = crossReferenceStreamParser.Parse(objByteOffset, fromTableAtOffset, objectStream);
|
xrefTablePart = crossReferenceStreamParser.Parse(objByteOffset, fromTableAtOffset, objectStream, pdfScanner);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
using Core;
|
using Core;
|
||||||
using Filters;
|
using Filters;
|
||||||
using PdfPig.CrossReference;
|
using PdfPig.CrossReference;
|
||||||
|
using Tokenization.Scanner;
|
||||||
using Tokens;
|
using Tokens;
|
||||||
using Util;
|
using Util;
|
||||||
|
|
||||||
@ -19,9 +20,9 @@
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Parses through the unfiltered stream and populates the xrefTable HashMap.
|
/// Parses through the unfiltered stream and populates the xrefTable HashMap.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public CrossReferenceTablePart Parse(long streamOffset, long? fromTableAtOffset, StreamToken stream)
|
public CrossReferenceTablePart Parse(long streamOffset, long? fromTableAtOffset, StreamToken stream, IPdfTokenScanner pdfTokenScanner)
|
||||||
{
|
{
|
||||||
var decoded = stream.Decode(filterProvider);
|
var decoded = stream.DecodeWithLookup(filterProvider, pdfTokenScanner);
|
||||||
|
|
||||||
var fieldSizes = new CrossReferenceStreamFieldSize(stream.StreamDictionary);
|
var fieldSizes = new CrossReferenceStreamFieldSize(stream.StreamDictionary);
|
||||||
|
|
||||||
|
@ -45,14 +45,18 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
return typedToken;
|
return typedToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get the decoded data from this stream.
|
/// Get the decoded data from this stream.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static IReadOnlyList<byte> Decode(this StreamToken stream, IFilterProvider filterProvider)
|
public static IReadOnlyList<byte> Decode(this StreamToken stream, IFilterProvider filterProvider)
|
||||||
|
=> DecodeWithLookup(stream, filterProvider, null);
|
||||||
|
internal static IReadOnlyList<byte> DecodeWithLookup(this StreamToken stream, IFilterProvider filterProvider, IPdfTokenScanner pdfTokenScanner)
|
||||||
{
|
{
|
||||||
var filters = filterProvider.GetFilters(stream.StreamDictionary);
|
var filters = pdfTokenScanner != null
|
||||||
|
? new FilterProviderWithLookup(filterProvider).GetFilters(stream.StreamDictionary, pdfTokenScanner)
|
||||||
|
: filterProvider.GetFilters(stream.StreamDictionary);
|
||||||
|
|
||||||
var transform = stream.Data;
|
var transform = stream.Data;
|
||||||
for (var i = 0; i < filters.Count; i++)
|
for (var i = 0; i < filters.Count; i++)
|
||||||
|
Loading…
Reference in New Issue
Block a user