ABCPDF 8 - 如何获取PDF中每个图层的名称?

时间:2013-08-02 15:44:43

标签: layer abcpdf

我有一个接收未分层和分层PDF文件的流程。对于未分层的PDF文件,我将添加一个名为“cut”的图层。对于分层PDF文件,我需要检查是否已经存在名为“cut”的图层,如果是,则不要添加“剪切”图层。使用ABCPDF 8,如何获取PDF中所有图层的名称以确定是否存在名为“cut”的图层?

3 个答案:

答案 0 :(得分: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);

图层字典的关键是图层的名称。这很容易!

答案 1 :(得分:0)

ABCpdf Version 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);
        }

该项目还包含显示如何编辑图层的代码。根据您描述的任务,这可能很有用。

答案 2 :(得分: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中图层的名称