public void CanDecompressPngEncodedFlateStream() { // The Xref stream is encoded with parameters. // For flate as per http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf var bytes = File.ReadAllBytes(GetNthFilename()); var streamPosition = GetOffset(bytes, "stream"); var endStreamPosition = GetOffset(bytes, "endstream", streamPosition.end); var streamBytes = BytesBetween(streamPosition.end + 1, endStreamPosition.start - 1, bytes); var paramsDict = new DictionaryToken(new Dictionary <NameToken, IToken> { { NameToken.Predictor, new NumericToken(12) }, { NameToken.Columns, new NumericToken(4) } }); var dictionary = new DictionaryToken(new Dictionary <NameToken, IToken> { { NameToken.Filter, NameToken.FlateDecode }, { NameToken.DecodeParms, paramsDict } }); var filter = new FlateFilter(new DecodeParameterResolver(null), new PngPredictor(), null); var filtered = filter.Decode(streamBytes, dictionary, 0); var expected = "1 0 15 0 1 0 216 0 1 2 160 0 1 2 210 0 1 3 84 0 1 4 46 0 1 7 165 0 1 70 229 0 1 72 84 0 1 96 235 0 1 98 18 0 2 0 12 0 2 0 12 1 2 0 12 2 2 0 12 3 2 0 12 4 2 0 12 5 2 0 12 6 2 0 12 7 2 0 12 8" .Split(' ') .Select(byte.Parse).ToArray(); Assert.Equal(filtered, expected); }
public void CanDecompressPngEncodedFlateStream() { // The Xref stream is encoded with parameters. // For flate as per http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf var bytes = File.ReadAllBytes(GetNthFilename()); var streamPosition = GetOffset(bytes, "stream"); var endStreamPosition = GetOffset(bytes, "endstream", streamPosition.end); var streamBytes = BytesBetween(streamPosition.end + 1, endStreamPosition.start - 1, bytes); var paramsDict = new PdfDictionary(); paramsDict.Set(CosName.PREDICTOR, new CosFloat("12")); paramsDict.Set(CosName.COLUMNS, new CosFloat("4")); var dict = new PdfDictionary(); dict.Set(CosName.FILTER, CosName.FLATE_DECODE); dict.Set(CosName.DECODE_PARMS, paramsDict); var filter = new FlateFilter(new DecodeParameterResolver(null), new PngPredictor(), null); var filtered = filter.Decode(streamBytes, dict, 0); var expected = "1 0 15 0 1 0 216 0 1 2 160 0 1 2 210 0 1 3 84 0 1 4 46 0 1 7 165 0 1 70 229 0 1 72 84 0 1 96 235 0 1 98 18 0 2 0 12 0 2 0 12 1 2 0 12 2 2 0 12 3 2 0 12 4 2 0 12 5 2 0 12 6 2 0 12 7 2 0 12 8" .Split(' ') .Select(byte.Parse).ToArray(); Assert.Equal(filtered, expected); }
private byte[] CompressBytes() { using (var memoryStream = new MemoryStream(fontFileBytes.ToArray())) { var parameters = new DictionaryToken(new Dictionary <NameToken, IToken>()); var flater = new FlateFilter(new DecodeParameterResolver(new NoOpLog()), new PngPredictor(), new NoOpLog()); var bytes = flater.Encode(memoryStream, parameters, 0); return(bytes); } }
public static byte[] CompressBytes(byte[] bytes) { using (var memoryStream = new MemoryStream(bytes)) { var parameters = new DictionaryToken(new Dictionary <NameToken, IToken>()); var flater = new FlateFilter(); var result = flater.Encode(memoryStream, parameters, 0); return(result); } }