//////////////////////////////////////////////////////////////////// // Write stream object to PDF file // Called by PdfDocument.CreateFile(FileName) method // to output one indirect stream PDF object. //////////////////////////////////////////////////////////////////// internal void WriteToPdfFile() { // already done or not in file object if (FilePosition != 0 || XRefType != XRefObjType.InFile) { return; } // save file position for this object FilePosition = Document.PdfFile.BaseStream.Position; // write object header Document.PdfFile.WriteFormat("{0} 0 obj\n", ObjectNumber); // stream object if (ObjectType == ObjectType.Stream) { // convert byte list to array if (ObjectValueList.Count > 0) { ObjectValueArray = ObjectValueList.ToArray(); } // object value is empty if (ObjectValueArray == null) { ObjectValueArray = new byte[0]; } // compress the stream and update dictionary if successful if (!NoCompression && PdfDocument.CompressStream(ref ObjectValueArray)) { Dictionary.Add("/Filter", "/FlateDecode"); } // encryption if (Document.Encryption != null) { ObjectValueArray = Document.Encryption.EncryptByteArray(ObjectNumber, ObjectValueArray); } // stream length Dictionary.AddInteger("/Length", ObjectValueArray.Length); // write dictionary Document.PdfFile.Write(Dictionary.ToByteArray()); // write stream reserved word Document.PdfFile.WriteString("stream\n"); // write content to pdf file Document.PdfFile.Write(ObjectValueArray); // write end of stream Document.PdfFile.WriteString("\nendstream\nendobj\n"); } else { // write dictionary Document.PdfFile.Write(Dictionary.ToByteArray()); // write end of object Document.PdfFile.WriteString("\nendobj\n"); } // this indirect object was written to output file // tell the garbage collector that these objects are not used any more Dictionary = null; ObjectValueList = null; ObjectValueArray = null; return; }