Преобразование PDF в PNG с деактивированными слоями с помощью iTextSharp

Я использую iTextSharp. Я работаю над PDF-файлом, в котором есть то, что я называю многими «слоями».

Поэтому, когда я открываю свой PDF-файл, я могу сделать свои «слои» видимыми или невидимыми, щелкнув маленький глаз слева от имени слоя.

Я знаю, как активировать/деактивировать слой с помощью этого кода:

FileStream outStream = null;
        PdfReader pdfReader = null;
        PdfStamper stamper = null;

        Exception exceptionOccured = null;
        try
        {
            outStream = new FileStream(destFile, FileMode.Create);
            pdfReader = new PdfReader(sourceFile);
            stamper = new PdfStamper(pdfReader, outStream);

            Dictionary<String, PdfLayer> layers = null;
            try
            {
                layers = stamper.GetPdfLayers();
            }
            catch (Exception)
            {
            }
            if (layers != null)
            {
                layersToRemove = addSpecialLayerChars(layersToRemove);

                foreach (KeyValuePair<String, PdfLayer> layer in layers)
                {
                    //Encodage UTF-16 BE 'þÿ' retirer les \0
                    String layerName = layer.Key;
                    String layerNameComp = layerName.Replace("\0", "");
                    layerNameComp = layerNameComp.Replace("þÿ", "");

                    Boolean remove = false;
                    //Si(!layerName.equals("textes")) Alors remove = true; // On efface toute les couches qui ne contiennent pas de texte
                    foreach (String layerToRemove in layersToRemove)
                    {
                        if (layerNameComp.ToLowerInvariant() == layerToRemove.ToLowerInvariant())
                        {
                            remove = true;
                        }
                        else if (layerToRemove[layerToRemove.Length - 1] == '*')
                        {
                            if (layerNameComp.ToLowerInvariant().StartsWith(layerToRemove.Substring(0, layerToRemove.Length - 1).ToLowerInvariant()))
                            {
                                remove = true;
                            }
                        }
                    }
                    if (remove)
                    {
                        if (writeToConsole)
                            Console.WriteLine("Removing layer: " + layerName);
                        try
                        {
                            layers[layerName].On = false;
                        }
                        catch (Exception ex)
                        {
                            if (writeToConsole)
                                Console.WriteLine("Exception: " + ex.Message);
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            exceptionOccured = ex;
        }
        finally
        {
            try
            {
                if (stamper != null)
                    stamper.Close();
                if (pdfReader != null)
                    pdfReader.Close();
                if (outStream != null)
                    outStream.Close();
                if (exceptionOccured != null)
                    throw exceptionOccured;
            }
            catch (Exception ex)
            {
                if (exceptionOccured != null)
                    throw exceptionOccured;
            }
        }

Но когда я хочу преобразовать свой PDF (с деактивированными слоями) в PNG, мое новое изображение содержит все слои, даже те, которые я деактивировал.

Вот почему я хотел бы полностью удалить слои.


person Caryluna    schedule 18.07.2016    source источник
comment
Я никогда не пробовал, но проверьте класс OCGRemover   -  person Chris Haas    schedule 18.07.2016
comment
Спасибо большое все получилось!!   -  person Caryluna    schedule 18.07.2016
comment
Потрясающий! Если это сработало без проблем, пожалуйста, закройте это как дубликат. Если вам нужно немного подкорректировать его, не стесняйтесь опубликовать это здесь и принять свой собственный ответ. В любом случае, не забудьте проголосовать за ответ mkl!   -  person Chris Haas    schedule 19.07.2016