我有一个接收非分层和分层 PDF 文件的过程。对于未分层的 PDF 文件,我将添加一个名为“cut”的图层。对于分层的 PDF 文件,我需要检查是否已经有一个名为“cut”的图层,如果有,请不要添加“cut”图层。使用 ABCPDF 8,如何获取 PDF 中所有图层的名称以确定是否存在名为“cut”的图层?
问问题
1485 次
3 回答
2
我发现 iTextSharp 有一种简单的方法来获取图层的名称。这是有关如何执行此操作的代码片段:
tempOutputFile = System.IO.Path.GetTempFileName();
iTextSharp.text.pdf.PdfReader pdfReader = new iTextSharp.text.pdf.PdfReader(pdfFile);
iTextSharp.text.pdf.PdfStamper pdfStamper = new iTextSharp.text.pdf.PdfStamper(pdfReader, new System.IO.FileStream(tempOutputFile, System.IO.FileMode.Create));
System.Collections.Generic.Dictionary<string, iTextSharp.text.pdf.PdfLayer> layers = pdfStamper.GetPdfLayers();
pdfStamper.Close();
pdfReader.Close();
System.IO.File.Delete(tempOutputFile);
图层字典的键是图层的名称。就这么简单!
于 2013-08-13T12:38:46.960 回答
0
ABCpdf 版本 10 包含一个名为 OCGLayers 的项目,它向您展示了如何执行此操作。
例如,要获取所有命名层,您将使用以下形式的代码:
Page page = ... get a page ...
List<Group> groups = oc.GetGroups(page);
List<int> indents = new List<int>();
oc.SortGroupsForPresentation(groups, indents);
for (int i = 0; i < groups.Count; i++) {
Group group = groups[i];
string indent = new string(' ', indents[i] * 3);
layersCheckedListBox.Items.Add(indent + group.EntryName.Text, group.Visible);
}
该项目还包含显示如何编辑图层的代码。鉴于您描述的任务,这可能很有用。
于 2015-05-18T14:58:29.867 回答
0
public Dictionary<String, PdfLayer> GetPdfLayerNames()
{
PdfReader reader1 = new PdfReader("D:\\pdf\\ClaimOut4e0907cbdb6845549458e82900db7be0.pdf");
PdfStamper stamper1 = new PdfStamper(reader1, new FileStream("D:\\new_stamper.pdf", FileMode.Append));
Dictionary<String, PdfLayer> layers = stamper1.GetPdfLayers();
stamper1.Close();
reader1.Close();
return layers;
}
使用它,您可以从 Pdf 中获取所有图层的名称,其中字典中的 sting 是 pdf 中的图层名称
于 2015-08-24T20:25:11.580 回答