C# iTextSharp-如何将PDFLayer转换为位图?

C# iTextSharp-如何将PDFLayer转换为位图?,c#,image,pdf,itext,C#,Image,Pdf,Itext,我有一个PDF文件,它有一个多层次的页面。 我决定使用iTextSharp解析pdf文件,下面是我检索图层的代码 string tempOutputFile = Path.GetTempFileName(); Dictionary<string, PdfLayer> layers; PdfReader pdfReader = new PdfReader( path ); PdfStamper pdfStamper = new PdfStamper( pdfReader, new

我有一个PDF文件,它有一个多层次的页面。 我决定使用iTextSharp解析pdf文件,下面是我检索图层的代码

string tempOutputFile = Path.GetTempFileName();
Dictionary<string, PdfLayer> layers;

PdfReader pdfReader = new PdfReader( path );

PdfStamper pdfStamper = new PdfStamper( pdfReader, new System.IO.FileStream( tempOutputFile, System.IO.FileMode.Create ) );

layers = pdfStamper.GetPdfLayers();

pdfStamper.Close();
pdfReader.Close();
string tempOutputFile=Path.GetTempFileName();
字典层;
PdfReader PdfReader=新PdfReader(路径);
PdfStamper PdfStamper=newpdfstamper(pdfReader,new System.IO.FileStream(tempOutputFile,System.IO.FileMode.Create));
layers=pdfStamper.GetPdfLayers();
pdfStamper.Close();
pdfReader.Close();
因此,我可以得到PDFLayer对象的列表。但我几乎找不到将其转换为位图或RGBA/BGRA数据的方法。有谁能告诉我从PDFLayer获取图像对象的技巧吗

-----------------------增加----------------------

现在我正在尝试为每个层(OCG)保存pdf文件

publicstaticvoidcreatepdf(字符串文件名,字符串目标文件夹)
{
PdfReader reader=新的PdfReader(文件名);
PdfDictionary ocProps=reader.Catalog.GetAsDict(PdfName.OCPROPERTIES);
PdfDictionary occd=ocProps.GetAsDict(PdfName.D);
PdfArray order=occd.GetAsArray(PdfName.order);
列表层=新列表();
for(int i=0;i
创建的pdf每个层仅包含一个层。但它有一个完整的原始pdf的背景,所以它几乎和原始pdf一样如何删除背景?


另外,在创建test1.pdf的第二个循环中,抛出了一个错误,即iTextSharp.text.DocumentException:“原始文档被重用。从文件中再次读取。如何避免此错误,而不是每次重新打开原始pdf文件?

itext是一个用于pdf创建和操作的库,但它不支持将页面或其部分(如层)导出为图像

实际上,人们可以尝试基于itext的解析器框架实现该功能。该框架已经提供了遍历指令流并始终保持当前图形状态可用的功能。因此,剩下的就是将每个绘图指令转换为目标位图上的某些操作


但是,我们不应该低估这一点,因为pdf指令具有很大的灵活性

谢谢你的提示。我甚至不能用选定的图层制作pdf吗?Bruno Lowagie为iText创建了一个实用程序,可以删除选定的OCG(“可选内容组”,图层的官方名称)。因此,如果PDF的所有内容都在某个层中,您可以使用该实用程序导出给定的层选择。请看一下@BrunoLowagie
    public static void CreatePDF( string fileName, string destinationFolder )
    {
        PdfReader reader = new PdfReader( fileName );
        PdfDictionary ocProps = reader.Catalog.GetAsDict( PdfName.OCPROPERTIES );
        PdfDictionary occd = ocProps.GetAsDict( PdfName.D );
        PdfArray order = occd.GetAsArray( PdfName.ORDER );

        List<PdfObject> layers = new List<PdfObject>();
        for( int i = 0; i < order.Size; i++ ) 
        {
            layers.Add( order[ i ] );
        }

        for( int i = 0; i < layers.Count; i++ )
        {
            order.Remove( 0 );
        }

        for( int i = 0; i < layers.Count; i++ )
        {
            order.Add( layers[ i ] );
            PdfStamper stamper = new PdfStamper( reader, new System.IO.FileStream( destinationFolder + "\\test" + i + ".pdf", System.IO.FileMode.CreateNew ) );

            stamper.Close();
            order.Remove( 0 );
        }



        reader.Close();

    }