Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
848 views
in Technique[技术] by (71.8m points)

c# - iText 7, Extract layers from document

I am trying to use the IText 7 library to extract specific layers by name from a PDF file to create a new one.

Main problem - what I have achieved is a document with extracted layer visible and other layers locked/invisible. I would like to get them removed. Method input and result

Second problem - code fails with multi-page documents, result file has only one page

  public string ExtractLayer(string pdfLayerName, string sourceFilePath)
    {
        // returns empty 0b file with .pdf extension
        var layerFile = TmpFilesProvider.GetTemporaryFile.Pdf();


        PdfDocument pdfDoc = new PdfDocument(new PdfReader(sourceFilePath), new PdfWriter(layerFile));

        List<PdfLayer> layers = pdfDoc.GetCatalog().GetOCProperties(true).GetLayers().ToList();


        foreach (var layer in layers)
        {
            var layerName = (layer.GetPdfObject().Get(PdfName.Name));
            if (layerName == null) continue;

            if (layerName.ToString() != pdfLayerName)
            {
                layer.SetOn(false);
                layer.SetLocked(true);
            }
            else
            {
                RectangleEventHandler handler = new RectangleEventHandler();
                pdfDoc.AddEventHandler(PdfDocumentEvent.END_PAGE, handler);
            }
        }

        pdfDoc.Close();
        return layerFile;
    }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
等待大神答复

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...