【发布时间】: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 文件?
【问题讨论】: