Ejemplo n.º 1
0
        static void ProcessElements(ElementReader reader, ElementWriter writer, XSet visited)
        {
            Element element;

            while ((element = reader.Next()) != null)             // Read page contents
            {
                switch (element.GetType())
                {
                case Element.Type.e_image:
                case Element.Type.e_inline_image:
                    // remove all images by skipping them
                    break;

                case Element.Type.e_path:
                {
                    // Set all paths to red color.
                    GState gs = element.GetGState();
                    gs.SetFillColorSpace(ColorSpace.CreateDeviceRGB());
                    gs.SetFillColor(new ColorPt(1, 0, 0));
                    writer.WriteElement(element);
                    break;
                }

                case Element.Type.e_text:
                {
                    // Set all text to blue color.
                    GState gs = element.GetGState();
                    gs.SetFillColorSpace(ColorSpace.CreateDeviceRGB());
                    gs.SetFillColor(new ColorPt(0, 0, 1));
                    writer.WriteElement(element);
                    break;
                }

                case Element.Type.e_form:
                {
                    writer.WriteElement(element);                                     // write Form XObject reference to current stream

                    Obj form_obj = element.GetXObject();
                    if (!visited.Contains(form_obj.GetObjNum()))                                     // if this XObject has not been processed
                    {
                        // recursively process the Form XObject
                        visited.Add(form_obj.GetObjNum());
                        ElementWriter new_writer = new ElementWriter();

                        reader.FormBegin();
                        new_writer.Begin(form_obj, true);

                        reader.ClearChangeList();
                        new_writer.SetDefaultGState(reader);

                        ProcessElements(reader, new_writer, visited);
                        new_writer.End();
                        reader.End();
                    }
                    break;
                }

                default:
                    writer.WriteElement(element);
                    break;
                }
            }
        }