iText7 (PdfSweep): System.ArgumentException: объекты CharacterRenderInfo представляют один символ - PullRequest
0 голосов
/ 24 апреля 2018

Попытка отредактировать некоторый текст из PDF, используя PDFSweep 2.0 (C #). Следующий код работает для большинства имеющихся у меня PDF-файлов, но в некоторых PDF-файлах приведенный ниже код вызывает ArgumentException

String input = "G:/tmp/redact/input.pdf";
String output = "G:/tmp/redact/output.pdf";
CompositeCleanupStrategy strategy = new CompositeCleanupStrategy();
strategy.Add(new RegexBasedCleanupStrategy(@"Hello"));

PdfDocument pdf = new PdfDocument(new PdfReader(input), new PdfWriter(output));
PdfAutoSweep autoSweep = new PdfAutoSweep(strategy);
autoSweep.CleanUp(pdf);           
pdf.Close();

Полный стек исключений выглядит следующим образом:

Unhandled Exception: System.ArgumentException: CharacterRenderInfo objects represent a single character. They should not be made from TextRenderInfo objects containing more than a single character of text.
   at iText.Kernel.Pdf.Canvas.Parser.Listener.CharacterRenderInfo..ctor(TextRenderInfo tri)
   at iText.Kernel.Pdf.Canvas.Parser.Listener.RegexBasedLocationExtractionStrategy.ToCRI(TextRenderInfo tri)
   at iText.Kernel.Pdf.Canvas.Parser.Listener.RegexBasedLocationExtractionStrategy.EventOccurred(IEventData data, EventType type)
   at iText.PdfCleanup.Autosweep.CompositeCleanupStrategy.EventOccurred(IEventData data, EventType type)
   at iText.Kernel.Pdf.Canvas.Parser.PdfCanvasProcessor.EventOccurred(IEventData data, EventType type)
   at iText.Kernel.Pdf.Canvas.Parser.PdfCanvasProcessor.DisplayPdfString(PdfString string)
   at iText.Kernel.Pdf.Canvas.Parser.PdfCanvasProcessor.ShowTextOperator.Invoke(PdfCanvasProcessor processor, PdfLiteral operator, IList`1 operands)
   at iText.Kernel.Pdf.Canvas.Parser.PdfCanvasProcessor.InvokeOperator(PdfLiteral operator, IList`1 operands)
   at iText.Kernel.Pdf.Canvas.Parser.PdfCanvasProcessor.ProcessContent(Byte[] contentBytes, PdfResources resources)
   at iText.Kernel.Pdf.Canvas.Parser.PdfCanvasProcessor.ProcessPageContent(PdfPage page)
   at iText.Kernel.Pdf.Canvas.Parser.PdfDocumentContentParser.ProcessContent[E](Int32 pageNumber, E renderListener, IDictionary`2 additionalContentOperators)
   at iText.Kernel.Pdf.Canvas.Parser.PdfDocumentContentParser.ProcessContent[E](Int32 pageNumber, E renderListener)
   at iText.PdfCleanup.Autosweep.PdfAutoSweep.GetPdfCleanUpLocations(PdfDocument doc)
   at iText.PdfCleanup.Autosweep.PdfAutoSweep.CleanUp(PdfDocument pdfDocument)
   at gp_redactor.Program.Main(String[] args) in G:\prj\gp_redactor\gp_redactor\Program.cs:line 70

Я склонен думать, что это ошибка в iText, кто-нибудь может предложить обходной путь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...