# PDF Export

Learn the various steps involved in rendering a report in PDF format. This format is recommended for printing and for preserving formatting.

## Content

Portable Document Format (PDF), is a format recommended for printing and for preserving formatting. You can use the [PDFRenderingExtension](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.PdfRenderingExtension.html) to render your report in this format. With the PDF rendering extension, you can use features such as font linking, digital signatures, and end user-defined characters (EUDC). These features are only available in the Professional Edition of ActiveReports.

## PDF Rendering Properties

ActiveReports offers a number of options to control how reports render to PDF.

| Property | Description |
| -------- | ----------- |
| [Application](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Set the value that appears for application in the Document Properties dialog of the PDF viewer application. |
| [Author](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Enter the name of the author to appear in the Document Properties dialog of the PDF viewer application. |
| [CenterWindow](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Set to True to position the document's window in the center of the screen. |
| [DisplayMode](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Specifies how the document is displayed when opened. FullScreen mode displays the document with no menu bar, window controls, or any other window visible. |
| [DisplayTitle](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Set to True to display text you enter in the Title property. When set to False it displays the name of the PDF file. |
| [DocumentToAddAfterReport](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Indicates the path of the PDF document to be inserted at the end of the rendering output. |
| [DocumentToAddBeforeReport](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Indicates the path of the PDF document to be inserted at the beginning of the rendering output. |
| [DpiX](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Set the horizontal resolution of the rendered PDF file. |
| [DpiY](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Set the vertical resolution of the rendered PDF file. |
| [EmbedFonts](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Select how the fonts used in the report should be embedded in the PDF document. **Note**: By default, all fonts get embedded in the exported PDF document. |
| [Encrypt](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Determines whether the document is encrypted or not.<br>**Note**: If Encrypt is set to False, permissions and passwords have no effect. |
| [EndPage](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | The last page of the report to render. The default value is the value for StartPage,that is,0. |
| [FallbackFonts](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Gets or sets a comma-delimited string of font families to locate missing glyphs from the original font. |
| [FitWindow](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | True to resize the document’s window to fit the size of the first displayed page. Default value: false. |
| [HideMenubar](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | True to hide the viewer application’s menu bar when the document is active. Default value: false. |
| [HideToolbar](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | True to hide the viewer application’s toolbars when the document is active. Default value: false. |
| [HideWindowUI](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | True to hide user interface elements in the document’s window (such as scroll bars and navigation controls), leaving only the document’s contents displayed. Default value: false. |
| [ImageInterpolation](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Interpolation value of images. Allows enabling and disabling image interpolation, when exporting the file to PDF. |
| [Keywords](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Keywords associated with the document. |
| [NeverEmbedFonts](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Gets or sets the semicolon-delimited string of the font families to be embedded in the PDF document. |
| [OwnerPassword](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | The owner password that can be entered in the reader, which permits full access to the document regardless of the specified user permissions. |
| [PageHeight](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | The page height value, in inches, to set for the report. You must include an integer or decimal value followed by "in" (for example, 1in). This value overrides the report's original settings. |
| [PageWidth](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | The page width value, in inches, to set for the report. You must include an integer or decimal value followed by "in" (for example, 1in). This value overrides the report's original settings. |
| [Pagination](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Gets or sets the value that indicates whether to use pagination in the exported PDF document. |
| [Permissions](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Specifies the user permissions for the document. Permissions can be combined using a comma between values. |
| [PrintLayoutMode](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Specifies layout mode to be used for PDF documents. |
| [PrintOnOpen](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Gets or sets the value indicating whether the document should be printed after it is open. |
| [PrintPresets](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Gets or sets the PDF print preset dialog. |
| [SizeToFit](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Determines whether PDF pages are fit to the selected paper size or not. |
| [StartPage](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | The first page of the report to render. A value of 0 indicates that all pages are rendered. |
| [Subject](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | The subject of the document. |
| [Title](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | The title of the document. |
| [UserPassword](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | The user password that can be entered in the reader. If this value is left empty, the user will not be prompted for a password, however, the user will be restricted by the specified permissions. |
| [Version](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Set the output PDF version. The supported versions are:<br>PDF-1.2 |
| [WatermarkAngle](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Specify the degree of angle for the watermark text on the PDF document. Valid values range from 0 to 359, where 0 is horizontal, left to right. |
| [WatermarkColor](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Select a color for the watermark text on the PDF document. The default value for the watermark color is gray, but you can select any Web, System, or Custom color. |
| [WatermarkFontName](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Set the font to use for the watermark on the PDF document. |
| [WatermarkFontSize](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Set the font size to use for the watermark on the PDF document. |
| [WatermarkFontStyle](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Set the font style to use for the watermark on the PDF document. |
| [WatermarkPrintOnly](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Specify whether to print a report with a watermark on it via a printer or a Microsoft print to PDF. The default value is False. |
| [WatermarkTitle](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html) | Enter text (i.e. CONFIDENTIAL) to use as the watermark on the PDF document. |

## PDF Print Presets Properties

ActiveReports allows you to preset the printing properties for PDF report exports using the [PrintPresets](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.PrintPresets.html) class. This prepopulates the print settings in the Print dialog box. Please see [Use PDF Printing Presets](/activereportsnet/docs/v20.1/developers/export-reports/use-pdf-printing-presets) for more information.

>type=note
> **Note**: The print preset properties are only available with the Professional Edition license. An evaluation message is displayed when used with the Standard Edition license.

| Property | Description |
| -------- | ----------- |
| [PageScaling](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.PrintPresets.html) | Specify scaling for the printable area. You can select Default to shrink to the printable area, or you can select None for the actual size. |
| [DuplexMode](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.PrintPresets.html) | Specify the duplex mode of the printer. For the best results with the duplex option, the selected printer should support duplex printing. You can choose from the following values, \* Simplex: Prints on one side of the paper. This is the default value. \* Duplex (Flip on long edge): Prints on both sides of the paper with paper flip on the long edge. \* Duplex (Flip on short edge): Prints on both sides of the paper with paper flip on the short edge. |
| [PaperSourceByPageSize](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.PrintPresets.html) | Determines the output tray based on PDF page size, rather than page setting options. This option is useful when printing PDFs with multiple page sizes, where different sized output trays are available. By default, this option is set to False. |
| [PrintPageRange](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.PrintPresets.html) | Specify the range of page numbers 1-3 or 1, 2, 3. |
| [NumberOfCopies](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.PrintPresets.html) | Specify the number of copies to print. You can select any number of copies from 2 to 5, or select Default to specify a single copy. |

>type=note
> **Note**: These properties are available in PDF version 1.7 or higher. The **PageScaling** property is supported in PDF version 1.6.

## PDF Features

### Interactivity

PDF is considered the best format for printing and it also supports [interactive](/activereportsnet/docs/v20.1/report-authors/design-reports/design-page-rdl-reports/interactivity) features like Document Map, Bookmarks, and Hyperlinks. However, in case you have any data hidden (like in a drill-down report) at the time of rendering, it does not show up in the output. Therefore, it is recommended to expand all toggle items prior to rendering.

### Editable PDF: InputField Control

In Page and RDLX reports, you can use the [InputField](/activereportsnet/docs/v20.1/report-authors/report-controls/report-controls-page-rdl-report/inputfield) report control. This control provides support for [editable fields in an exported PDF report file](/activereportsnet/docs/v20.1/report-authors/design-reports/design-page-rdl-reports/tutorials-page-rdl/create-editable-pdf-forms-with-inputfield-control) where the InputField’s value can be modified.

There are two types of InputField - **Text** and **Checkbox**, which you can set in the **InputType** property. Each type has its own set of properties: the **Text** type of the InputField control gets the set of properties of the [TextBox](/activereportsnet/docs/v20.1/report-authors/report-controls/report-controls-page-rdl-report/textbox) control. If the **Checkbox** type is selected, then the new control inherits the set of properties of the [CheckBox](/activereportsnet/docs/v20.1/report-authors/report-controls/report-controls-page-rdl-report/checkbox) control.

### Tagged PDF

You can generate PDFs with tagging on the report content by setting the **AccessibleDescription** property of the report controls: Bullet, Barcode, Chart, Image, Line, Map, Shape, Sparkline, and FormattedText controls; and all custom report items. The PDF versions that support tagged PDFs conforming with the PDF/UA standard are PDF/A-1a, PDF/A-2a, PDF/A-2u, PDF/A-3a, PDF/A-3u, and PDF/UA-1.

### PDF Metadata & Attachments
When rendering Page or RDL reports to PDF, you can enrich the output document with advanced metadata, file attachments, and custom properties. These features are configured via the [Settings](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.html){:target="_blank"} object passed to the rendering method.

####  Additional Metadata (XMP)
You can embed Extensible Metadata Platform (XMP) data into the PDF. This allows you to adhere to specific metadata standards (schemas) such as Dublin Core or Adobe PDF schemas.
* **Usage:** Add items to the [AdditionalMetadata](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.AdditionalMetadata.html){:target="_blank"} collection.
* **Namespaces:** The API supports standard namespaces like `PurlOrg` (Dublin Core), `NsAdobeComPdf`, and `NsAdobeComXap`.

####  File Attachments
You can embed external files (such as raw data files, related text documents, or images) directly inside the PDF container.
* **Usage:** Add [AttachmentInfo](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.AttachmentInfo.html){:target="_blank"} objects to the [Attachments](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.Attachments.html){:target="_blank"} collection.
* **Properties:** Define the `Name` (filename), `Description`, and `Content` (byte array) for the file.

####  Custom Properties
Similar to standard properties, you can add user-defined key-value pairs to the document properties.
* **Usage:** Add [CustomProperty](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.CustomProperty.html){:target="_blank"} items to the [CustomProperties](/activereportsnet/api/v20.1/MESCIUS.ActiveReports.Export.Pdf/GrapeCity.ActiveReports.Export.Pdf.Page.Settings.CustomProperties.html){:target="_blank"} collection.
* **Benefit:** These values are visible in the "Custom" tab of the PDF viewer's properties dialog and can be used by indexing systems.

#### Code Example

The following example demonstrates how to configure these settings when rendering a Page Report (`.rdlx`) to PDF using the **PDF Rendering Extension**.
```csharp
// 1. Prepare the output path
var outputFileName = Path.ChangeExtension(Path.GetTempFileName(), ".pdf");

// 2. Load the report definition (Page Report)
using (var stream = GetType().Assembly.GetManifestResourceStream("Reports.PriceHistory.rdlx"))
using (var reader = new StreamReader(stream))
{
    var rpt = new GrapeCity.ActiveReports.PageReport(reader);
    
    // 3. Create PDF Settings
    var pdfSettings = new GrapeCity.ActiveReports.Export.Pdf.Page.Settings();

    // A. Add Additional Metadata (XMP)
    // specific schemas used for archiving and indexing systems
    pdfSettings.AdditionalMetadata.AddRange(new List<GrapeCity.ActiveReports.Export.Pdf.AdditionalMetadataInfo> 
    {
        // Dublin Core: Standard for library/document cataloging
        new GrapeCity.ActiveReports.Export.Pdf.AdditionalMetadataInfo
        {
            Namespace = GrapeCity.ActiveReports.Export.Pdf.AdditionalMetadataNamespace.PurlOrg,
            Key = "creator", 
            Value = "Senior Analyst: John Doe"
        },
        // Adobe PDF Schema: Used by PDF readers for search
        new GrapeCity.ActiveReports.Export.Pdf.AdditionalMetadataInfo
        {
            Namespace = GrapeCity.ActiveReports.Export.Pdf.AdditionalMetadataNamespace.NsAdobeComPdf,
            Key = "Keywords",
            Value = "price-history, invoices, 2025, q3-analysis"
        },
        // XMP Basic Schema: Technical details about creation
        new GrapeCity.ActiveReports.Export.Pdf.AdditionalMetadataInfo
        {
            Namespace = GrapeCity.ActiveReports.Export.Pdf.AdditionalMetadataNamespace.NsAdobeComXap,
            Key = "CreatorTool",
            Value = "ActiveReports Reporting Engine v18"
        }
    });

    // B. Add File Attachments
    // Scenario: Embedding the raw data (CSV) so users can verify calculations
    var csvContent = "Date,Item,Price\n2025-01-01,Widget A,10.00\n2025-01-02,Widget B,15.50";
    pdfSettings.Attachments.Add(new GrapeCity.ActiveReports.Export.Pdf.AttachmentInfo
    {
        Name = "RawData_2025.csv",
        Description = "Source dataset for the price analysis graph",
        Content = Encoding.UTF8.GetBytes(csvContent)
    });

    // C. Add Custom Properties (Custom Tab)
    pdfSettings.CustomProperties.AddRange(new List<GrapeCity.ActiveReports.Export.Pdf.CustomProperty>
    {
        new GrapeCity.ActiveReports.Export.Pdf.CustomProperty
        {
            Name = "FiscalYear",
            Value = "2025"
        },
        new GrapeCity.ActiveReports.Export.Pdf.CustomProperty
        {
            Name = "DocumentType",
            Value = "PriceHistoryAnalysis"
        },
        new GrapeCity.ActiveReports.Export.Pdf.CustomProperty
        {
            Name = "Sensitivity",
            Value = "Confidential"
        }
    });

    // 4. Render the Report
    var pdfExport = new GrapeCity.ActiveReports.Export.Pdf.Page.PdfRenderingExtension();
    
    var fileStreamProvider = new GrapeCity.ActiveReports.Rendering.IO.FileStreamProvider(
        new DirectoryInfo(Path.GetTempPath()), 
        Path.GetFileNameWithoutExtension(outputFileName));
        
    rpt.Document.Render(pdfExport, fileStreamProvider, pdfSettings);
}
```

```vbnet
' 1. Prepare the output path
Dim outputFileName = Path.ChangeExtension(Path.GetTempFileName(), ".pdf")

' 2. Load the report definition (Page Report)
Using stream = GetType().Assembly.GetManifestResourceStream("Reports.PriceHistory.rdlx")
    Using reader As New StreamReader(stream)
        Dim rpt As New GrapeCity.ActiveReports.PageReport(reader)

        ' 3. Create PDF Settings
        Dim pdfSettings As New GrapeCity.ActiveReports.Export.Pdf.Page.Settings()

        ' A. Add Additional Metadata (XMP)
        pdfSettings.AdditionalMetadata.AddRange(New List(Of GrapeCity.ActiveReports.Export.Pdf.AdditionalMetadataInfo) From {
            New GrapeCity.ActiveReports.Export.Pdf.AdditionalMetadataInfo With {
                .Namespace = GrapeCity.ActiveReports.Export.Pdf.AdditionalMetadataNamespace.PurlOrg,
                .Key = "creator",
                .Value = "Senior Analyst: John Doe"
            },
            New GrapeCity.ActiveReports.Export.Pdf.AdditionalMetadataInfo With {
                .Namespace = GrapeCity.ActiveReports.Export.Pdf.AdditionalMetadataNamespace.NsAdobeComPdf,
                .Key = "Keywords",
                .Value = "price-history, invoices, 2025, q3-analysis"
            },
            New GrapeCity.ActiveReports.Export.Pdf.AdditionalMetadataInfo With {
                .Namespace = GrapeCity.ActiveReports.Export.Pdf.AdditionalMetadataNamespace.NsAdobeComXap,
                .Key = "CreatorTool",
                .Value = "ActiveReports Reporting Engine v18"
            }
        })

        ' B. Add File Attachments
        Dim csvContent = "Date,Item,Price" & vbCrLf & "2025-01-01,Widget A,10.00" & vbCrLf & "2025-01-02,Widget B,15.50"
        pdfSettings.Attachments.Add(New GrapeCity.ActiveReports.Export.Pdf.AttachmentInfo With {
            .Name = "RawData_2025.csv",
            .Description = "Source dataset for the price analysis graph",
            .Content = Encoding.UTF8.GetBytes(csvContent)
        })

        ' C. Add Custom Properties
        pdfSettings.CustomProperties.AddRange(New List(Of GrapeCity.ActiveReports.Export.Pdf.CustomProperty) From {
            New GrapeCity.ActiveReports.Export.Pdf.CustomProperty With {
                .Name = "FiscalYear",
                .Value = "2025"
            },
            New GrapeCity.ActiveReports.Export.Pdf.CustomProperty With {
                .Name = "DocumentType",
                .Value = "PriceHistoryAnalysis"
            },
            New GrapeCity.ActiveReports.Export.Pdf.CustomProperty With {
                .Name = "Sensitivity",
                .Value = "Confidential"
            }
        })

        ' 4. Render the Report
        Dim pdfExport As New GrapeCity.ActiveReports.Export.Pdf.Page.PdfRenderingExtension()
        
        Dim fileStreamProvider As New GrapeCity.ActiveReports.Rendering.IO.FileStreamProvider(
            New DirectoryInfo(Path.GetTempPath()),
            Path.GetFileNameWithoutExtension(outputFileName))

        rpt.Document.Render(pdfExport, fileStreamProvider, pdfSettings)
    End Using
End Using
```

## PDF/A Support Limitations

* The **NeverEmbedFonts** property is ignored, so all fonts of a report are embedded into the PDF document.
* The **Security.Encrypt** property is ignored and the PDF export behaves as if this property is always set to False.
* The **OnlyForPrint** property is ignored and the PDF export behaves as if this property is always set to False.
* The **DocumentToAddBeforeReport** and **DocumentToAddAfterReport** properties of the PDF Rendering Extension settings are ignored.
* **Transparent images** lose their transparency when exported to PDF/A-1.
* **External hyperlinks** are exported as plain text.

## Export Report using PDF Rendering Extension

The following steps provide an example of rendering a report in PDF format.

1. Create a new or open an existing Windows Forms App in Visual Studio project.
2. Go to the Project Explorer, right-click the project and select **Add** \> **New Item.**
3. Select **ActiveReports 20 Standalone Report** \> **Add** and choose a report type, **RDLX**, **RDLX Dashboard**, or **Page** report and then click **Finish**.
4. Add a reference to **MESCIUS.ActiveReports.Export.Pdf** package in the project.
5. On the Form.cs or Form.vb that opens, double-click the title bar to create the Form\_Load event.
6. Add the following code inside the Form\_Load event.

```vbnet
' Provide the Page report you want to render.
Dim rptPath As New IO.FileInfo("..\..\..\Report1.rdlx")
Dim pageReport As New GrapeCity.ActiveReports.PageReport(rptPath)

' Create an output directory.
Dim outputDirectory As New System.IO.DirectoryInfo("C:\MyPDF")

outputDirectory.Create()
                        
' Provide settings for your rendering output.
Dim pdfSetting As New GrapeCity.ActiveReports.Export.Pdf.Page.Settings()
' Set the rendering extension and render the report.
Dim pdfRenderingExtension As New GrapeCity.ActiveReports.Export.Pdf.Page.PdfRenderingExtension()
Dim outputProvider As New GrapeCity.ActiveReports.Rendering.IO.FileStreamProvider(outputDirectory,System.IO.Path.GetFileNameWithoutExtension(outputDirectory.Name))

' Overwrite output file if it already exists
outputProvider.OverwriteOutputFile = True

pageReport.Document.Render(pdfRenderingExtension, outputProvider, pdfSetting)
```

```csharp
// Provide the Page report you want to render.
System.IO.FileInfo rptPath = new System.IO.FileInfo(@"..\..\..\Report1.rdlx");
GrapeCity.ActiveReports.PageReport pageReport = new GrapeCity.ActiveReports.PageReport(rptPath);

// Create an output directory.
System.IO.DirectoryInfo outputDirectory = new System.IO.DirectoryInfo(@"C:\MyPDF");
outputDirectory.Create();

// Provide settings for your rendering output.
GrapeCity.ActiveReports.Export.Pdf.Page.Settings pdfSetting = new GrapeCity.ActiveReports.Export.Pdf.Page.Settings();

// Set the rendering extension and render the report.
GrapeCity.ActiveReports.Export.Pdf.Page.PdfRenderingExtension pdfRenderingExtension = new
        GrapeCity.ActiveReports.Export.Pdf.Page.PdfRenderingExtension();

GrapeCity.ActiveReports.Rendering.IO.FileStreamProvider outputProvider = new GrapeCity.ActiveReports.Rendering.IO.FileStreamProvider(outputDirectory,
        System.IO.Path.GetFileNameWithoutExtension(outputDirectory.Name));

// Overwrite output file if it already exists
outputProvider.OverwriteOutputFile = true;

pageReport.Document.Render(pdfRenderingExtension, outputProvider, pdfSetting);
```