protected void pushPageAttributes(PdfDictionary nodePages) { PdfDictionary dic = new PdfDictionary(); if (pageInh.Count != 0) { dic.putAll((PdfDictionary)pageInh[pageInh.Count - 1]); } for (int k = 0; k < pageInhCandidates.Length; ++k) { PdfObject obj = nodePages.get(pageInhCandidates[k]); if (obj != null) { dic.put(pageInhCandidates[k], obj); } } pageInh.Add(dic); }
internal PdfStream getFormXObject(int pageNumber) { PdfDictionary page = pages[pageNumber - 1]; PdfObject contents = reader.getPdfObject(page.get(PdfName.CONTENTS)); int length = 0; int offset = 0; PdfDictionary dic = new PdfDictionary(); MemoryStream bout = null; ArrayList filters = null; if (contents != null) { if (contents.Type == PdfObject.STREAM) { PRStream stream = (PRStream)contents; length = stream.Length; offset = stream.Offset; dic.putAll(stream); } else { PdfArray array = (PdfArray)contents; ArrayList list = array.ArrayList; bout = new MemoryStream(); for (int k = 0; k < list.Count; ++k) { PRStream stream = (PRStream)reader.getPdfObject((PdfObject)list[k]); PdfObject filter = stream.get(PdfName.FILTER); byte[] b = new byte[stream.Length]; file.seek(stream.Offset); file.readFully(b); filters = new ArrayList(); if (filter != null) { if (filter.Type == PdfObject.NAME) { filters.Add(filter); } else if (filter.Type == PdfObject.ARRAY) { filters = ((PdfArray)filter).ArrayList; } } string name; for (int j = 0; j < filters.Count; ++j) { name = ((PdfName)filters[j]).ToString(); if (name.Equals("/FlateDecode") || name.Equals("/Fl")) { b = PdfReader.FlateDecode(b); } else if (name.Equals("/ASCIIHexDecode") || name.Equals("/AHx")) { b = PdfReader.ASCIIHexDecode(b); } else if (name.Equals("/ASCII85Decode") || name.Equals("/A85")) { b = PdfReader.ASCII85Decode(b); } else if (name.Equals("/LZWDecode")) { b = PdfReader.LZWDecode(b); } else { throw new IOException("The filter " + name + " is not supported."); } } bout.Write(b, 0, b.Length); if (k != list.Count - 1) { bout.WriteByte((byte)'\n'); } } } } dic.put(PdfName.RESOURCES, reader.getPdfObject(page.get(PdfName.RESOURCES))); dic.put(PdfName.TYPE, PdfName.XOBJECT); dic.put(PdfName.SUBTYPE, PdfName.FORM); dic.put(PdfName.BBOX, new PdfRectangle(((PdfImportedPage)importedPages[pageNumber]).BoundingBox)); dic.put(PdfName.MATRIX, IDENTITYMATRIX); dic.put(PdfName.FORMTYPE, ONE); PRStream str; if (bout == null) { str = new PRStream(reader, offset); str.putAll(dic); str.Length = length; } else { str = new PRStream(reader, bout.ToArray()); str.putAll(dic); } return(str); }