Попытка отредактировать некоторый текст из 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, кто-нибудь может предложить обходной путь?