diff --git a/src/UglyToad.PdfPig/Parser/PdfDocumentFactory.cs b/src/UglyToad.PdfPig/Parser/PdfDocumentFactory.cs index 9c77c333..e2475c06 100644 --- a/src/UglyToad.PdfPig/Parser/PdfDocumentFactory.cs +++ b/src/UglyToad.PdfPig/Parser/PdfDocumentFactory.cs @@ -58,6 +58,8 @@ var passwords = new List(); + var clipPaths = options?.ClipPaths ?? true; + if (options?.Password != null) { passwords.Add(options.Password); @@ -73,12 +75,13 @@ passwords.Add(string.Empty); } - var document = OpenDocument(inputBytes, tokenScanner, options?.Logger ?? new NoOpLog(), isLenientParsing, passwords); + var document = OpenDocument(inputBytes, tokenScanner, options?.Logger ?? new NoOpLog(), isLenientParsing, passwords, clipPaths); return document; } - private static PdfDocument OpenDocument(IInputBytes inputBytes, ISeekableTokenScanner scanner, ILog log, bool isLenientParsing, IReadOnlyList passwords) + private static PdfDocument OpenDocument(IInputBytes inputBytes, ISeekableTokenScanner scanner, ILog log, bool isLenientParsing, + IReadOnlyList passwords, bool clipPaths) { var filterProvider = MemoryFilterProvider.Instance; @@ -152,7 +155,8 @@ pdfScanner, filterProvider, acroFormFactory, - bookmarksProvider); + bookmarksProvider, + clipPaths); } private static (IndirectReference, DictionaryToken) ParseTrailer(CrossReferenceTable crossReferenceTable, bool isLenientParsing, IPdfTokenScanner pdfTokenScanner, diff --git a/src/UglyToad.PdfPig/ParsingOptions.cs b/src/UglyToad.PdfPig/ParsingOptions.cs index f316a166..a02deec2 100644 --- a/src/UglyToad.PdfPig/ParsingOptions.cs +++ b/src/UglyToad.PdfPig/ParsingOptions.cs @@ -16,6 +16,11 @@ UseLenientParsing = false }; + /// + /// Should the parser clip paths? Default is true. + /// + public bool ClipPaths { get; set; } = true; + /// /// Should the parser ignore issues where the document does not conform to the PDF specification? /// diff --git a/src/UglyToad.PdfPig/PdfDocument.cs b/src/UglyToad.PdfPig/PdfDocument.cs index 373d0f28..cccd9cfc 100644 --- a/src/UglyToad.PdfPig/PdfDocument.cs +++ b/src/UglyToad.PdfPig/PdfDocument.cs @@ -33,6 +33,8 @@ private readonly IInputBytes inputBytes; + private readonly bool clipPaths; + [NotNull] private readonly ParsingCachingProviders cachingProviders; @@ -92,7 +94,8 @@ IPdfTokenScanner pdfScanner, IFilterProvider filterProvider, AcroFormFactory acroFormFactory, - BookmarksProvider bookmarksProvider) + BookmarksProvider bookmarksProvider, + bool clipPaths) { this.log = log; this.inputBytes = inputBytes; @@ -102,6 +105,7 @@ this.pdfScanner = pdfScanner ?? throw new ArgumentNullException(nameof(pdfScanner)); this.filterProvider = filterProvider ?? throw new ArgumentNullException(nameof(filterProvider)); this.bookmarksProvider = bookmarksProvider ?? throw new ArgumentNullException(nameof(bookmarksProvider)); + this.clipPaths = clipPaths; Information = information ?? throw new ArgumentNullException(nameof(information)); pages = new Pages(catalog, pageFactory, pdfScanner); Structure = new Structure(catalog, crossReferenceTable, pdfScanner); @@ -141,9 +145,8 @@ /// Get the page with the specified page number (1 indexed). /// /// The number of the page to return, this starts from 1. - /// Paths will be clipped if set to true. Default is false. /// The page. - public Page GetPage(int pageNumber, bool clipPaths = false) + public Page GetPage(int pageNumber) { if (isDisposed) {