# Saving to PDF

The `SaveAsPdf` method is available on `ExcelWorkbook`, `ExcelWorksheet` and `ExcelRangeBase`. The layout is controlled by the printer settings of the worksheet, see [Page setup](<https://epplussoftware.com/docs/output-formats/pdf/page-setup/index.md>).

## Save a worksheet

To save a worksheet as a PDF, use the `SaveAsPdf` method on the worksheet.

```csharp
//Get the worksheet.
var worksheet = workbook.Worksheets[0];
//Save the worksheet as PDF.
worksheet.SaveAsPdf("MyWorksheet.pdf");
```

```vbnet
'Get the worksheet.
Dim worksheet = workbook.Worksheets(0)
'Save the worksheet as PDF.
worksheet.SaveAsPdf("MyWorksheet.pdf")
```

You can adjust the PDF by setting options on the printer settings of the worksheet.

```csharp
//Get the worksheet.
var worksheet = workbook.Worksheets[0];
//Set it to print in A3 in landscape.
worksheet.PrinterSettings.PaperSize = ePaperSize.A3;
worksheet.PrinterSettings.Orientation = eOrientation.Landscape;
//Save the worksheet as PDF.
worksheet.SaveAsPdf("MyWorksheet.pdf");
```

```vbnet
'Get the worksheet.
Dim worksheet = workbook.Worksheets(0)
'Set it to print in A3 in landscape.
worksheet.PrinterSettings.PaperSize = ePaperSize.A3
worksheet.PrinterSettings.Orientation = eOrientation.Landscape
'Save the worksheet as PDF.
worksheet.SaveAsPdf("MyWorksheet.pdf")
```

## Save a range

To save a range as PDF, use the `SaveAsPdf` method on the range.

```csharp
//Get the worksheet.
var worksheet = workbook.Worksheets[0];
//Set up the printer settings on the worksheet.
worksheet.PrinterSettings.PaperSize = ePaperSize.A4;
worksheet.PrinterSettings.ShowGridLines = true;
worksheet.PrinterSettings.ShowHeaders = true;
//Get the range to export.
var range = worksheet.Cells["A1:D42"];
//Save the range as PDF.
range.SaveAsPdf(outputFolder + "Sample 99.4.pdf");
```

```vbnet
'Get the worksheet.
Dim worksheet = workbook.Worksheets(0)
'Set up the printer settings on the worksheet.
worksheet.PrinterSettings.PaperSize = ePaperSize.A4
worksheet.PrinterSettings.ShowGridLines = True
worksheet.PrinterSettings.ShowHeaders = True
'Get the range to export.
Dim range = worksheet.Cells("A1:D42")
'Save the range as PDF.
range.SaveAsPdf(outputFolder & "Sample 99.4.pdf")
```

## Save a workbook

To save a whole workbook as PDF, use the `SaveAsPdf` method on the workbook.

> [!NOTE]
>
> **Printer settings for a workbook**
>
> When you save from the workbook, the printer settings of the first worksheet are currently used for the whole PDF. This will change in a future release.

```csharp
//Get the workbook.
var workbook = package.Workbook;
//The printer settings of the first worksheet are used for the whole workbook.
workbook.Worksheets[0].PrinterSettings.PaperSize = ePaperSize.A3;
workbook.Worksheets[0].PrinterSettings.Orientation = eOrientation.Landscape;
//Save the workbook as PDF.
workbook.SaveAsPdf(outputFolder + "Sample 99.2.pdf");
```

```vbnet
'Get the workbook.
Dim workbook = package.Workbook
'The printer settings of the first worksheet are used for the whole workbook.
workbook.Worksheets(0).PrinterSettings.PaperSize = ePaperSize.A3
workbook.Worksheets(0).PrinterSettings.Orientation = eOrientation.Landscape
'Save the workbook as PDF.
workbook.SaveAsPdf(outputFolder & "Sample 99.2.pdf")
```

## Save selected worksheets

Use the overload of `SaveAsPdf` on the workbook to select the worksheets to save to the PDF.

```csharp
//Get the workbook.
var workbook = package.Workbook;
//Get the worksheets.
var worksheet1 = workbook.Worksheets[0];
var worksheet2 = workbook.Worksheets[1];
var worksheet3 = workbook.Worksheets[2];
//The printer settings of the first worksheet are used for the whole PDF.
workbook.Worksheets[0].PrinterSettings.PaperSize = ePaperSize.A4;
//worksheet1 and worksheet2 are saved to the same PDF. worksheet3 is excluded.
workbook.SaveAsPdf(outputFolder + "Sample 99.2.pdf", worksheet1, worksheet2);
```

```vbnet
'Get the workbook.
Dim workbook = package.Workbook
'Get the worksheets.
Dim worksheet1 = workbook.Worksheets(0)
Dim worksheet2 = workbook.Worksheets(1)
Dim worksheet3 = workbook.Worksheets(2)
'The printer settings of the first worksheet are used for the whole PDF.
workbook.Worksheets(0).PrinterSettings.PaperSize = ePaperSize.A4
'worksheet1 and worksheet2 are saved to the same PDF. worksheet3 is excluded.
workbook.SaveAsPdf(outputFolder & "Sample 99.2.pdf", worksheet1, worksheet2)
```

## Save several ranges

Use the overload of `SaveAsPdf` on the workbook to save several ranges to the same PDF.

```csharp
//Get the worksheet.
var worksheet = workbook.Worksheets[0];
//Set up the printer settings on the worksheet.
worksheet.PrinterSettings.PaperSize = ePaperSize.A4;
worksheet.PrinterSettings.ShowGridLines = true;
worksheet.PrinterSettings.ShowHeaders = true;
//Get the ranges from the worksheet.
var range1 = worksheet.Cells["F1:H4"];
var range2 = worksheet.Cells["J1:M45"];
//SaveAsPdf on the workbook accepts several ranges.
workbook.SaveAsPdf(outputFolder + "Sample 99.3.pdf", range1, range2);
```

```vbnet
'Get the worksheet.
Dim worksheet = workbook.Worksheets(0)
'Set up the printer settings on the worksheet.
worksheet.PrinterSettings.PaperSize = ePaperSize.A4
worksheet.PrinterSettings.ShowGridLines = True
worksheet.PrinterSettings.ShowHeaders = True
'Get the ranges from the worksheet.
Dim range1 = worksheet.Cells("F1:H4")
Dim range2 = worksheet.Cells("J1:M45")
'SaveAsPdf on the workbook accepts several ranges.
workbook.SaveAsPdf(outputFolder & "Sample 99.3.pdf", range1, range2)
```

## Save asynchronously

Every `SaveAsPdf` method has an asynchronous version, `SaveAsPdfAsync`. The example below saves a worksheet.

```csharp
//Get the worksheet.
var worksheet = workbook.Worksheets[0];
//Save with SaveAsPdfAsync.
await worksheet.SaveAsPdfAsync(outputFolder + "Sample 99.3.pdf");
```

```vbnet
'Get the worksheet.
Dim worksheet = workbook.Worksheets(0)
'Save with SaveAsPdfAsync.
Await worksheet.SaveAsPdfAsync(outputFolder & "Sample 99.3.pdf")
```

## Save to a stream

Use the `Stream` overloads of `SaveAsPdf` on the workbook, worksheet or range to write the PDF to a stream.

```csharp
//Get the worksheet.
var worksheet = workbook.Worksheets[0];
//Create a memory stream.
using var ms = new MemoryStream();
//Write the PDF to the stream.
worksheet.SaveAsPdf(ms);
```

```vbnet
'Get the worksheet.
Dim worksheet = workbook.Worksheets(0)
'Create a memory stream.
Using ms As New MemoryStream()
    'Write the PDF to the stream.
    worksheet.SaveAsPdf(ms)
End Using
```

You can also write to a stream asynchronously.

```csharp
//Get the worksheet.
var worksheet = workbook.Worksheets[0];
//Create the stream.
using var ms = new MemoryStream();
//Write the PDF to the stream asynchronously.
await worksheet.SaveAsPdfAsync(ms);
```

```vbnet
'Get the worksheet.
Dim worksheet = workbook.Worksheets(0)
'Create the stream.
Using ms As New MemoryStream()
    'Write the PDF to the stream asynchronously.
    Await worksheet.SaveAsPdfAsync(ms)
End Using
```

## See also

- [PDF](<https://epplussoftware.com/docs/output-formats/pdf/index.md>)
- [Page setup](<https://epplussoftware.com/docs/output-formats/pdf/page-setup/index.md>)
