【问题标题】:iTextSharp - How to PDFLayer to Bitmap?iTextSharp - 如何将 PDFLayer 转换为位图?
【发布时间】:2018-07-30 23:31:44
【问题描述】:

我有一个 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();

因此,我可以获得 PDFLayer 对象的列表。但我几乎找不到将其转换为位图或 RGBA/BGRA 数据的方法。谁能给我一个从 PDFLayer 获取图像对象的提示?

-----------已添加----------------------

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

    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();

    }

创建的 pdf 每个仅包含一层。但它具有整个原始 pdf 的背景,因此它与原始 pdf 几乎相同。 如何去除背景?

另外,在创建 test1.pdf 的第二个循环中,会抛出错误 iTextSharp.text.DocumentException: 'the original document was reused。从文件中重新读取。'如何避免此错误,而不是每次都重新打开原始 pdf 文件?

【问题讨论】:

    标签: c# image pdf itext


    【解决方案1】:

    itext 是一个用于创建和处理 pdf 的库,但它不具备将页面或其部分(如图层)导出为图像的功能。

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

    不过,不应低估这一点,因为 pdf 说明具有很大程度的灵活性。

    【讨论】:

    • 感谢您的提示。我什至不能制作带有选定图层的 pdf 文件吗?
    • Bruno Lowagie 为 iText 创建了一个实用程序,允许删除选定的 OCG(“可选内容组”,图层的正式名称)。因此,如果您的 PDF 的所有内容都在某个图层中,您可以使用该实用程序导出给定的图层选择。
    • 我对代码进行了一些更改,并在问题中添加了更多文本。请看看@BrunoLowagie
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 2012-03-11
    • 2012-01-07
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多