Добавление CanvasArtifact в путь - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь добавить артефакт холста к каждому объекту пути, у которого его еще нет в существующем pdf. Единственный способ найти объект PathRenderInfo был с этим классом IEventListener.

Однако, когда я пытаюсь добавить свой CanvasArtifact, выдается исключение.

Я видел некоторые другие вопросы, подобные этому, которые в основном говорят, что я должен переписать PDF: Управление путями, цвет и т. Д. c. в iText

Моя проблема с этим ответом состоит в том, что я не знаю, как это относится к объекту пути.

Есть ли другой способ (более удобный для записи) обнаружения, если PdfObject (или что-нибудь) - это путь? Или, в качестве альтернативы, изменив PathRenderInfo?

using iText.Kernel.Pdf.Canvas.Parser;
using iText.Kernel.Pdf.Canvas.Parser.Data;
using iText.Kernel.Pdf.Canvas.Parser.Listener;
using System.Collections.Generic;
using System.Linq;
using iText.Kernel.Pdf.Canvas;
using iText.Kernel.Pdf;
public class PathWrapperEventListener : IEventListener
{
    public void EventOccurred(IEventData data, EventType type)
    {
        var path = data as PathRenderInfo;
        if (path != null)
        {
            var tags = path.GetCanvasTagHierarchy();
            if (!tags.Any(x=>x.GetRole().ToString().ToLower().Contains("artifact")))
            {
                //this throw a System.NotSupportedException (Collection is read-only)
                tags.Add(new CanvasArtifact());
            }
        }
    }

    public ICollection<EventType> GetSupportedEvents()
    {
        return new List<EventType>() { EventType.RENDER_PATH };
    }
}

public class Example
{
    public void Transform(string path)
    {
        var document = new PdfDocument(new PdfReader(path), new PdfWriter(path + ".temp"));
        var processor = new PdfCanvasProcessor(new PathWrapperEventListener());
        processor.ProcessPageContent(document.GetFirstPage());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...