Beispiel #1
0
        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);
        }
Beispiel #2
0
        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");
            }
        }