PdfLayer.GetTitle() 总是返回 null
PdfLayer.GetTitle() always returning null
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
使用禁用图层写入文件工作正常,但图层标题始终为空。
刚刚测试了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 中的回归
我不知道 title/GetTitle() 的目的是什么,但要获取名称(如面板上显示的那样),以下代码有效:
var title = layer.GetPdfObject().GetAsString(PdfName.Name).ToUnicodeString();
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
使用禁用图层写入文件工作正常,但图层标题始终为空。
刚刚测试了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 中的回归
我不知道 title/GetTitle() 的目的是什么,但要获取名称(如面板上显示的那样),以下代码有效:
var title = layer.GetPdfObject().GetAsString(PdfName.Name).ToUnicodeString();