protected void ProcessPageContentBlock(PDFContentBlock block, Dictionary <long, PDFContentBlock> blocksByMcid) { if (block.BlockOptions != null && block.BlockOptions.ContainsKey("MCID")) { PDFInteger mcid; if (block.BlockOptions.TryGet <PDFInteger>("MCID", out mcid)) { blocksByMcid[mcid.Value] = block; } } foreach (PDFContentBlock cblock in block.Content.OfType <PDFContentBlock>()) { ProcessPageContentBlock(cblock, blocksByMcid); } }
protected PDFContentBlock ProcessTreeNode(IPDFDictionary node, PDFName type) { PDFContentBlock cb = new PDFContentBlock { StartMarker = new PDFContentOperator { Name = "BDC", Arguments = new List <IPDFToken> { type, node } }, Content = new List <PDFContentOperator>() }; if (node.Dict.ContainsKey("K")) { IPDFElement K = node.Dict["K"]; if (K is IPDFList && ((IPDFList)K).List != null) { foreach (IPDFElement elem in ((IPDFList)K).List) { if (elem is IPDFDictionary) { IPDFDictionary v = (IPDFDictionary)elem; PDFName vtype; if (v.Dict.TryGet("S", out vtype)) { PDFContentBlock blk = ProcessTreeNode(v, vtype); blk.Parent = cb; cb.Content.Add(blk); } } else if (elem is PDFInteger) { long mcid = ((PDFInteger)elem).Value; IPDFObjRef objref; if (node.Dict.TryGet("Pg", out objref)) { if (ContentBlocks.ContainsKey(objref.ObjRef)) { Dictionary <long, PDFContentBlock> blocksByMcid = ContentBlocks[objref.ObjRef]; if (blocksByMcid.ContainsKey(mcid)) { PDFContentBlock blk = blocksByMcid[mcid]; blk.Parent = cb; cb.Content.Add(blk); } } } } } } else if (K is IPDFDictionary && ((IPDFDictionary)K).Dict != null) { PDFName vtype; if (((IPDFDictionary)K).Dict.TryGet("S", out vtype)) { PDFContentBlock blk = ProcessTreeNode((IPDFDictionary)K, vtype); blk.Parent = cb; cb.Content.Add(blk); } else { System.Diagnostics.Debugger.Break(); } } else if (K is PDFInteger && node.Dict.ContainsKey("Pg")) { long mcid = ((PDFInteger)K).Value; IPDFObjRef objref; if (node.Dict.TryGet("Pg", out objref)) { if (ContentBlocks.ContainsKey(objref.ObjRef)) { Dictionary <long, PDFContentBlock> blocksByMcid = ContentBlocks[objref.ObjRef]; if (blocksByMcid.ContainsKey(mcid)) { PDFContentBlock blk = blocksByMcid[mcid]; blk.Parent = cb; cb.Content.Add(blk); } } } } } return(cb); }