Example #1
0
        void CreateEncrypt(PdfElement elem)
        {
            var cf = elem.Get <PdfElement>("CF");

            if (cf != null)
            {
                var stdCf = cf.Get <PdfElement>("StdCF");
                if (stdCf != null)
                {
                }
            }
            var pValue = elem.Get <PdfInteger>("P").Value;
            var vValue = elem.Get <PdfInteger>("V").Value;
            var rValue = elem.Get <PdfInteger>("R").Value;
            var oValue = elem.Get <PdfString>("O").ToISOBytes();
            var uValue = elem.Get <PdfString>("U").ToISOBytes();
            var filter = elem.Get <PdfName>("Filter")?.Name;

            EncryptAlg cryptoMode = EncryptAlg.STANDARD_ENCRYPTION_128;

            switch (rValue)
            {
            case 4:
                if (vValue != 4)
                {
                    throw new PdfException($"Invalid encrypt. V={vValue}, P={vValue}");
                }
                var cfObj    = elem.Get <PdfDictionary>("CF");
                var stdCfObj = cfObj.Get <PdfDictionary>("StdCF");
                if (stdCfObj != null)
                {
                    if (stdCfObj.Get <PdfName>("CFM")?.Name == "V2")
                    {
                        cryptoMode = EncryptAlg.STANDARD_ENCRYPTION_128;
                    }
                }
                break;

            default:
                throw new NotImplementedException($"Decrypt value {rValue}");
            }

            _decryptor = new PdfEncryption();
            _decryptor.SetCryptoMode(cryptoMode, 0);

            if (filter == "Standard")
            {
                if (rValue != 5)
                {
                    _decryptor.SetupByOwnerPassword(_documentId, uValue, oValue, pValue);
                    Int32 checkLen = (rValue == 3 || rValue == 4) ? 16 : 32;
                    if (!EqualsArray(uValue, _decryptor.UserKey, checkLen))
                    {
                        _decryptor.SetupByUserPassword(_documentId, oValue, pValue);
                    }
                }
            }
        }
Example #2
0
        void ParseObjStream(PdfElement elem)
        {
            PdfStream stream = elem.Get <PdfStream>("_stream");
            var       ms     = new MemoryStream(stream.Bytes);

            using (var br = new BinaryReader(ms))
            {
                PdfReader rdr = PdfReader.Create(br);
                foreach (var obj in rdr.ReadObjStream())
                {
                    var name = $"{obj.Item1} 0";
                    if (obj.Item2 is PdfDictionary objDict)
                    {
                        AddObject(name, objDict);
                    }
                }
            }
        }
Example #3
0
        public void AddObject(String name, PdfDictionary dict)
        {
            var type = dict.Get <PdfName>("Type");
            var elem = PdfElement.Create(type, dict, this);

            _objects.Add(name, elem);

            if (type != null)
            {
                switch (elem)
                {
                case PdfCatalog catalog:
                    _catalog = catalog;
                    break;

                case PdfXRef xref:
                    _xRefs.Add(xref);
                    break;

                case PdfPages pages:
                    foreach (var pageRef in pages.Kids())
                    {
                        _pageRefs.Add(pageRef);
                    }
                    break;

                case PdfPage page:
                    _pages.Add(name, page);
                    break;

                case PdfFont font:
                    _fonts.Add(name, font);
                    break;

                case PdfExtGState extGState:
                    _extGState = extGState;
                    break;
                }
            }
        }
Example #4
0
 protected PdfElement(PdfElement elem)
 {
     _dict = elem._dict;
 }
 public PdfResource(PdfElement elem, PdfFile file)
     : base(elem)
 {
     _file = file;
 }
 public PdfContentBlock(PdfElement elem, PdfFile file, PdfPage page)
     : base(elem)
 {
     _file = file;
     _page = page;
 }