private void writeTrailer(Stream writer, PDFDictionary trailer) { string trailerHeader = "trailer\n"; writer.Write(System.Text.Encoding.ASCII.GetBytes(trailerHeader), 0, trailerHeader.Length); SaveParameters param = new SaveParameters(writer); param.WriteInheritableObjects = false; trailer.Write(param); writer.Write(System.Text.Encoding.ASCII.GetBytes("\n"), 0, 1); }
public void Write(SaveParameters param) { _stream.Position = 0; MemoryStream output = _stream; //set compression bool filter = false; if (param.Compression == Compression.Flate) { PDFName subtype = (PDFName)_dictionary["Subtype"]; Filter[] filters = getFilters(); if (subtype != null && subtype.GetValue() == "Image" && filters.Length > 0 && filters[0] == Filter.DCT) { output = param.Buffer; output.SetLength(0); _stream.WriteTo(output); filter = true; } else if (param.Compression != Compression.None && getFilters().Length == 0) { output = param.Buffer; output.SetLength(0); FlateDecoder.Code(_stream, output); _dictionary.AddItem("Filter", new PDFName("FlateDecode")); filter = true; } } //set encryption if (param.Encryptor != null) { param.Encryptor.ResetObjectReference(param.ObjNo, param.GenNo, DataType.Stream); if (filter) { byte[] buffer = output.GetBuffer(); int length = (int)output.Length; output.SetLength(0); param.Encryptor.Encrypt(buffer, 0, length, output, DataType.Stream); } else { output = param.Buffer; output.SetLength(0); param.Encryptor.Encrypt(_stream.GetBuffer(), 0, (int)_stream.Length, output, DataType.Stream); } } output.Position = 0; _dictionary.AddItem("Length", new PDFNumber(output.Length)); _dictionary.Write(param); param.Stream.Write(StartStream, 0, StartStream.Length); param.Stream.Write(output.GetBuffer(), 0, (int)output.Length); param.Stream.Write(EndStream, 0, EndStream.Length); if (filter) { _dictionary.RemoveItem("Filter"); } }