Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
        }