public override void ToPdf(PdfWriter writer, Stream os)
{
if (inputStream != null && compressed)
{
Put(PdfName.FILTER, PdfName.FLATEDECODE);
}
PdfEncryption crypto = null;
if (writer != null)
{
crypto = writer.Encryption;
}
if (crypto != null)
{
PdfObject filter = Get(PdfName.FILTER);
if (filter != null)
{
if (PdfName.CRYPT.Equals(filter))
{
crypto = null;
}
else if (filter.IsArray())
{
PdfArray a = ((PdfArray)filter);
if (a.Size > 0 && PdfName.CRYPT.Equals(a[0]))
{
crypto = null;
}
}
}
}
PdfObject nn = Get(PdfName.LENGTH);
if (crypto != null && nn != null && nn.IsNumber())
{
int sz = ((PdfNumber)nn).IntValue;
Put(PdfName.LENGTH, new PdfNumber(crypto.CalculateStreamSize(sz)));
SuperToPdf(writer, os);
Put(PdfName.LENGTH, nn);
}
else
{
SuperToPdf(writer, os);
}
os.Write(STARTSTREAM, 0, STARTSTREAM.Length);
if (inputStream != null)
{
rawLength = 0;
ZDeflaterOutputStream def = null;
OutputStreamCounter osc = new OutputStreamCounter(os);
OutputStreamEncryption ose = null;
Stream fout = osc;
if (crypto != null && !crypto.IsEmbeddedFilesOnly())
{
fout = ose = crypto.GetEncryptionStream(fout);
}
if (compressed)
{
fout = def = new ZDeflaterOutputStream(fout, compressionLevel);
}
byte[] buf = new byte[4192];
while (true)
{
int n = inputStream.Read(buf, 0, buf.Length);
if (n <= 0)
{
break;
}
fout.Write(buf, 0, n);
rawLength += n;
}
if (def != null)
{
def.Finish();
}
if (ose != null)
{
ose.Finish();
}
inputStreamLength = (int)osc.Counter;
}
else
{
if (crypto != null && !crypto.IsEmbeddedFilesOnly())
{
byte[] b;
if (streamBytes != null)
{
b = crypto.EncryptByteArray(streamBytes.ToArray());
}
else
{
b = crypto.EncryptByteArray(bytes);
}
os.Write(b, 0, b.Length);
}
else
{
if (streamBytes != null)
{
streamBytes.WriteTo(os);
}
else
{
os.Write(bytes, 0, bytes.Length);
}
}
}
os.Write(ENDSTREAM, 0, ENDSTREAM.Length);
}