Merge PDF Documents in Silverlight

  • Demo
  • App.xaml
  • App.xaml.cs
  • App.xaml.vb
  • MainPage.xaml
  • MainPage.xaml.cs
  • MainPage.xaml.vb

The sample demonstrates how to Merge PDF documents in Silverlight via Spire.XLS.

(No Screenshots)

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             x:Class="MergePdfTest.App">
    <Application.Resources>
        
    </Application.Resources>
</Application>

using System;
using System.Windows;

namespace MergePdfTest
{
    public partial class App : Application
    {

        public App()
        {
            this.Startup += this.Application_Startup;
            this.Exit += this.Application_Exit;
            this.UnhandledException += this.Application_UnhandledException;

            InitializeComponent();
        }

        private void Application_Startup(object sender, StartupEventArgs e)
        {
            this.RootVisual = new MainPage();
        }

        private void Application_Exit(object sender, EventArgs e)
        {

        }

        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
        {
            // If the app is running outside of the debugger then report the exception using
            // the browser's exception mechanism. On IE this will display it a yellow alert 
            // icon in the status bar and Firefox will display a script error.
            if (!System.Diagnostics.Debugger.IsAttached)
            {

                // NOTE: This will allow the application to continue running after an exception has been thrown
                // but not handled. 
                // For production applications this error handling should be replaced with something that will 
                // report the error to the website and stop the application.
                e.Handled = true;
                Deployment.Current.Dispatcher.BeginInvoke(delegate { ReportErrorToDOM(e); });
            }
        }

        private void ReportErrorToDOM(ApplicationUnhandledExceptionEventArgs e)
        {
            try
            {
                string errorMsg = e.ExceptionObject.Message + e.ExceptionObject.StackTrace;
                errorMsg = errorMsg.Replace('"', '\'').Replace("\r\n", @"\n");

                System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(\"Unhandled Error in Silverlight Application " + errorMsg + "\");");
            }
            catch (Exception)
            {
            }
        }
    }
}

Imports System.Windows

Namespace MergePdfTest
	Partial Public Class App
		Inherits Application

		Public Sub New()
			AddHandler Me.Startup, AddressOf Application_Startup
			AddHandler Me.Exit, AddressOf Application_Exit
			AddHandler Me.UnhandledException, AddressOf Application_UnhandledException

			InitializeComponent()
		End Sub

		Private Sub Application_Startup(ByVal sender As Object, ByVal e As StartupEventArgs)
			Me.RootVisual = New MainPage()
		End Sub

		Private Sub Application_Exit(ByVal sender As Object, ByVal e As EventArgs)

		End Sub

		Private Sub Application_UnhandledException(ByVal sender As Object, ByVal e As ApplicationUnhandledExceptionEventArgs)
			' If the app is running outside of the debugger then report the exception using
			' the browser's exception mechanism. On IE this will display it a yellow alert 
			' icon in the status bar and Firefox will display a script error.
			If Not Debugger.IsAttached Then

				' NOTE: This will allow the application to continue running after an exception has been thrown
				' but not handled. 
				' For production applications this error handling should be replaced with something that will 
				' report the error to the website and stop the application.
				e.Handled = True
				Deployment.Current.Dispatcher.BeginInvoke(Sub() ReportErrorToDOM(e))
			End If
		End Sub

		Private Sub ReportErrorToDOM(ByVal e As ApplicationUnhandledExceptionEventArgs)
			Try
				Dim errorMsg As String = e.ExceptionObject.Message + e.ExceptionObject.StackTrace
				errorMsg = errorMsg.Replace(""""c, "'"c).Replace(vbCrLf, vbLf)

				System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(""Unhandled Error in Silverlight Application " & errorMsg & """);")
			Catch e1 As Exception
			End Try
		End Sub
	End Class
End Namespace

<UserControl x:Class="MergePdfTest.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="236" d:DesignWidth="384" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">

    <Grid x:Name="LayoutRoot" Background="#FFCDDEFF" Loaded="LayoutRoot_Loaded" Height="236" Width="380">
        <Button Content="Merge" Height="23" HorizontalAlignment="Left" Margin="278,0,0,30" Name="button1" VerticalAlignment="Bottom" Width="75" Click="button1_Click" />
        

using System.Linq;
using System.Windows;
using System.Windows.Controls;

using Spire.Pdf;

namespace MergePdfTest
{
    public partial class MainPage : UserControl
    {
        //create two blank pdf files
        PdfDocument document1 = new PdfDocument();
        PdfDocument document2 = new PdfDocument();

        public MainPage()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            //merge the two files
            document1.AppendPage(document2);
            
            //save the result using a SaveFileDialog
            SaveFileDialog saveFileDiaglog = new SaveFileDialog();
            bool? resultSave = saveFileDiaglog.ShowDialog();
            if (resultSave.HasValue && resultSave.Value)
            {
                document1.SaveToStream(saveFileDiaglog.OpenFile());
            }
        }

        private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
        {
           
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
           //new a OpenFileDialog to open the pdf files will be merged
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.Filter = "Pdf Documents (*.pdf)|*.pdf";
            openFileDialog1.FilterIndex = 1;
            openFileDialog1.Multiselect = true;
            bool? userClickedOK = openFileDialog1.ShowDialog();

            //Process input if the user clicked OK.
            if (userClickedOK == true)
            {
                //get the selected files 
                System.IO.Stream fileStream1 = openFileDialog1.Files.ElementAt(0).OpenRead();
                System.IO.Stream filestream2 = openFileDialog1.Files.ElementAt(1).OpenRead();
                document1.LoadFromStream(fileStream1);
                document2.LoadFromStream(filestream2);
            }

        }
    }
}

Imports System.Windows
Imports System.Windows.Controls

Imports Spire.Pdf

Namespace MergePdfTest
	Partial Public Class MainPage
		Inherits UserControl
		'create two blank pdf files
		Private document1 As New PdfDocument()
		Private document2 As New PdfDocument()

		Public Sub New()
			InitializeComponent()
		End Sub

		Private Sub button1_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
			'merge the two files
			document1.AppendPage(document2)

			'save the result using a SaveFileDialog
			Dim saveFileDiaglog As New SaveFileDialog()
			Dim resultSave? As Boolean = saveFileDiaglog.ShowDialog()
			If resultSave.HasValue AndAlso resultSave.Value Then
				document1.SaveToStream(saveFileDiaglog.OpenFile())
			End If
		End Sub

		Private Sub LayoutRoot_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs)

		End Sub

		Private Sub button2_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
		   'new a OpenFileDialog to open the pdf files will be merged
			Dim openFileDialog1 As New OpenFileDialog()
			openFileDialog1.Filter = "Pdf Documents (*.pdf)|*.pdf"
			openFileDialog1.FilterIndex = 1
			openFileDialog1.Multiselect = True
			Dim userClickedOK? As Boolean = openFileDialog1.ShowDialog()

			'Process input if the user clicked OK.
			If userClickedOK = True Then
				'get the selected files 
				Dim fileStream1 As System.IO.Stream = openFileDialog1.Files.ElementAt(0).OpenRead()
				Dim filestream2 As System.IO.Stream = openFileDialog1.Files.ElementAt(1).OpenRead()
				document1.LoadFromStream(fileStream1)
				document2.LoadFromStream(filestream2)
			End If

		End Sub
	End Class
End Namespace