Skip to main content

DevExpress v24.2 Update — Your Feedback Matters

Our What's New in v24.2 webpage includes product-specific surveys. Your response to our survey questions will help us measure product satisfaction for features released in this major update and help us refine our plans for our next major release.

Take the survey Not interested

PdfCreationOptions.Compatibility Property

Gets or sets the compatibility mode of a document.

Namespace: DevExpress.Pdf

Assembly: DevExpress.Pdf.v24.2.Core.dll

NuGet Package: DevExpress.Pdf.Core

#Declaration

public PdfCompatibility Compatibility { get; set; }

#Property Value

Type Description
PdfCompatibility

A PdfCompatibility enumeration value that specifies the compatibility mode of a document.

Available values:

Name Description
Pdf

The document supports the ISO 32000-1:2008 standard.

PdfA1b

The document supports the ISO 19005-1:2005 standard.

PdfA2b

The document supports the ISO 19005-2:2011 standard.

PdfA3b

The document supports the ISO 19005-3:2012 standard.

#Remarks

The Compatibility property can return one of the following enumeration values: PdfA1b, PdfA2b, PdfA3b and Pdf.

PDF/A imposes the following restrictions:

  • Non-embedded fonts are not supported;
  • PDF/A-1b, and PDF/A-2b documents can’t contain file attachments;
  • Encryption is forbidden;
  • Transparency is forbidden in a PDF/A-1 document (all transparency information is ignored and exceptions are not raised).

Note

Since PDF/A requires widget annotations must have only one appearance, PdfAcroFormCheckBoxField.ShouldGeneratePressedAppearance, PdfAcroFormRadioGroupField.ShouldGeneratePressedAppearance, PdfGraphicsAcroFormCheckBoxField.ShouldGeneratePressedAppearance, and PdfGraphicsAcroFormRadioGroupField.ShouldGeneratePressedAppearance properties do not work when a document is created with the Compatibility property set to PdfA1b, PdfA2b or PdfA3b.

#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).

pdf-api-generate-content-and-watermark

View Example

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);
            }
        }
    }
}
See Also