Я использую 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, мое новое изображение содержит все слои, даже те, которые я деактивировал.
Вот почему я хотел бы полностью удалить слои.
OCGRemover
- person Chris Haas   schedule 18.07.2016