Пример #1
0
        public void Decode_FlateDecode_PngPredictor_Up()
        {
            //Contents:
            // 711 0 obj
            // <</DecodeParms
            //  <</Columns 4/Predictor 12>>
            //  /Filter /FlateDecode
            //  /ID[<8826D7FB49D6D5A039A65154F309C2AB><99F0493FB972254F87B930756174CF99>]
            //  /Index[703 14]
            //  /Info 702 0 R
            //  /Length 58
            //  /Prev 6238004
            //  /Root 704 0 R
            //  /Size 717
            //  /Type /XRef
            //  /W[1 2 1]>>
            // stream ...
            //endstream
            //endobj
            var base64XrefStream =
                @"NzExIDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRl
ci9GbGF0ZURlY29kZS9JRFs8ODgyNkQ3RkI0OUQ2RDVBMDM5QTY1MTU0RjMwOUMyQUI+PDk5RjA0
OTNGQjk3MjI1NEY4N0I5MzA3NTYxNzRDRjk5Pl0vSW5kZXhbNzAzIDE0XS9JbmZvIDcwMiAwIFIv
TGVuZ3RoIDU4L1ByZXYgNjIzODAwNC9Sb290IDcwNCAwIFIvU2l6ZSA3MTcvVHlwZS9YUmVmL1db
MSAyIDFdPj5zdHJlYW0NCmjeYmJkEGBgYmDuBRIMoUCCcSOIUAQRS4EEVyuQYNkDJN6cYmBiZPID
qWNgRCL+/xf6CxBgAO9WCPMNCmVuZHN0cmVhbQ1lbmRvYmo=";
            var       xrefStream = PdfObject.ParseAny(base64XrefStream.Base64ToLexer()) as PdfIndirectObject;
            PdfStream pdfStream  = xrefStream.Object as PdfStream;
            var       data       = pdfStream.Decode();

            String hex = data.ToHexString();

            // known good result:
            Assert.Equal("0100100001039d000103f2000104a3000105c400010669000110ee000114aa00010074000202c2000202c2010202c2020202c2030101d400", hex);
        }
Пример #2
0
        public void Parsing_CompressedXRef()
        {
            //703 0 obj
            //<</Linearized 1/L 6239811/O 705/E 139504/N 24/T 6238003/H [468 457]>>

            /* 43 0 obj
<< /Linearized   1.0   % Version
 /L   54567 % File length
 /H   [ 475 598 ]  % Primary hint stream offset and length (part 5)
 /O   45    % Object number of first page’s page object (part 6)
 /E   5437  % Offset of end of first page
 /N   11    % Number of pages in document
 /T   52786 % Offset of first entry in main cross-reference table (part 11)
*/
            var base64XrefStream =
@"NzExIDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRl
ci9GbGF0ZURlY29kZS9JRFs8ODgyNkQ3RkI0OUQ2RDVBMDM5QTY1MTU0RjMwOUMyQUI+PDk5RjA0
OTNGQjk3MjI1NEY4N0I5MzA3NTYxNzRDRjk5Pl0vSW5kZXhbNzAzIDE0XS9JbmZvIDcwMiAwIFIv
TGVuZ3RoIDU4L1ByZXYgNjIzODAwNC9Sb290IDcwNCAwIFIvU2l6ZSA3MTcvVHlwZS9YUmVmL1db
MSAyIDFdPj5zdHJlYW0NCmjeYmJkEGBgYmDuBRIMoUCCcSOIUAQRS4EEVyuQYNkDJN6cYmBiZPID
qWNgRCL+/xf6CxBgAO9WCPMNCmVuZHN0cmVhbQ1lbmRvYmo=";

            var xrefStream = PdfObject.ParseAny(base64XrefStream.Base64ToLexer()) as PdfIndirectObject;
            PdfStream pdfStream = xrefStream.Object as PdfStream;
            var data = pdfStream.Decode();

            String hex = data.ToHexString();

            // known good result:
            Assert.Equal("0100100001039d000103f2000104a3000105c400010669000110ee000114aa00010074000202c2000202c2010202c2020202c2030101d400", hex);

            // this yields now a decoded buffer that needs to get decoded further using PNG algos
            // W[1 2 1] (4 columns) 
            // W[1 3 1] (5 columns, larger indexes)

            // needed to resolve the values for refs encoded with 2
            var base64Object706 = @"NzA2IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCAzMC9MZW5ndGggMTkzL04gNC9U
eXBlL09ialN0bT4+c3RyZWFtDQpo3kSOwQ6CMBBEf2W/wG0BARPSRFAJBwKxHkwIh1qrUcES6EH/
3gIaTzO78zKZgDpAIKAuUOpZ9YC6rtUlUD+EKMJEN7rnnZBqPAZ/YgnsrQ8n3nrGcPsyKTfCjFTK
6dQwJ2WvJVemwnKzw6wVVxXXeCxOdyWNhbN2hMkMM1ZhliSxGNQZAhKO37pCrjrRC3PTT4wbIR+/
DRZZTYjtKUq4iGZQ1uRAka+/J8+BLIiDh3en/itRd3PO2EeAAQDI4UbhDQplbmRzdHJlYW0NZW5k
b2JqDQ==";

            // this contains the rest of the refs
            var base64Object559 = @"NTU5IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA1L1ByZWRpY3RvciAxMj4+L0ZpbHRl
ci9GbGF0ZURlY29kZS9JRFs8ODgyNkQ3RkI0OUQ2RDVBMDM5QTY1MTU0RjMwOUMyQUI+PDk5RjA0
OTNGQjk3MjI1NEY4N0I5MzA3NTYxNzRDRjk5Pl0vSW5mbyA3MDIgMCBSL0xlbmd0aCAxNTQ2L1Jv
b3QgNzA0IDAgUi9TaXplIDcwMy9UeXBlL1hSZWYvV1sxIDMgMV0+PnN0cmVhbQ0KaN7sl2lsVVUQ
x+855769rxstLaGlaHFBlKUIQsoSQC2C0igmiGiCKShScQcEUYIYYqIsSuIWEUvEWEMrYixqgsao
RMVIsKjgRkoENSqicaks1s7vkDf3iyR85334ZzJn7sycWc+zgfyssX0PBzYITItgMBn6fuUUgfZK
OJXILBEcNBHOasG6BuiFgtVrBQuTgrGrkH9ZMN6/G832aiR/Vr6d0o1u51z434FefoOgW47MA/Lt
1HGC478QTvZu9H8sOPgRON7DQtXsLu7G2LYV3ZjoEBm7vl00tO2X05lFgj1f4Kvjajf5S85i4O6D
vgda0GSGCI7mFpkqoQ+tgb5QMDFcOFsnwRkMB4tH70V/P7ViLTpHdWM4eT38w3oa7tHTOmJljkW+
/R68BJyHJLby8CpvChrEt7AP+TL/RDQTPdsoXrnZZCpGJGcJpyODZCwn7/I7hG6pkNOD4o85ch2n
/6rO2FR8oCpsDYiMuzbiIVHK+1Q07MX/xGd8y00bJDImdRmcLYJbiE+GukosxtaLZLZVJOf72hsL
voLMeE7hBLWCG8nFQOyWzRBs3C2chUboO36icvZqNZo/BdNfCpZWYF3yaCo2Ct3rcsE+i5C8CCve
rr/1XdzxFrXuboMmAhn6YtXD0L7O3xbNi5+hbn12nHBW30CUkJzka3KA2orH0bw00qd86xbp3c2H
+IMVezP6z4DPfU29WNk3E/77cLaDdcJvvx7rQ4VOjsNb0WY6qTRTq9GONWtm7Xnw/d2HwemCfg3+
BuWHo/mW+eCyObuBeV2w4BxOv0FyBHypxvQMPDFDItbx0z7ILcS6vVHq3zQdFE7rpZEa9vIlyPuv
vB7fQb4f6W7zjnqV7STa+2R6rJPaMwd+JBpk2TJzQuZGsJVvm3ViGCTTElWzcppg9unclDuRxxFz
sEW9WT9tAq1w25fTp+AMB6tUv30W7AGO5JTpZ9FsVuq8sn6ytYF0sfkkMmf2RLJPr9mzBXtQXZYe
MeSigG9DIhMy5cJZRKOc+m9EvpSI7eL0D/w/BP8l4r8JbWM4pb9Cqtfu1zkWNEdOn9PbOerW0aGu
FT2+ur6iVqlw8yYcqSITevkj4BP0bE/B6Wyx/g8JVtBTldeI/AKfi2n4TzSqF0fsMjfcu/jjZ7L3
kCpy1I97VT0MqVW7DZpKcGAKb5NMAyf9FeTjefgk6CcGE6xkFTGXaWPSZfDxMByrU9RLhldDDwR9
rM4FL+CUenM+F9S/wwdHBl2bRslwd/OtZjxGHSZbtHfCUWSc3bEEnb1lwpgCNsgEpmj2JnQOUPkw
Bacr4gMc+znRZmK4v6EPQPeH5tRRpTGf91+hH41oZtcnplMDPnqbNBcn+pGOtu/BeQy6STsoLx9E
PhwUiaT3mQng2LmuHWQap86CXpCbLaZqM/Tv8JmEQaT7LK8gS2zDPuSduxTjTyGTOU02XaHufbuD
OJD9+Gadh3HeQkl2RKIADtGOUW+uVN9sjm+rlwkO+Fr8nLAb/p3w2W4VP5BTYu7okfgH0CuwgmSc
WW3JwhjeQs6/DPeBzIQEkUzhW8rXHpFMLWOP3IoV7tuD2ivCSskV3B2f3Ufs6OeJCe+6dD0a0BN/
HBleC2lmXRn7IuTVkfQvAZntpqEp9+oLSpgqxVRdAZsiNVtflfYtkCwn6OgEfsZ36+vRbyU/W7LM
OjdL95eftymftfl43lvfpSF9WnW+eFXJLu7HG6+KCVMOXcS0TDD/a5iN+cyHOHdMk4WQvZmR6jJn
NqjmuN9lZDDRoH104kX9W6QLmFQ19dpfJdw9w3wonaPxd3ji/uLbN6Dz0On/BSBve/EWIobJZt1Z
fpf57RaOj7wNmAn56E8elU09kV1mUrqdQ95XdqlG2N6e+99havl/kZUMmnk7tGKHkmXDG76BCjFM
v4Asj2RrD1urbw83V2mPCb+7mQ8B9VnAtDf0rOm+u2natZNTHwfZk6eCYSfIt7yrA24d4HMQi2Aa
xG7AGy+gHwOqNygG6eigNCJZru8rszzCz4voPFWfT+NpPDmadSc9Paa07fofmeP/CTAAUeNQwA0K
ZW5kc3RyZWFtDWVuZG9iag0=";
            xrefStream = PdfObject.ParseAny(base64Object559.Base64ToLexer()) as PdfIndirectObject;
            pdfStream = xrefStream.Object as PdfStream;
            data = pdfStream.Decode();

            hex = data.ToHexString();
            var expectedResult =
"0000000000010220f0000102219d00010221e80001022266000102231300010234c0000102361100" +
"0102372e00010237aa00010266f20001026781000102aee4000102af5b000102d2ee000102e2f600" +
"0102e748000102e7f7000102ed20000103b343000103b42f000103b4de000103b62c000106859600" +
"0106867a00010687290001068dcb000106904e00010692d0000107e51100010827e8000108345c00" +
"0108392800010869b40001087605000108771500010877c40001087a0800010d378e000114181a00" +
"0116b7ed0001176dcf000117cde0000117e386000117e483000117e532000117ed1f000117efa100" +
"0117f21e000117f496000117f70e000118023f0001193f620001194a8100011a381100011a434500" +
"011a4a7b00011b01c500011b0cf500011b13c800011c0e4300011c0f6700011c101600011c121800" +
"011c155400012060f300012061e30001206292000120666a00012069a6000124b092000124b18e00" +
"0124b23d000124b424000124b669000124b8d6000124bb06000124c729000124d377000124d79600" +
"0128f5b3000128f6ac000128f75b000128fb32000128fd9d00012900020001291007000129156b00" +
"012af67600012af77b00012af82a00012d060b00012db32700012e996300012f93bf00012f94bd00" +
"012f956c00012f9abf00012f9d3b00012f9f6d00012fa1c900012fa42300012fa69000012fa92000" +
"012fb5f20001308ed900013095ae0001309a86000130fdaa00013106f30001310ba5000131bda700" +
"0131c80a000131cf84000131d02c000131d0da0001324522000132466100013247120001324e5400" +
"01324e930001324ece000132f304000133219400013338ef000133a3c30001341ac40001348baf00" +
"0134bb88000134bc74000134bd69000134c743000134dc5f000134e7a9000135034e0001351c9a00" +
"01353a130001353b4a0001353bfb000135427700013544ea000135475600013547910001354a0000" +
"01354a5a00013555d1000135e35c000135eec6000135ef850001366921000136761a000136771d00" +
"0137067e00013712090001375c060001375d310001375de200013763e8000137666700013766b200" +
"013767ab0001376a240001376a630001376b2c0001376d960001376fff0001377c200001377d0b00" +
"01377e5a0001385dba0001386a7f0001386b450001386c8c0001393fe90001394b1c00013a535d00" +
"013a5e2600013b566b00013b57a600013b585700013b5d0000013b5f6d00013b619700013b620300" +
"013b623800013b643700013b64ec00013b658e00013b65c300013b690000013b6e9300013b71a000" +
"013b72e700013b739f00013b82c600013b87a300013b8bdb00013b8ce6000145e727000145e85800" +
"0145e909000145ee66000145f0ea000145fd140001476344000148042a000148b270000148b37500" +
"0148b426000148b93a000148bb97000148bdc8000148beaf000148c0d3000148c14b000148c20c00" +
"0148c519000148d211000148d8f000014d756a00014e5a5300014e65c600014e679200014e6b3800" +
"014e6bef00014e6c9800014e6e1a00014e6f0300014e79c900014f062000015013ba000150150800" +
"015015b90001504d2100015050160001505203000150540300015055ab00015057cb0001505a6400" +
"01505b9a0001505cb90001505e3b00015060d900015062ec000150642500015065b1000150676200" +
"015068ef0001506a670001506c0d0001506dc30001506ea40001506f720001507062000150713a00" +
"015072000001507302000150752800015088a70001508aa80001508b850001509a660001509e7300" +
"0150a2a7000150a60b000150b123000150b88e000150baa3000150c074000150c468000150c75600" +
"0150c900000150ceac000150cfea000150d3c4000150d70f000150d9f1000150db36000150dbdf00" +
"0150dfb9000150e359000150e592000150e87d000150eb69000150ee17000150ef16000150eff100" +
"0150fb5a000150fc14000150fccc00015100b700015103b10001510648000151245e0001517d0b00" +
"0151a693000151c2be000151df16000152557e00015258d50001525e9b0001528115000152840000" +
"0152875b0001528a1e0001528cf60001528fd00001529301000152962500015299d80001529cc400" +
"0152a005000152a2c2000152a6ab000152a994000152b26f000152bac9000152bdfc000152cb6500" +
"0152cffd000152d338000152d67a000152ea08000152f954000153036b00015306d30001530a1200" +
"01530da200015310e4000153143800015317660001531a9f0001531dc700015320f4000153244200" +
"015327360001532a4a0001532d250001533059000153330f00015336090001533760000153383e00" +
"0153391b0001533ec300015346700001534b840001534fc00001535a97000153d68b000153f1f500" +
"0154005a0001544333000154509a00015453c500015457010001545b0a0001545e09000154611d00" +
"0154642600015466fc0001546c680001546f5f0001547544000154786d0001547e43000154813300" +
"0154861f000154890e0001548e9f00015492db000154962c0001549d85000154a9c0000154ac6c00" +
"0154af1f000154b0c8000154b289000154b44d000154b5df000154b780000154b91e000154c52c00" +
"0154d1df000154d50e000154d83c000154db45000154de3d000154e139000154e40c000154e70900" +
"0154f02e000154f3a4000154f455000155130500015514f700015517210001551799000155193f00" +
"01551b470001551d2500015521430001552f3200015541c400015551e50001555b270001555e3700" +
"0155620f00015564da0001556af100015570a100015574d90001557a5c00015582bd00015589cc00" +
"01558ff700015594b400015597c900015598760001559b8d000155be0e000155e9ea0001562cbe00" +
"01562f30000156524c0001566e34000156795d0001567c73000156823b00015685c10001568d3300" +
"015693c600015695b2000156d32f000156d6ad000156d78c000156d899000156dfa7000156e82a00" +
"0156f157000156f585000156fe0600015706740001571106000157243a0001573502000157494f00" +
"01575364000157562e0001576dd20001577d46000157879500015790c30001579659000157992e00" +
"0157a3ba000157ba72000157bec5000157c60d000157c76a0001582a0b0001582d4f000158419400" +
"015853a8000158622c0001586b91000158713300015873f100015875e90001587cc3000158833100" +
"0158890500015889b40001588a6c0001588b26000158983e0001589ba2000158a035000158a2e600" +
"0158abf6000158af6b000158bf86000158ccfa000158d08a000158efb60001590c2000015930bf00" +
"01594f85000159672400015978f50001597fe2000159b120000159bf7a000159c506000159cf8c00" +
"0159d3c1000159deb300015a001600015a04a600015a0a0300015a0ceb00015a134e00015a164500" +
"015a16f400015a18e500015a198e00015a1bbf00015a4d0e00015a503700015a64f500015a6f4300" +
"015a84ab00015a877500015a8a6200015a8d5800015a8e1100015a911d00015a91ca00015aa21800" +
"015aa43100015abdd300015ac57c00015ac62400015ac91900015ac9ca00015acd0c00015acf7900" +
"015ad1e000015adfaa00015ae7a500015c2fc400015c30cd00015c317e00015c352300015c37a200" +
"015c3a0600015c3c7600015c4d2300015d88b200015d953600015e020100015e0d2a00015e406e00" +
"015e417f00015ea41500015ea53d00015ea5a200015ede1c00015f13af00015f13e400015f164e00" +
"015f168300015f16b800015f1d6f00015f1e3300015f1ec500015f2d2000015f2e2800015f2f3400" +
"02000003000200000f000200000f010200000f020200000f030200000f040200000f050200000f06" +
"0200000f070200000f080200001300020000170002000022000200002b000200003c000200004100" +
"0200004600020000500002000058000200005e00020000740002000088000200009a00020000b100" +
"020000c600020000ce00020000e60002000188000200020b0002000213000200021f000200022900" +
"02000229010200022902020002290302000229040200022905020002290602000229070200022908" +
"0200022909020002290a020002290b020002290c020002290d020002290e020002290f0200022910" +
"02000229110200022912020002291302000229140200022915020002291602000229170200022918" +
"0200022919020002291a020002291b020002291c020002291d020002291e020002291f0200022920" +
"02000229210200022922020002292302000229240200022925020002292602000229270200022928" +
"0200022929020002292a020002292b020002292c020002292d020002292e020002292f0200022930" +
"02000229310200022932020002293302000229340200022935020002293602000229370200022938" +
"0200022939020002293a020002293b020002293c020002293d020002293e020002293f0200022940" +
"02000229410200022942020002294302000229440200022945020002294602000229470200022948" +
"0200022949020002294a020002294b020002294c020002294d020002294e020002294f0200022950" +
"02000229510200022952020002295302000229540200022955020002295602000229570200022958" +
"0200022959020002295a020002295b020002295c020002295d020002295e020002295f0200022960" +
"0200022961020002296202000229630200022a000200022a010200022a020200022a030200022a04" +
"0200022b000200022b010200022d000200022d010200022d020200022d030200022e00";
            Assert.Equal(expectedResult, hex);
        }