Esempio n. 1
0
 public override void WriteFont(TPdfStream DataStream, TXRefSection XRef)
 {
     base.WriteFont(DataStream, XRef);
     FontDescriptorId = XRef.GetNewObject(DataStream);      //Font descriptor.
     CIDFontId        = XRef.GetNewObject(DataStream);      //CID Font.
     ToUnicodeId      = XRef.GetNewObject(DataStream);      //ToUnicode
     ToUnicodeLenId   = XRef.GetNewObject(DataStream);      //ToUnicodeLength
 }
Esempio n. 2
0
 public void WriteImage(TPdfStream DataStream, TXRefSection XRef)
 {
     TPdfBaseRecord.Write(DataStream, TPdfTokens.GetString(TPdfToken.ImgPrefix) + Id.ToString(CultureInfo.InvariantCulture) + " ");
     ImgObjId = XRef.GetNewObject(DataStream);
     TIndirectRecord.CallObj(DataStream, ImgObjId);
     if (FSMask != null)
     {
         SMaskId = XRef.GetNewObject(DataStream);
     }
 }
Esempio n. 3
0
        internal void BeginSave(TPdfStream DataStream, TXRefSection XRef, TPaperDimensions PageSize, TPdfSignature Signature, string aFallbackFontList, TFontEvents FontEvents)
        {
            CatalogId = XRef.GetNewObject(DataStream);
            int PageTreeId = XRef.GetNewObject(DataStream);

            PageTree = new TPageTreeRecord(PageTreeId, aFallbackFontList, Compress, FontEvents);
            Info     = new TInfoRecord();
            AcroForm = new TAcroFormRecord(Signature);
            Perms    = new TPermsRecord();

            CreateNewPage(DataStream, XRef, PageSize);
        }
Esempio n. 4
0
        private void CreateNewPage(TPdfStream DataStream, TXRefSection XRef, TPaperDimensions PageSize)
        {
            int PageId    = XRef.GetNewObject(DataStream);
            int ContentId = XRef.GetNewObject(DataStream);

            PageTree.AddPage(PageId, ContentId, PageSize);
            TIndirectRecord.SaveHeader(DataStream, ContentId);
            LengthId = XRef.GetNewObject(DataStream);
            TStreamRecord.BeginSave(DataStream, LengthId, Compress);
            DataStream.Compress = Compress;
            StartStream         = DataStream.Position;
        }
Esempio n. 5
0
        internal void SaveBookmarks(TPdfStream DataStream, TXRefSection XRef, int OutlinesId)
        {
            if (OutlinesId < 0)
            {
                return;
            }

            int FirstId = -1;
            int LastId  = -1;

            int NextId       = XRef.GetNewObject(DataStream);
            int AllOpenCount = 0;

            SaveBookmarkObjects(DataStream, XRef, Bookmarks, OutlinesId, NextId, ref FirstId, ref LastId, ref AllOpenCount);

            XRef.SetObjectOffset(OutlinesId, DataStream);
            TIndirectRecord.SaveHeader(DataStream, OutlinesId);
            TDictionaryRecord.BeginDictionary(DataStream);

            if (FirstId >= 0)
            {
                TDictionaryRecord.SaveKey(DataStream, TPdfToken.FirstName, TIndirectRecord.GetCallObj(FirstId));
                TDictionaryRecord.SaveKey(DataStream, TPdfToken.LastName, TIndirectRecord.GetCallObj(LastId));                  //LastId must be positive if FirstId is positive.
            }

            if (AllOpenCount > 0)
            {
                TDictionaryRecord.SaveKey(DataStream, TPdfToken.CountName, AllOpenCount);
            }


            TDictionaryRecord.EndDictionary(DataStream);
            TIndirectRecord.SaveTrailer(DataStream);
        }
Esempio n. 6
0
        internal void EndSave(TPdfStream DataStream, TXRefSection XRef, TPdfProperties Properties, TPdfSignature Signature)
        {
            FinishPage(DataStream, XRef);

            TPdfToken P = TPdfToken.None;

            switch (PageLayout)
            {
            case TPageLayout.Outlines: P = TPdfToken.UseOutlinesName; break;

            case TPageLayout.Thumbs: P = TPdfToken.UseThumbsName; break;

            case TPageLayout.FullScreen: P = TPdfToken.FullScreenName; break;
            }

            int OutlinesId = -1;

            if (Bookmarks.Count > 0)
            {
                OutlinesId = XRef.GetNewObject(DataStream);
            }

            TDocumentCatalogRecord.SaveToStream(DataStream, XRef, CatalogId, PageTree.Id, OutlinesId,
                                                AcroForm.GetId(DataStream, XRef), Perms.GetId(DataStream, XRef, AcroForm.SignatureFieldId(DataStream, XRef)), P);
            PageTree.SaveToStream(DataStream, XRef, AcroForm);
            SaveBookmarks(DataStream, XRef, OutlinesId);

            Info.SaveToStream(DataStream, XRef, Properties);

            Perms.SaveToStream(DataStream, XRef, AcroForm.SignatureFieldId(DataStream, XRef));

            AcroForm.SaveToStream(DataStream, XRef, PageTree.GetSigPage(Signature));             //We save it last because it needs to keep everything after it in memory for signing it.
        }
Esempio n. 7
0
        public void WriteGStateObject(TPdfStream DataStream, TXRefSection XRef)
        {
            XRef.SetObjectOffset(GStateObjId, DataStream);
            TIndirectRecord.SaveHeader(DataStream, GStateObjId);
            TDictionaryRecord.BeginDictionary(DataStream);
            TDictionaryRecord.SaveKey(DataStream, TPdfToken.TypeName, TPdfTokens.GetString(TPdfToken.ExtGStateName));
            TDictionaryRecord.SaveKey(DataStream, Operator, PdfConv.CoordsToString(Alpha / 255.0));

            if (SMask != null)
            {
                SMaskObjId = XRef.GetNewObject(DataStream);
                TDictionaryRecord.WriteLine(DataStream, TPdfTokens.GetString(TPdfToken.SMaskName));
                TDictionaryRecord.BeginDictionary(DataStream);
                TDictionaryRecord.SaveKey(DataStream, TPdfToken.TypeName, TPdfTokens.GetString(TPdfToken.MaskName));
                TDictionaryRecord.SaveKey(DataStream, TPdfToken.SName, TPdfTokens.GetString(TPdfToken.AlphaName));
                TDictionaryRecord.Write(DataStream, TPdfTokens.GetString(TPdfToken.GName) + " ");
                TIndirectRecord.CallObj(DataStream, SMaskObjId);
                TDictionaryRecord.EndDictionary(DataStream);
            }

            TDictionaryRecord.EndDictionary(DataStream);

            TIndirectRecord.SaveTrailer(DataStream);

            if (SMask != null)
            {
                WriteSMaskObject(DataStream, XRef);
            }
        }
Esempio n. 8
0
 internal int GetFunctionObjId(TPdfStream DataStream, TXRefSection XRef)
 {
     if (FunctionObjId == 0)
     {
         FunctionObjId = XRef.GetNewObject(DataStream);
     }
     return(FunctionObjId);
 }
Esempio n. 9
0
 internal int GetSigDictionaryId(TPdfStream DataStream, TXRefSection XRef)
 {
     if (SigDictionaryId < 0)
     {
         SigDictionaryId = XRef.GetNewObject(DataStream);
     }
     return(SigDictionaryId);
 }
Esempio n. 10
0
        internal int GetStreamId(TPdfStream DataStream, TXRefSection XRef)
        {
            if (ObjectId == -1)
            {
                ObjectId = XRef.GetNewObject(DataStream);
            }

            return(ObjectId);
        }
Esempio n. 11
0
        public static int WriteColorSpace(TPdfStream DataStream, TXRefSection XRef)
        {
            int Result = XRef.GetNewObject(DataStream);

            TPdfBaseRecord.Write(DataStream, TPdfTokens.GetString(TPdfToken.PatternColorSpacePrefix) + " ");
            TIndirectRecord.CallObj(DataStream, Result);

            return(Result);
        }
Esempio n. 12
0
        private static int SaveAPRef(TPdfStream DataStream, TXRefSection XRef)
        {
            //AP call
            int APId = XRef.GetNewObject(DataStream);

            Write(DataStream, TPdfTokens.GetString(TPdfToken.APName));
            BeginDictionary(DataStream);
            SaveKey(DataStream, TPdfToken.NName, TIndirectRecord.GetCallObj(APId));
            EndDictionary(DataStream);
            return(APId);
        }
Esempio n. 13
0
        private static void SaveFRM(TPdfStream DataStream, TXRefSection XRef, TPdfVisibleSignature VSig, int FRMId)
        {
            string StreamContents = "q 1 0 0 1 0 0 cm /n0 Do Q" + TPdfTokens.NewLine + "q 1 0 0 1 0 0 cm /n2 Do Q";

            XRef.SetObjectOffset(FRMId, DataStream);
            TIndirectRecord.SaveHeader(DataStream, FRMId);
            BeginDictionary(DataStream);
            WriteCommonXObject(DataStream, VSig.Rect, StreamContents);
            int n0Id = XRef.GetNewObject(DataStream);
            int n2Id = XRef.GetNewObject(DataStream);

            SaveProcSet(DataStream, XRef, false);
            SaveResourcesSecondXObject(DataStream, n0Id, n2Id);
            EndDictionary(DataStream);
            WriteStream(DataStream, StreamContents);

            TIndirectRecord.SaveTrailer(DataStream);

            Saven0(DataStream, XRef, VSig, n0Id);
            Saven2(DataStream, XRef, VSig, n2Id);
        }
Esempio n. 14
0
 internal virtual int GetId(TPdfStream DataStream, TXRefSection XRef, bool OnlySignatures)
 {
     if (OnlySignatures)
     {
         return(-1);
     }
     if (FId < 0)
     {
         FId = XRef.GetNewObject(DataStream);
     }
     return(FId);
 }
Esempio n. 15
0
 internal int GetId(TPdfStream DataStream, TXRefSection XRef, int MDPId)
 {
     if (MDPId < 0)
     {
         return(-1);
     }
     if (PermsId < 0)
     {
         PermsId = XRef.GetNewObject(DataStream);
     }
     return(PermsId);
 }
Esempio n. 16
0
 internal int GetId(TPdfStream DataStream, TXRefSection XRef)
 {
     if (FieldList.Count <= 0)
     {
         return(-1);                                  //We don't have any forms.
     }
     if (FId < 0)
     {
         FId = XRef.GetNewObject(DataStream);
     }
     ;
     return(FId);
 }
Esempio n. 17
0
        internal void SaveToStream(TPdfStream DataStream, TXRefSection XRef, TPdfProperties p)
        {
            InfoId = XRef.GetNewObject(DataStream);
            TIndirectRecord.SaveHeader(DataStream, InfoId);
            BeginDictionary(DataStream);
            if (p.Title != null && p.Title.Length > 0)
            {
                SaveUnicodeKey(DataStream, TPdfToken.TitleName, p.Title);
            }
            if (p.Author != null && p.Author.Length > 0)
            {
                SaveUnicodeKey(DataStream, TPdfToken.AuthorName, p.Author);
            }
            if (p.Subject != null && p.Subject.Length > 0)
            {
                SaveUnicodeKey(DataStream, TPdfToken.SubjectName, p.Subject);
            }
            if (p.Keywords != null && p.Keywords.Length > 0)
            {
                SaveUnicodeKey(DataStream, TPdfToken.KeywordsName, p.Keywords);
            }
            if (p.Creator != null && p.Creator.Length > 0)
            {
                SaveUnicodeKey(DataStream, TPdfToken.CreatorName, p.Creator);
            }

            string Producer = TPdfTokens.GetString(TPdfToken.Producer);

            if (!PdfWriter.FTesting)
            {
                Producer += Assembly.GetExecutingAssembly().GetName().Version.ToString();
            }

            if (Producer != null && Producer.Length > 0)
            {
                SaveUnicodeKey(DataStream, TPdfToken.ProducerName, Producer);
            }

            DateTime dt = DateTime.Now;

            SaveKey(DataStream, TPdfToken.CreationDateName, TDateRecord.GetDate(dt));
            EndDictionary(DataStream);
            TIndirectRecord.SaveTrailer(DataStream);
        }
Esempio n. 18
0
        private static void SaveAPObj(TPdfStream DataStream, TXRefSection XRef, int APId, TPdfVisibleSignature VSig)
        {
            string StreamContents = "q 1 0 0 1 0 0 cm /FRM Do Q";

            //AP Object
            XRef.SetObjectOffset(APId, DataStream);
            TIndirectRecord.SaveHeader(DataStream, APId);
            BeginDictionary(DataStream);
            WriteCommonXObject(DataStream, VSig.Rect, StreamContents);
            int FRMId = XRef.GetNewObject(DataStream);

            SaveProcSet(DataStream, XRef, false);
            SaveResourcesFirstXObject(DataStream, XRef, FRMId);
            EndDictionary(DataStream);

            WriteStream(DataStream, StreamContents);

            TIndirectRecord.SaveTrailer(DataStream);

            SaveFRM(DataStream, XRef, VSig, FRMId);
        }
Esempio n. 19
0
        internal void WriteFont(TPdfStream DataStream, TXRefSection XRef, bool Compress)
        {
            if (AlreadySaved || ObjectId == -1)
            {
                return;
            }
            AlreadySaved = true;
            int EmbeddedLenId = XRef.GetNewObject(DataStream);             //Stream Length

            XRef.SetObjectOffset(ObjectId, DataStream);
            TIndirectRecord.SaveHeader(DataStream, ObjectId);

            byte[] FontData = TrueTypeData.SubsetFontData(SubsetCMap);

            TStreamRecord.BeginSave(DataStream, EmbeddedLenId, Compress, FontData.Length);
            long StartStream = DataStream.Position;
            bool Compressing = DataStream.Compress;

            try
            {
                DataStream.Compress = Compress;
                DataStream.Write(FontData);
            }
            finally
            {
                DataStream.Compress = Compressing;
            }
            long EndStream = DataStream.Position;

            TStreamRecord.EndSave(DataStream);
            TIndirectRecord.SaveTrailer(DataStream);

            XRef.SetObjectOffset(EmbeddedLenId, DataStream);
            TIndirectRecord.SaveHeader(DataStream, EmbeddedLenId);
            TPdfBaseRecord.WriteLine(DataStream, (EndStream - StartStream).ToString(CultureInfo.InvariantCulture));
            TIndirectRecord.SaveTrailer(DataStream);
        }
Esempio n. 20
0
 public override void WriteFont(TPdfStream DataStream, TXRefSection XRef)
 {
     base.WriteFont(DataStream, XRef);
     FontDescriptorId = XRef.GetNewObject(DataStream);             //Font descriptor.
 }
Esempio n. 21
0
 public void WritePattern(TPdfStream DataStream, TXRefSection XRef)
 {
     TPdfBaseRecord.Write(DataStream, TPdfTokens.GetString(PatternPrefix) + PatternId.ToString(CultureInfo.InvariantCulture) + " ");
     PatternObjId = XRef.GetNewObject(DataStream);
     TIndirectRecord.CallObj(DataStream, PatternObjId);
 }
Esempio n. 22
0
 internal override int GetId(TPdfStream DataStream, TXRefSection XRef)
 {
     base.GetId(DataStream, XRef);
     ActionId = XRef.GetNewObject(DataStream);
     return(FId);
 }
Esempio n. 23
0
 internal virtual int GetId(TPdfStream DataStream, TXRefSection XRef)
 {
     FId = XRef.GetNewObject(DataStream);
     return(FId);
 }
Esempio n. 24
0
 public void WriteGState(TPdfStream DataStream, TXRefSection XRef)
 {
     TPdfBaseRecord.Write(DataStream, GStateName + " ");
     GStateObjId = XRef.GetNewObject(DataStream);
     TIndirectRecord.CallObj(DataStream, GStateObjId);
 }
Esempio n. 25
0
        internal void SaveBookmarkObjects(TPdfStream DataStream, TXRefSection XRef, TBookmarkList bmks, int ParentId, int ObjectId, ref int FirstId, ref int LastId, ref int AllOpenCount)
        {
            int PreviousId = -1;

            for (int i = 0; i < bmks.Count; i++)
            {
                TBookmark b = bmks[i];
                AllOpenCount++;

                int NextId = -1;
                if (i < bmks.Count - 1)
                {
                    NextId = XRef.GetNewObject(DataStream);
                }
                LastId = ObjectId;
                if (FirstId == -1)
                {
                    FirstId = ObjectId;
                }

                int FirstChildId   = -1;
                int LastChildId    = -1;
                int ChildOpenCount = 0;
                if (b.FChildren.Count > 0)
                {
                    FirstChildId = XRef.GetNewObject(DataStream);
                    int ChildLastId = -1;
                    SaveBookmarkObjects(DataStream, XRef, b.FChildren, ObjectId, FirstChildId, ref FirstId, ref ChildLastId, ref ChildOpenCount);
                    if (!b.ChildrenCollapsed)
                    {
                        AllOpenCount += ChildOpenCount;
                    }
                    LastChildId = ChildLastId;
                }


                XRef.SetObjectOffset(ObjectId, DataStream);
                TIndirectRecord.SaveHeader(DataStream, ObjectId);
                TDictionaryRecord.BeginDictionary(DataStream);
                TDictionaryRecord.SaveUnicodeKey(DataStream, TPdfToken.TitleName, b.Title);
                TDictionaryRecord.SaveKey(DataStream, TPdfToken.ParentName, TIndirectRecord.GetCallObj(ParentId));
                if (PreviousId >= 0)
                {
                    TDictionaryRecord.SaveKey(DataStream, TPdfToken.PrevName, TIndirectRecord.GetCallObj(PreviousId));
                }

                if (NextId >= 0)
                {
                    TDictionaryRecord.SaveKey(DataStream, TPdfToken.NextName, TIndirectRecord.GetCallObj(NextId));
                }

                if (FirstChildId >= 0)
                {
                    TDictionaryRecord.SaveKey(DataStream, TPdfToken.FirstName, TIndirectRecord.GetCallObj(FirstChildId));
                }

                if (LastChildId >= 0)
                {
                    TDictionaryRecord.SaveKey(DataStream, TPdfToken.LastName, TIndirectRecord.GetCallObj(LastChildId));
                }
                if (ChildOpenCount > 0)
                {
                    if (b.ChildrenCollapsed)
                    {
                        TDictionaryRecord.SaveKey(DataStream, TPdfToken.CountName, -ChildOpenCount);
                    }
                    else
                    {
                        TDictionaryRecord.SaveKey(DataStream, TPdfToken.CountName, ChildOpenCount);
                    }
                }


                if (b.Destination != null)
                {
                    TDictionaryRecord.SaveKey(DataStream, TPdfToken.DestName, GetDestStr(b.Destination));
                }

                if (b.TextColor.R != 0 || b.TextColor.G != 0 || b.TextColor.B != 0)
                {
                    TDictionaryRecord.SaveKey(DataStream, TPdfToken.CName, TPdfTokens.GetString(TPdfToken.OpenArray) + PdfConv.ToString(b.TextColor) + TPdfTokens.GetString(TPdfToken.CloseArray));
                }

                if (b.TextStyle != TBookmarkStyle.None)
                {
                    int k = 0;
                    if ((b.TextStyle & TBookmarkStyle.Italic) != 0)
                    {
                        k |= 1;
                    }
                    if ((b.TextStyle & TBookmarkStyle.Bold) != 0)
                    {
                        k |= 2;
                    }
                    TDictionaryRecord.SaveKey(DataStream, TPdfToken.FName, k);
                }

                TDictionaryRecord.EndDictionary(DataStream);
                TIndirectRecord.SaveTrailer(DataStream);

                PreviousId = ObjectId;
                ObjectId   = NextId;
            }
        }
Esempio n. 26
0
 public virtual void WriteFont(TPdfStream DataStream, TXRefSection XRef)
 {
     TPdfBaseRecord.Write(DataStream, TPdfTokens.GetString(TPdfToken.FontPrefix) + Id.ToString(CultureInfo.InvariantCulture) + " ");
     FontObjId = XRef.GetNewObject(DataStream);
     TIndirectRecord.CallObj(DataStream, FontObjId);
 }