Skip to content

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.

Save a worksheet

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

//Get the worksheet.
var worksheet = workbook.Worksheets[0];
//Save the worksheet as PDF.
worksheet.SaveAsPdf("MyWorksheet.pdf");
'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.

//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");
'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.

//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");
'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.

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.

//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");
'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.

//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);
'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.

//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);
'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.

//Get the worksheet.
var worksheet = workbook.Worksheets[0];
//Save with SaveAsPdfAsync.
await worksheet.SaveAsPdfAsync(outputFolder + "Sample 99.3.pdf");
'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.

//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);
'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.

//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);
'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