예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
 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);
     }
 }
예제 #4
0
 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);
     }
 }