PdfLayer.GetTitle () всегда возвращает ноль - PullRequest
0 голосов
/ 18 января 2019

C # itext 7.1.4 (выпуск NuGet), похоже, неправильно анализирует заголовки OCG / layer.

Код C # ниже должен прочитать pdf, распечатать все заголовки слоев, отключить видимость слоя и сохранить его в файле dest.

Пример pdf файла: https://docdro.id/qI479di

using iText.Kernel.Pdf;
using System;

namespace PDFSetOCGVisibility
{
    class Program
    {
        static void Main(string[] args)
        {
            var src = @"layer-example.pdf";
            var dest = @"layer-example-out.pdf"; ;
            PdfDocument pdf = new PdfDocument(new PdfReader(src), new PdfWriter(dest));
            var Catalog = pdf.GetCatalog();
            var ocProps = Catalog.GetOCProperties(false);
            var layers = ocProps.GetLayers();
            foreach(var layer in layers)
            {
                var title = layer.GetTitle();
                Console.WriteLine($"title: {title ?? "null"}");
                layer.SetOn(false);
            }
            pdf.Close();
        }
    }
}

Ожидаемый результат:

title: Layer 1
title: Layer 2

Фактический результат:

title: null
title: null

Запись файла с отключенными слоями работает нормально, но заголовки слоев всегда равны нулю.

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Я не знаю, какова цель title / GetTitle (), но для получения имени (как показано на панели) работает следующий код:

var title = layer.GetPdfObject().GetAsString(PdfName.Name).ToUnicodeString();
0 голосов
/ 18 января 2019

Только что протестировал версию itext5:

using iTextSharp.text.pdf;
using System;
using System.IO;

namespace PDFSetOCGVisibility5
{
    class Program
    {
        static void Main(string[] args)
        {
            var src = @"layer-example.pdf";
            var dest = @"layer-example-out.pdf";
            var reader = new PdfReader(src);
            PdfStamper pdf = new PdfStamper(reader, new FileStream(dest, FileMode.Create));
            var layers = pdf.GetPdfLayers();
            foreach (var layer in layers)
            {
                var title = layer.Key;
                Console.WriteLine($"title: {title ?? "null"}");
                layer.Value.On = false;
            }
            pdf.Close();
            reader.Close();
        }
    }
}

Это работает, как и ожидалось, так что, похоже, регрессия в itext7

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