示例#1
0
        private int RemoveKidObject(PdfObject kid)
        {
            PdfObject k = GetK();

            if (k == null || !k.IsArray() && k != kid && k != kid.GetIndirectReference())
            {
                return(-1);
            }
            int removedIndex = -1;

            if (k.IsArray())
            {
                PdfArray kidsArray = (PdfArray)k;
                removedIndex = RemoveObjectFromArray(kidsArray, kid);
            }
            if (!k.IsArray() || k.IsArray() && ((PdfArray)k).IsEmpty())
            {
                GetPdfObject().Remove(PdfName.K);
                removedIndex = 0;
            }
            SetModified();
            return(removedIndex);
        }
示例#2
0
        /// <summary>Reads the layers from the document to be able to modify them in the future.</summary>
        private void ReadLayersFromDictionary()
        {
            PdfArray ocgs = GetPdfObject().GetAsArray(PdfName.OCGs);

            if (ocgs == null || ocgs.IsEmpty())
            {
                return;
            }
            IDictionary <PdfIndirectReference, PdfLayer> layerMap = new SortedDictionary <PdfIndirectReference, PdfLayer
                                                                                          >();

            for (int ind = 0; ind < ocgs.Size(); ind++)
            {
                PdfLayer currentLayer = new PdfLayer((PdfDictionary)ocgs.GetAsDictionary(ind).MakeIndirect(GetDocument()));
                // We will set onPanel to true later for the objects present in /D->/Order entry.
                currentLayer.onPanel = false;
                layerMap.Put(currentLayer.GetIndirectReference(), currentLayer);
            }
            PdfDictionary d = GetPdfObject().GetAsDictionary(PdfName.D);

            if (d != null && !d.IsEmpty())
            {
                PdfArray off = d.GetAsArray(PdfName.OFF);
                if (off != null)
                {
                    for (int i = 0; i < off.Size(); i++)
                    {
                        PdfObject offLayer = off.Get(i, false);
                        if (offLayer.IsIndirectReference())
                        {
                            layerMap.Get((PdfIndirectReference)offLayer).on = false;
                        }
                        else
                        {
                            layerMap.Get(offLayer.GetIndirectReference()).on = false;
                        }
                    }
                }
                PdfArray locked = d.GetAsArray(PdfName.Locked);
                if (locked != null)
                {
                    for (int i = 0; i < locked.Size(); i++)
                    {
                        PdfObject lockedLayer = locked.Get(i, false);
                        if (lockedLayer.IsIndirectReference())
                        {
                            layerMap.Get((PdfIndirectReference)lockedLayer).locked = true;
                        }
                        else
                        {
                            layerMap.Get(lockedLayer.GetIndirectReference()).locked = true;
                        }
                    }
                }
                PdfArray orderArray = d.GetAsArray(PdfName.Order);
                if (orderArray != null && !orderArray.IsEmpty())
                {
                    ReadOrderFromDictionary(null, orderArray, layerMap);
                }
            }
            // Add the layers which should not be displayed on the panel to the order list
            foreach (PdfLayer layer in layerMap.Values)
            {
                if (!layer.IsOnPanel())
                {
                    layers.Add(layer);
                }
            }
        }
        private PdfFormField MakeFormField(PdfObject fieldDict)
        {
            PdfFormField field = PdfFormField.MakeFormField(fieldDict, documentTo);

            if (field == null)
            {
                logger.Warn(MessageFormatUtil.Format(iText.IO.LogMessageConstant.CANNOT_CREATE_FORMFIELD, fieldDict.GetIndirectReference
                                                         ()));
            }
            return(field);
        }