Back to Devexpress

PdfDocumentProcessor Class

officefileapi-devexpress-dot-pdf.md

latest12.9 KB
Original Source

PdfDocumentProcessor Class

A non-visual component that allows you to generate PDF files from scratch and manipulate existing documents.

Namespace : DevExpress.Pdf

Assembly : DevExpress.Docs.v25.2.dll

NuGet Package : DevExpress.Document.Processor

Declaration

csharp
[DXLicenseDocs]
public class PdfDocumentProcessor :
    PdfDisposableObject
vb
<DXLicenseDocs>
Public Class PdfDocumentProcessor
    Inherits PdfDisposableObject

Remarks

The DevExpress PDF Document API allows you to create, edit, merge, split, password protect, digitally sign, and optimize PDF files in code.

You need a license for the DevExpress Office File API Subscription or DevExpress Universal Subscription to use the PDF Document API.

Warning

The PdfDocumentProcessor should not be accessed simultaneously by different threads.

Organize Documents and Pages

The PDF Document API allows you to generate/modify PDF documents and organize individual pages. Refer to the following topics for more information:

Manage Additional Content

The PDF Document API supports the following document elements:

BookmarksCreate bookmarks to quickly jump to a different view or page within a PDF document.HyperlinksInsert hyperlinks to navigate to a specific page, external document, or website.File AttachmentsA document can contain multiple file attachments in any format (images, text files, PDF files, and so on).AnnotationsThe PDF Document API allows you to create, edit, flatten, and remove text annotations (sticky notes) and text markup annotations (text highlights). You can also insert comments and reviews associated with annotations.XMP MetadataYou can embed Extensible Metadata Platform (XMP) data in your PDF document. XMP is a standard format for metadata generation, processing, and interchange.Manage Visibility of Layers (Optional Content Groups)Control the visibility of layers in a document.

Protect and Secure Documents

The PDF Document API allows you to protect your documents to prevent unauthorized access. Security options include:

Document ProtectionYou can encrypt your files with user and owner passwords and set permissions to specify whether users can copy, edit, and print PDF content.Digital SignaturesAdd new or remove existing signatures, define signature appearance, apply multiple signatures, use document-level timestamps to sign documents, and sign PDF files in deferred mode.

Example

This example shows the PDF Document Creation API that is used to programmatically generate a document layout.

  • The custom DrawGraphics method draws content inside an empty PDF document.
  • The custom AddWatermark method generates a watermark with custom text and adds it to the created PDF document.

When you launch the app, the file is saved to your Documents folder (%userprofile%/Documents).

View Example

cs
using DevExpress.Drawing;
using DevExpress.Pdf;
using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;

namespace DocumentCreationAPI {
    class Program {
        static void Main(string[] args) {

            string docPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),"Result.pdf");

            using (PdfDocumentProcessor processor = new PdfDocumentProcessor()) {
                // Create an empty document.
                processor.CreateEmptyDocument(docPath);
                // Create and draw PDF graphics.
                using (PdfGraphics graph = processor.CreateGraphicsWorldSystem()) {
                    DrawGraphics(graph);
                    // Render a page with graphics.
                    processor.RenderNewPage(PdfPaperSize.Letter, graph);
                }
            }
            // Generate a watermark.
            AddWatermark("Not for sale",docPath,docPath);
            Process.Start(new ProcessStartInfo(docPath) { UseShellExecute = true });
        }

        // Draw graphics inside a PDF document.
        static void DrawGraphics(PdfGraphics graph) {
            // Draw text lines on the page.
            DXSolidBrush black = (DXSolidBrush)DXBrushes.Black;
            DXFont font1 = new DXFont("Times New Roman", 32, DXFontStyle.Bold);
            graph.DrawString("PDF Document Processor", font1, black, 140, 50);

            DXFont font2 = new DXFont("Arial", 20);
            graph.DrawString("Display, Print and Export PDF Documents", font2, black, 128, 120);

            DXFont font3 = new DXFont("Arial", 10);
            graph.DrawString("The PDF Document Processor is a non-visual component " +
                              "that provides the application programming interface of the PDF Viewer.", font3, black, 16, 180);
        }

        // Add a watermark with custom text.
        static void AddWatermark(string text,string fileName,string resultFileName) {
            using (PdfDocumentProcessor documentProcessor = new PdfDocumentProcessor()) {
                string fontName = "Arial Black";
                int fontSize = 12;
                PdfStringFormat stringFormat = PdfStringFormat.GenericTypographic;
                stringFormat.Alignment = PdfStringAlignment.Center;
                stringFormat.LineAlignment = PdfStringAlignment.Center;
                documentProcessor.LoadDocument(fileName);
                using (DXSolidBrush brush = new DXSolidBrush(Color.FromArgb(63,Color.Black))) {
                    DXFont font = new DXFont(fontName,fontSize);
                    foreach (var page in documentProcessor.Document.Pages) {
                        var watermarkSize = page.CropBox.Width * 0.75;
                        using (PdfGraphics graphics = documentProcessor.CreateGraphicsPageSystem()) {
                            SizeF stringSize = graphics.MeasureString(text,font);
                            float scale = (float)(watermarkSize / (double)stringSize.Width);
                            graphics.TranslateTransform((float)(page.CropBox.Width * 0.5),(float)(page.CropBox.Height * 0.5));
                            graphics.RotateTransform((float)45.0);
                            graphics.TranslateTransform((float)(-stringSize.Width * scale * 0.5),(float)(-stringSize.Height * scale * 0.5));
                            DXFont actualFont = new DXFont(fontName,fontSize * scale);
                            RectangleF rect = new RectangleF(0,0,stringSize.Width * scale,stringSize.Height * scale);
                            graphics.DrawString(text,actualFont,brush,rect,stringFormat);

                            graphics.AddToPageForeground(page);
                        }
                    }
                }
                documentProcessor.SaveDocument(resultFileName);
            }
        }
    }
}
vb
Imports DevExpress.Drawing
Imports DevExpress.Pdf
Imports System
Imports System.Diagnostics
Imports System.Drawing
Imports System.IO

Namespace DocumentCreationAPI

    Friend Class Program

        Shared Sub Main(ByVal args As String())

            Dim docPath As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Result.pdf")

            Using processor As PdfDocumentProcessor = New PdfDocumentProcessor()
                ' Create an empty document.
                processor.CreateEmptyDocument(docPath)
                ' Create and draw PDF graphics.
                Using graph As PdfGraphics = processor.CreateGraphics()
                    DrawGraphics(graph)
                    ' Render a page with graphics.
                    processor.RenderNewPage(PdfPaperSize.Letter, graph)
                End Using
            End Using
            ' Generate a watermark.
            AddWatermark("Not for sale", docPath, docPath)
            Process.Start(New ProcessStartInfo(docPath) With {.UseShellExecute = True})
        End Sub

        ' Draw graphics inside a PDF document.
        Private Shared Sub DrawGraphics(ByVal graph As PdfGraphics)
            ' Draw text lines on the page.
            Dim black As DXSolidBrush = CType(DXBrushes.Black, DXSolidBrush)
            Dim font1 As DXFont = New DXFont("Times New Roman", 32, DXFontStyle.Bold)
            graph.DrawString("PDF Document Processor", font1, black, 140, 50)

            Dim font2 As DXFont = New DXFont("Arial", 20)
            graph.DrawString("Display, Print and Export PDF Documents", font2, black, 128, 120)

            Dim font3 As DXFont = New DXFont("Arial", 10)
            graph.DrawString("The PDF Document Processor is a non-visual component " & "that provides the application programming interface of the PDF Viewer.", font3, black, 16, 180 )
        End Sub

        ' Add a watermark with custom text.
        Private Shared Sub AddWatermark(Text As String, fileName As String, resultFileName As String)
            Using documentProcessor As New PdfDocumentProcessor()
                Dim fontName As String = "Arial Black"
                Dim fontSize As Integer = 12
                Dim stringFormat As PdfStringFormat = PdfStringFormat.GenericTypographic
                stringFormat.Alignment = PdfStringAlignment.Center
                stringFormat.LineAlignment = PdfStringAlignment.Center
                documentProcessor.LoadDocument(fileName)
                Using brush As New SolidBrush(Color.FromArgb(63, Color.Black))
                    Using font As New Font(fontName, fontSize)
                        For Each page In documentProcessor.Document.Pages
                            Dim watermarkSize = page.CropBox.Width * 0.75
                            Using graphics As PdfGraphics = documentProcessor.CreateGraphicsPageSystem()
                                Dim stringSize As SizeF = graphics.MeasureString(Text, font)
                                Dim scale As Single = CSng(watermarkSize) / stringSize.Width
                                graphics.TranslateTransform(CSng(page.CropBox.Width * 0.5), CSng(page.CropBox.Height * 0.5))
                                graphics.RotateTransform(45.0)
                                graphics.TranslateTransform(CSng(-stringSize.Width * scale * 0.5), CSng(-stringSize.Height * scale * 0.5))
                                Using actualFont As Font = New Font(fontName, fontSize * scale)
                                    Dim rect As RectangleF = New RectangleF(0, 0, stringSize.Width * scale, stringSize.Height * scale)
                                    graphics.DrawString(Text, actualFont, brush, rect, stringFormat)
                                End Using
                                graphics.AddToPageForeground(page)
                            End Using
                        Next
                    End Using
                End Using
                documentProcessor.SaveDocument(resultFileName)
            End Using
        End Sub
    End Class
End Namespace

Implements

IDisposable

Inheritance

Object DevExpress.Pdf.Native.PdfDisposableObject PdfDocumentProcessor

Extension Methods

GetChunks(Int32)

See Also

PdfDocumentProcessor Members

PDF Document API

DevExpress.Pdf Namespace