C#itext 7.1.4(NuGet版本)似乎无法正确解析OCG /图层标题。
下面的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
写入具有禁用图层的文件效果很好,但是图层标题始终为空。
答案 0 :(得分:0)
只需测试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中的回归
答案 1 :(得分:0)
我不知道title / GetTitle()的目的是什么,但是要获取Name(如面板上显示的),可以使用以下代码:
var title = layer.GetPdfObject().GetAsString(PdfName.Name).ToUnicodeString();