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;
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…