internal override void pdfWriteToDocument(PdfDocumentWriter document, PdfStreamWriter writer) { writer.WriteDictionaryBegin(); { writer.WriteName("Type"); writer.WriteName("XObject"); writer.WriteName("Subtype"); writer.WriteName("Image"); writer.WriteName("Width"); writer.WriteInteger(_width); writer.WriteName("Height"); writer.WriteInteger(_height); writer.WriteName("ColorSpace"); writer.WriteName("DeviceRGB"); writer.WriteName("BitsPerComponent"); writer.WriteInteger(_bitsPerComponent); writer.WriteName("Filter"); writer.WriteName("DCTDecode"); writer.WriteName("Interpolate"); writer.WriteBoolean(true); writer.WriteName("Length"); writer.WriteInteger(_imageDataLength); } writer.WriteDictionaryEnd(); writer.WriteStream(_imageData, _imageDataLength); }
private void _writeContent(PdfStreamWriter writer, string filter, StreamBuffer buffer) { writer.WriteDictionaryBegin(); if (filter != null) { writer.WriteName("Filter"); writer.WriteName(filter); } writer.WriteName("Length"); writer.WriteInteger((int)buffer.Length); writer.WriteDictionaryEnd(); writer.WriteStream(buffer.GetBuffer(), (int)buffer.Length); _dataStream.Dispose(); _dataStream = null; // Release datastream for less memory usage }
private void _writeTrailer() { using (var compressStream = new StreamBuffer()) { var posXrefTable = _writer.PdfPosition; var objref = new PdfWriterReference(_xrefTable.Count) { Position = _writer.PdfPosition }; _xrefTable.Add(objref); string filter = "FlateDecode"; using (var compressWriter = PdfFilter.GetCompressor(filter, compressStream)) { byte[] buf = new byte[6]; for (int i = 0; i < _xrefTable.Count; ++i) { var e = _xrefTable[i]; if (e != null) { if (e.CompressedObjId > 0) { buf[0] = 2; buf[1] = (byte)(e.CompressedObjId >> 24); buf[2] = (byte)(e.CompressedObjId >> 16); buf[3] = (byte)(e.CompressedObjId >> 8); buf[4] = (byte)(e.CompressedObjId); buf[5] = (byte)(e.Position); } else { buf[0] = 1; buf[1] = (byte)(e.Position >> 24); buf[2] = (byte)(e.Position >> 16); buf[3] = (byte)(e.Position >> 8); buf[4] = (byte)(e.Position); buf[5] = 0; } } else { buf[0] = 0; buf[1] = 0; buf[2] = 0; buf[3] = 0; buf[4] = 0; buf[5] = 255; } compressWriter.Write(buf, 0, buf.Length); } } _writer.WriteInteger(objref.Id); _writer.WriteInteger(0); _writer.WriteObjBegin(); _writer.WriteDictionaryBegin(); _writer.WriteName("Type"); _writer.WriteName("XRef"); _writer.WriteName("W"); _writer.WriteArrayBegin(); _writer.WriteInteger(1); _writer.WriteInteger(4); _writer.WriteInteger(1); _writer.WriteArrayEnd(); _writer.WriteName("Index"); _writer.WriteArrayBegin(); _writer.WriteInteger(0); _writer.WriteInteger(_xrefTable.Count); _writer.WriteArrayEnd(); _writer.WriteName("Size"); _writer.WriteInteger(_xrefTable.Count); _writer.WriteName("Root"); _writer.WriteReference(GetReference(_catalog)); _writer.WriteName("Info"); _writer.WriteReference(GetReference(_documentInfo)); _writer.WriteName("ID"); _writer.WriteArrayBegin(); _writer.WriteStringHex(System.Guid.NewGuid().ToByteArray()); _writer.WriteStringHex(System.Guid.NewGuid().ToByteArray()); _writer.WriteArrayEnd(); _writer.WriteName("Filter"); _writer.WriteName(filter); _writer.WriteName("Length"); _writer.WriteInteger((int)(compressStream.Length)); _writer.WriteDictionaryEnd(); _writer.WriteStream(compressStream.GetBuffer(), (int)(compressStream.Length)); _writer.WriteObjEnd(); _writer.WriteNewLine(); _writer.WriteEOF(posXrefTable); } }