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.v24.2.dll
NuGet Package: DevExpress.Document.Processor
#Declaration
#Remarks
The DevExpress PDF Document API allows you to create, edit, merge, split, password protect, and digitally sign 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 Pdf
should not be accessed simultaneously by different threads.
#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
).
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.CreateGraphics()) {
DrawGraphics(graph);
// Render a page with graphics.
processor.RenderNewPage(PdfPaperSize.Letter, graph);
}
}
// Generate a watermark.
AddWatermark("Not for sale",docPath,docPath);
Process.Start(docPath);
}
// 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, 180, 150);
DXFont font2 = new DXFont("Arial", 20);
graph.DrawString("Display, Print and Export PDF Documents", font2, black, 168, 230);
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, 300);
}
// 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.CreateGraphics()) {
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,72,72);
}
}
}
documentProcessor.SaveDocument(resultFileName);
}
}
}
}