API which uses Windows.Data.Pdf from C# to print a PDF file.
No third party apps required - no additional licenses. Only Windows.
PDF's are printed as vector. Text and fonts are preserved. Desktop and WinRT apps.
- Ensure project specifies a windows version in
csproj
:<TargetFramework>net7.0-windows10.0.22621.0</TargetFramework>
- Add NuGet package
Rmg.WinRTPdfPrinter
- Create a
PdfPrinter
and callPrint
- There is no step 4
Example (Program.cs):
var pdfPrinter = new PdfPrinter();
await pdfPrinter.Print(printerName, pdfPath);
You can also use this to convert a PDF to XPS:
var pdfPrinter = new PdfPrinter();
await pdfPrinter.ConvertToXps("input.pdf", "output.xps");
You can also use this to convert a PDF to Tiff:
var pdfPrinter = new PdfPrinter();
await pdfPrinter.ConvertToTiff("input.pdf", "output.tiff");
By default, a color, opaque, 300dpi, ZIP compressed multipage tiff will result. These settings can be
adjusted with TiffConversionOptions
:
// Produce a fax-style 1bpp TIFF
await pdfPrinter.ConvertToTiff("input.pdf", "output.tiff", new (Dpi: 150, ColorMode: TiffColorMode.BlackAndWhite);
// Produce a transparent background RGBA tiff
await pdfPrinter.ConvertToTiff("input.pdf", "output.tiff, new (FillBackground: false));
You don't need this library if you are only working with a single page at a time. The
PdfPage.RenderToStreamAsync
method allows you to specify a bitmap encoder and rects:
var pdfFile = await StorageFile.GetFileFromPathAsync(@"C:\drop\example.pdf");
var pdfDoc = await PdfDocument.LoadFromFileAsync(pdfFile);
var outDir = await StorageFolder.GetFolderFromPathAsync(@"C:\drop\");
for (uint pageIndex = 0; pageIndex < pdfDoc.PageCount; pageIndex++)
{
var pdfPage = pdfDoc.GetPage(pageIndex);
var pngFile = await outDir.CreateFileAsync($"page-{pageIndex}.png", CreationCollisionOption.ReplaceExisting);
using var pngStream = await pngFile.OpenAsync(FileAccessMode.ReadWrite);
var options = new PdfPageRenderOptions();
options.BitmapEncoderId = BitmapEncoder.PngEncoderId;
// optionally specify source rectangle or dimensions
await pdfPage.RenderToStreamAsync(pngStream, options);
}
- WPF viewer control
- netframework support
- Earlier revisions of netcore