public override void ToPdf(PdfWriter writer, Stream os) { byte[] b = PdfReader.GetStreamBytesRaw(this); PdfEncryption crypto = null; if (writer != null) { crypto = writer.Encryption; } PdfObject objLen = Get(PdfName.LENGTH); int nn = b.Length; if (crypto != null) { nn = crypto.CalculateStreamSize(nn); } Put(PdfName.LENGTH, new PdfNumber(nn)); SuperToPdf(writer, os); Put(PdfName.LENGTH, objLen); os.Write(STARTSTREAM, 0, STARTSTREAM.Length); if (length > 0) { if (crypto != null && !crypto.IsEmbeddedFilesOnly()) { b = crypto.EncryptByteArray(b); } os.Write(b, 0, b.Length); } os.Write(ENDSTREAM, 0, ENDSTREAM.Length); }
private void SerObject(PdfObject obj, int level, ByteBuffer bb, HashSet2 <PdfObject> serialized) { if (level <= 0) { return; } if (obj == null) { bb.Append("$Lnull"); return; } if (obj.IsIndirect()) { if (serialized.Contains(obj)) { return; } else { serialized.Add(obj); } } obj = PdfReader.GetPdfObject(obj); if (obj.IsStream()) { bb.Append("$B"); SerDic((PdfDictionary)obj, level - 1, bb, serialized); if (level > 0) { bb.Append(DigestAlgorithms.Digest("MD5", PdfReader.GetStreamBytesRaw((PRStream)obj))); } } else if (obj.IsDictionary()) { SerDic((PdfDictionary)obj, level - 1, bb, serialized); } else if (obj.IsArray()) { SerArray((PdfArray)obj, level - 1, bb, serialized); } else if (obj.IsString()) { bb.Append("$S").Append(obj.ToString()); } else if (obj.IsName()) { bb.Append("$N").Append(obj.ToString()); } else { bb.Append("$L").Append(obj.ToString()); } }
private void serObject(PdfObject obj, int level, ByteBuffer bb) { if (level <= 0) { return; } if (obj == null) { bb.Append("$Lnull"); return; } obj = PdfReader.GetPdfObject(obj); if (obj.IsStream()) { bb.Append("$B"); serDic((PdfDictionary)obj, level - 1, bb); if (level > 0) { using (var md5 = MD5.Create()) { bb.Append(md5.ComputeHash(PdfReader.GetStreamBytesRaw((PrStream)obj))); } } } else if (obj.IsDictionary()) { serDic((PdfDictionary)obj, level - 1, bb); } else if (obj.IsArray()) { serArray((PdfArray)obj, level - 1, bb); } else if (obj.IsString()) { bb.Append("$S").Append(obj.ToString()); } else if (obj.IsName()) { bb.Append("$N").Append(obj.ToString()); } else { bb.Append("$L").Append(obj.ToString()); } }
private void SerObject(PdfObject obj, int level, ByteBuffer bb) { if (level <= 0) { return; } if (obj == null) { bb.Append("$Lnull"); return; } obj = PdfReader.GetPdfObject(obj); if (obj.IsStream()) { bb.Append("$B"); SerDic((PdfDictionary)obj, level - 1, bb); if (level > 0) { bb.Append(PdfEncryption.DigestComputeHash("MD5", PdfReader.GetStreamBytesRaw((PRStream)obj))); } } else if (obj.IsDictionary()) { SerDic((PdfDictionary)obj, level - 1, bb); } else if (obj.IsArray()) { SerArray((PdfArray)obj, level - 1, bb); } else if (obj.IsString()) { bb.Append("$S").Append(obj.ToString()); } else if (obj.IsName()) { bb.Append("$N").Append(obj.ToString()); } else { bb.Append("$L").Append(obj.ToString()); } }
private void SerObject(PdfObject obj, int level, ByteBuffer bb, Dictionary <RefKey, int> serialized) { if (level <= 0) { return; } if (obj == null) { bb.Append("$Lnull"); return; } PdfIndirectReference refe = null; ByteBuffer savedBb = null; if (obj.IsIndirect()) { refe = (PdfIndirectReference)obj; RefKey key = new RefKey(refe); if (serialized.ContainsKey(key)) { bb.Append(serialized[key]); return; } else { savedBb = bb; bb = new ByteBuffer(); } } obj = PdfReader.GetPdfObject(obj); if (obj.IsStream()) { bb.Append("$B"); SerDic((PdfDictionary)obj, level - 1, bb, serialized); if (level > 0) { bb.Append(DigestAlgorithms.Digest("MD5", PdfReader.GetStreamBytesRaw((PRStream)obj))); } } else if (obj.IsDictionary()) { SerDic((PdfDictionary)obj, level - 1, bb, serialized); } else if (obj.IsArray()) { SerArray((PdfArray)obj, level - 1, bb, serialized); } else if (obj.IsString()) { bb.Append("$S").Append(obj.ToString()); } else if (obj.IsName()) { bb.Append("$N").Append(obj.ToString()); } else { bb.Append("$L").Append(obj.ToString()); } if (savedBb != null) { RefKey key = new RefKey(refe); if (!serialized.ContainsKey(key)) { serialized[key] = CalculateHash(bb.Buffer); } savedBb.Append(bb); } }