public void FlateCompress(int compressionLevel)
{
if (!Document.Compress)
return;
// check if the flateCompress-method has already been used
if (compressed) {
return;
}
this.compressionLevel = compressionLevel;
if (inputStream != null) {
compressed = true;
return;
}
// check if a filter already exists
PdfObject filter = PdfReader.GetPdfObject(Get(PdfName.FILTER));
if (filter != null) {
if (filter.IsName()) {
if (PdfName.FLATEDECODE.Equals(filter))
return;
}
else if (filter.IsArray()) {
if (((PdfArray) filter).Contains(PdfName.FLATEDECODE))
return;
}
else {
throw new PdfException(MessageLocalization.GetComposedMessage("stream.could.not.be.compressed.filter.is.not.a.name.or.array"));
}
}
// compress
MemoryStream stream = new MemoryStream();
ZDeflaterOutputStream zip = new ZDeflaterOutputStream(stream, compressionLevel);
if (streamBytes != null)
streamBytes.WriteTo(zip);
else
zip.Write(bytes, 0, bytes.Length);
//zip.Close();
zip.Finish();
// update the object
streamBytes = stream;
bytes = null;
Put(PdfName.LENGTH, new PdfNumber(streamBytes.Length));
if (filter == null) {
Put(PdfName.FILTER, PdfName.FLATEDECODE);
}
else {
PdfArray filters = new PdfArray(filter);
filters.Add(PdfName.FLATEDECODE);
Put(PdfName.FILTER, filters);
}
compressed = true;
}