Извлекайте пути и формы с помощью iTextSharp

iTextSharp поддерживает создание фигур и контуров сPdfContentByte класс, там вы можете установить цвета и рисовать кривые и основные элементы ... есть ли механизм, который делает по-другому? Я могу получить контент по телефонуPdfReader.GetPageContent(...) но я нене найти "анализатор» чтобы прочитать эти операции, примените их к графическому контексту и, например, нарисуйте его на панели.

Пример:

1 1 1 RG
1 1 1 rg
0.12 0 0 0.12 16 31 cm

q
480 421 m
4318 421 l
4318 5459 l
480 5459 l
480 421 l W n
0.074509806931 0.074509806931 0.074509806931 RG
0.074509806931 0.074509806931 0.074509806931 rg /OC /oc1 BDC
....

Спасибо за ответ!

 salle5508 нояб. 2016 г., 12:13
Привет, Марк, я хочу сделать то же самое - извлечь фигуры. Были ли у вас какие-либо успехи в написании парсера или другого решения? Благодарю.

Ответы на вопрос(2)

Тот'не поддерживается в iTextSharp. Причина: разбор текстовых возвратовTextRenderInfo объекты, синтаксический анализ изображений возвращаетImageRenderInfo объекты, но в какой форме мы должны вернутьGraphicsRenderInfo? Это'Трудно найти что-то общее, а рисование в графическом контексте слишком специфично.

Идея в том, что вы пишете свой собственный парсер, как я сделал, например, для удаления слоев OCG:OCGParser, Эта часть iText не имеетЯ еще не был портирован на iTextSharp, но, возможно, вы можете использовать его для вдохновения.

Обратите внимание, что вына самом деле создание PDF для изображения функциональности. Арен»Есть ли другие продукты, которые уже поддерживают это из коробки?

 Marc Dannemann06 июн. 2013 г., 14:26
Мне не нужно специально отображать его на графическом объекте, этого было бы достаточно, чтобы получить общее представление, такое как xml или что-то еще ... Я буду использовать вашу ссылку в качестве шаблона, спасибо за это и постараюсь изо всех сил!

Вот отправная точка извлечения различных команд страницы:

    var file = "test.pdf";
    var reader = new PdfReader(file);

    var streamBytes = reader.GetPageContent(2);
    var tokenizer = new PRTokeniser(new RandomAccessFileOrArray(streamBytes));
    var ps = new PdfContentParser(tokenizer);

    List operands = new List();
    while (ps.Parse(operands).Count > 0)
    {
        PdfLiteral oper = (PdfLiteral)operands[operands.Count - 1];
        var cmd = oper.ToString();

        switch (cmd)
        {
            case "q":
                Console.WriteLine("SaveGraphicsState(); //q");
                break;

            case "Q":
                Console.WriteLine("RestoreGraphicsState(); //Q");
                break;

           // good luck with the rest!

        }
    }

Ваш ответ на вопрос