Ejemplo n.º 1
0
    static void Main(string[] args)
    {
        // If using Professional version, put your serial key below.
        ComponentInfo.SetLicense("FREE-LIMITED-KEY");

        PdfDocument document = PdfDocument.Load("Reading.pdf");

        // Get document's trailer dictionary.
        var trailer = document.GetDictionary();
        // Get document catalog dictionary from the trailer.
        var catalog = (PdfDictionary)((PdfIndirectObject)trailer[PdfName.Create("Root")]).Value;

        // Either retrieve "PieceInfo" entry value from document catalog or create a page-piece dictionary and set it to document catalog under "PieceInfo" entry.
        PdfDictionary pieceInfo;
        var           pieceInfoKey   = PdfName.Create("PieceInfo");
        var           pieceInfoValue = catalog[pieceInfoKey];

        switch (pieceInfoValue.ObjectType)
        {
        case PdfBasicObjectType.Dictionary:
            pieceInfo = (PdfDictionary)pieceInfoValue;
            break;

        case PdfBasicObjectType.IndirectObject:
            pieceInfo = (PdfDictionary)((PdfIndirectObject)pieceInfoValue).Value;
            break;

        case PdfBasicObjectType.Null:
            pieceInfo             = PdfDictionary.Create();
            catalog[pieceInfoKey] = PdfIndirectObject.Create(pieceInfo);
            break;

        default:
            throw new InvalidOperationException("PieceInfo entry must be dictionary.");
        }

        // Create page-piece data dictionary for "GemBox.Pdf" conforming product and set it to page-piece dictionary.
        var data = PdfDictionary.Create();

        pieceInfo[PdfName.Create("GemBox.Pdf")] = data;

        // Create a private data dictionary that will hold private data that "GemBox.Pdf" conforming product understands.
        var privateData = PdfDictionary.Create();

        data[PdfName.Create("Data")] = privateData;

        // Set "Title" and "Version" entries to private data.
        privateData[PdfName.Create("Title")]   = PdfString.Create(ComponentInfo.Title);
        privateData[PdfName.Create("Version")] = PdfString.Create(ComponentInfo.Version);

        // Specify date of the last modification of "GemBox.Pdf" private data (required by PDF specification).
        data[PdfName.Create("LastModified")] = PdfString.Create("D:" + DateTimeOffset.Now.ToString("yyyyMMddHHmmssK", CultureInfo.InvariantCulture).Replace(':', '\'') + "'", PdfEncoding.ASCII, PdfStringForm.Literal);

        document.SaveOptions.CloseOutput = true;
        document.Save("Basic Objects.pdf");
    }