Working with WinRT

9 Mar 202210 minutes to read

In your WinRT application, please add the required assemblies in order to use Essential PDF. Refer here for assemblies required.

Loading the document

The following code example illustrates how to load the file by using stream in WinRT.

//Load the file as stream

Stream docStream = typeof(MainPage).GetTypeInfo().Assembly.GetManifestResourceStream("Winrt_Sample.Assets.Data.Sample.pdf");

PdfLoadedDocument loadedDocument = new PdfLoadedDocument();

await loadedDocument.OpenAsync(docStream);

//Create booklet with two sides

PdfDocument document = PdfBookletCreator.CreateBooklet(loadedDocument, new SizeF(1000, 700), true);

MemoryStream stream = new MemoryStream();

//Save the document into memory stream

await document.SaveAsync(stream);

//close the documents

document.Close(true);

loadedDocument.Close(true);

//Save the stream into pdf file

Save(stream, "Booklet.pdf");

async void Save(Stream stream, string filename)

{

stream.Position = 0;

FileSavePicker savePicker = new FileSavePicker();

savePicker.DefaultFileExtension = ".pdf";

savePicker.SuggestedFileName = filename;

savePicker.FileTypeChoices.Add("Adobe PDF Document", new List<string>() { ".pdf" });

StorageFile stFile = await savePicker.PickSaveFileAsync();

if (stFile != null)

{

Windows.Storage.Streams.IRandomAccessStream fileStream = await stFile.OpenAsync(FileAccessMode.ReadWrite);

Stream stream1 = fileStream.AsStreamForWrite();

stream1.SetLength(0);

stream1.Write((stream as MemoryStream).ToArray(), 0, (int)stream.Length);

stream1.Flush();

stream1.Dispose();

fileStream.Dispose();

}

}
'Load the file as stream

Dim docStream As Stream = GetType(MainPage).GetTypeInfo().Assembly.GetManifestResourceStream("WinrtSample.Assets.Sample.pdf")

Dim loadedDocument As New PdfLoadedDocument()

await loadedDocument.OpenAsync(docStream)

'Create booklet with two sides

Dim document As PdfDocument = PdfBookletCreator.CreateBooklet(loadedDocument, New SizeF(1000, 700), True)

Dim stream As New MemoryStream()

'Save the document into memory stream

await document.SaveAsync(stream)

'close the documents

document.Close(True)

loadedDocument.Close(True)

'Save the stream into pdf file

Save(stream, "Booklet.pdf")

Private async Sub Save(ByVal stream As Stream, ByVal filename As String)

stream.Position = 0

Dim savePicker As New FileSavePicker()

savePicker.DefaultFileExtension = ".pdf"

savePicker.SuggestedFileName = filename

savePicker.FileTypeChoices.Add("Adobe PDF Document", New List(Of String) (New String() {".pdf"}))

Dim stFile As StorageFile = await savePicker.PickSaveFileAsync()

If stFile IsNot Nothing Then

Dim fileStream As Windows.Storage.Streams.IRandomAccessStream = await stFile.OpenAsync(FileAccessMode.ReadWrite)

Dim stream1 As Stream = fileStream.AsStreamForWrite()

stream1.SetLength(0)

stream1.Write((TryCast(stream, MemoryStream)).ToArray(), 0, CInt(stream.Length))

stream1.Flush()

stream1.Dispose()

fileStream.Dispose()

End If

End Sub

The following code example illustrates how to load the file by using file picker in WinRT.

//create the file open picker

var picker = new FileOpenPicker();

picker.FileTypeFilter.Add(".pdf");

//Browse the multiple files

IReadOnlyList<StorageFile> files = await picker.PickMultipleFilesAsync();

//Load the file stream

PdfLoadedDocument loadedDocument = new PdfLoadedDocument();

await loadedDocument.OpenAsync(files[0]);

//Create booklet with two sides

PdfDocument document = PdfBookletCreator.CreateBooklet(loadedDocument, new SizeF(1000, 700), true);

MemoryStream stream = new MemoryStream();

//Save the document into memory stream

await document.SaveAsync(stream);

//close the documents

document.Close(true);

loadedDocument.Close(true);

//Save the stream into pdf file

Save(stream, "Booklet.pdf");

async void Save(Stream stream, string filename)

{

stream.Position = 0;

FileSavePicker savePicker = new FileSavePicker();

savePicker.DefaultFileExtension = ".pdf";

savePicker.SuggestedFileName = filename;

savePicker.FileTypeChoices.Add("Adobe PDF Document", new List<string>() { ".pdf" });

StorageFile stFile = await savePicker.PickSaveFileAsync();

if (stFile != null)

{

Windows.Storage.Streams.IRandomAccessStream fileStream = await stFile.OpenAsync(FileAccessMode.ReadWrite);

Stream stream1 = fileStream.AsStreamForWrite();

stream1.SetLength(0);

stream1.Write((stream as MemoryStream).ToArray(), 0, (int)stream.Length);

stream1.Flush();

stream1.Dispose();

fileStream.Dispose();

}

}
'create the file open picker

Dim picker = New FileOpenPicker()

picker.FileTypeFilter.Add(".pdf")

'Browse the multiple files

Dim files As IReadOnlyList(Of StorageFile) = await picker.PickMultipleFilesAsync()

'Load the file stream

Dim loadedDocument As New PdfLoadedDocument()

await loadedDocument.OpenAsync(files(0))

'Create booklet with two sides

Dim document As PdfDocument = PdfBookletCreator.CreateBooklet(loadedDocument, New SizeF(1000, 700), True)

Dim stream As New MemoryStream()

'Save the document into memory stream

await document.SaveAsync(stream)

'close the documents

document.Close(True)

loadedDocument.Close(True)

'Save the stream into pdf file

Save(stream, "Booklet.pdf")

Private async Sub Save(ByVal stream As Stream, ByVal filename As String)

stream.Position = 0

Dim savePicker As New FileSavePicker()

savePicker.DefaultFileExtension = ".pdf"

savePicker.SuggestedFileName = filename

savePicker.FileTypeChoices.Add("Adobe PDF Document", New List(Of String) (New String() {".pdf"}))

Dim stFile As StorageFile = await savePicker.PickSaveFileAsync()

If stFile IsNot Nothing Then

Dim fileStream As Windows.Storage.Streams.IRandomAccessStream = await stFile.OpenAsync(FileAccessMode.ReadWrite)

Dim stream1 As Stream = fileStream.AsStreamForWrite()

stream1.SetLength(0)

stream1.Write((TryCast(stream, MemoryStream)).ToArray(), 0, CInt(stream.Length))

stream1.Flush()

stream1.Dispose()

fileStream.Dispose()

End If

End Sub

Saving the document

The following code example illustrates how to save the PDF document in WinRT by using file picker.

//Create a new document

PdfDocument document = new PdfDocument();

//Add a page

PdfPage page = document.Pages.Add();

//Create Pdf graphics for the page

PdfGraphics graphics = page.Graphics;

//Create a solid brush

PdfBrush brush = new PdfSolidBrush(System.Drawing.Color.FromArgb(255, 0, 0, 0));

//Set the font

PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 36);

//Draw the text

graphics.DrawString("Hello world!", font, brush, new PointF(20, 20));

//create the stream

MemoryStream memoryStream = new MemoryStream();

//save the document into stream

await document.SaveAsync(memoryStream);

//close the document

document.Close(true);

//save the stream into file

Save(memoryStream, "sample.pdf");

async void Save(Stream stream, string filename)

{

stream.Position = 0;

FileSavePicker savePicker = new FileSavePicker();

savePicker.DefaultFileExtension = ".pdf";

savePicker.SuggestedFileName = "Sample";

savePicker.FileTypeChoices.Add("Adobe PDF Document", new List<string>() { ".pdf" });

StorageFile stFile = await savePicker.PickSaveFileAsync();

if (stFile != null)

{

Windows.Storage.Streams.IRandomAccessStream fileStream = await stFile.OpenAsync(FileAccessMode.ReadWrite);

Stream stream1 = fileStream.AsStreamForWrite();

stream1.SetLength(0);

stream1.Write((stream as MemoryStream).ToArray(), 0, (int)stream.Length);

stream1.Flush();

stream1.Dispose();

fileStream.Dispose();

}

}
'Create a new document

Dim document As New PdfDocument()

'Add a page

Dim page As PdfPage = document.Pages.Add()

'Create Pdf graphics for the page

Dim graphics As PdfGraphics = page.Graphics

'Create a solid brush

Dim brush As PdfBrush = New PdfSolidBrush(System.Drawing.Color.FromArgb(255, 0, 0, 0))

'Set the font

Dim font As PdfFont = New PdfStandardFont(PdfFontFamily.Helvetica, 36)

'Draw the text

graphics.DrawString("Hello world!", font, brush, New PointF(20, 20))

'create the stream

Dim memoryStream As New MemoryStream()

'save the document into stream

Await document.SaveAsync(memoryStream)

'close the document

document.Close(True)

'save the stream into file

Save(memoryStream, "sample.pdf")

Private async Sub Save(ByVal stream As Stream, ByVal filename As String)

stream.Position = 0

Dim savePicker As New FileSavePicker()

savePicker.DefaultFileExtension = ".pdf"

savePicker.SuggestedFileName = "Sample"

savePicker.FileTypeChoices.Add("Adobe PDF Document", New List(Of String) (New String() {".pdf"}))

Dim stFile As StorageFile = await savePicker.PickSaveFileAsync()

If stFile IsNot Nothing Then

Dim fileStream As Windows.Storage.Streams.IRandomAccessStream = await stFile.OpenAsync(FileAccessMode.ReadWrite)

Dim stream1 As Stream = fileStream.AsStreamForWrite()

stream1.SetLength(0)

stream1.Write((TryCast(stream, MemoryStream)).ToArray(), 0, CInt(stream.Length))

stream1.Flush()

stream1.Dispose()

fileStream.Dispose()

End If

End Sub