public static void AppendWebPackage(this PowerPointProcessor target, IWebPackageOutput digitalPackage, Presentation destinationPresentation = null)
        {
            try
            {
                var thread = new Thread(delegate()
                {
                    MessageFilter.Register();
                    var slidesCount = digitalPackage.OutputReplacementsLists.Count;
                    var rowsCount   = digitalPackage.RowsPerSlide;
                    for (var k = 0; k < slidesCount; k++)
                    {
                        var presentationTemplatePath = MasterWizardManager.Instance.SelectedWizard.GetOnlinePackageFile(rowsCount, digitalPackage.PackageSettings.ShowScreenshot);
                        if (!File.Exists(presentationTemplatePath))
                        {
                            continue;
                        }
                        var presentation = target.PowerPointObject.Presentations.Open(FileName: presentationTemplatePath, WithWindow: MsoTriState.msoFalse);
                        foreach (Slide slide in presentation.Slides)
                        {
                            foreach (Shape shape in slide.Shapes)
                            {
                                if (shape.HasTable != MsoTriState.msoTrue)
                                {
                                    continue;
                                }
                                var table             = shape.Table;
                                var tableRowsCount    = table.Rows.Count;
                                var tableColumnsCount = table.Columns.Count;
                                for (var i = 1; i <= tableRowsCount; i++)
                                {
                                    for (var j = 1; j <= tableColumnsCount; j++)
                                    {
                                        var tableShape = table.Cell(i, j).Shape;
                                        if (tableShape.HasTextFrame != MsoTriState.msoTrue)
                                        {
                                            continue;
                                        }
                                        var cellText = tableShape.TextFrame.TextRange.Text.Trim();
                                        if (!digitalPackage.OutputReplacementsLists[k].ContainsKey(cellText))
                                        {
                                            continue;
                                        }
                                        tableShape.TextFrame.TextRange.Text = digitalPackage.OutputReplacementsLists[k][cellText];
                                        digitalPackage.OutputReplacementsLists[k].Remove(cellText);
                                    }
                                }

                                var deletedRows = 0;
                                for (var i = 1; i <= tableRowsCount; i++)
                                {
                                    var tableShape = table.Cell(i - deletedRows, 1).Shape;
                                    if (tableShape.HasTextFrame != MsoTriState.msoTrue)
                                    {
                                        continue;
                                    }
                                    var cellText = tableShape.TextFrame.TextRange.Text.Trim();
                                    if (!cellText.Equals("DeleteRow"))
                                    {
                                        continue;
                                    }
                                    table.Rows[i - deletedRows].Delete();
                                    deletedRows++;
                                }

                                var deletedColumns = 0;
                                tableRowsCount     = table.Rows.Count;
                                tableColumnsCount  = table.Columns.Count;
                                for (var i = 1; i <= tableColumnsCount; i++)
                                {
                                    for (var j = 1; j <= tableRowsCount; j++)
                                    {
                                        var tableShape = table.Cell(j, i - deletedColumns).Shape;
                                        if (tableShape.HasTextFrame != MsoTriState.msoTrue)
                                        {
                                            continue;
                                        }
                                        var cellText = tableShape.TextFrame.TextRange.Text.Trim();
                                        if (!cellText.Equals("DeleteColumn"))
                                        {
                                            continue;
                                        }
                                        table.Columns[i - deletedColumns].Delete();
                                        deletedColumns++;
                                        break;
                                    }
                                }
                            }
                        }
                        var selectedTheme = digitalPackage.SelectedTheme;
                        if (selectedTheme != null)
                        {
                            presentation.ApplyTheme(selectedTheme.GetThemePath());
                        }
                        target.AppendSlide(presentation, -1, destinationPresentation);
                        presentation.Close();
                    }
                });
                thread.Start();

                while (thread.IsAlive)
                {
                    System.Windows.Forms.Application.DoEvents();
                }
            }
            catch { }
            finally
            {
                MessageFilter.Revoke();
            }
        }
 public static void PrepareWebPackageEmail(this PowerPointProcessor target, string fileName, IWebPackageOutput digitalPackage)
 {
     target.PreparePresentation(fileName, presentation => target.AppendWebPackage(digitalPackage, presentation));
 }
		public void AppendWebPackage(IWebPackageOutput digitalPackage, Presentation destinationPresentation = null)
		{
			try
			{
				var thread = new Thread(delegate()
				{
					MessageFilter.Register();
					var slidesCount = digitalPackage.OutputReplacementsLists.Count;
					var rowsCount = digitalPackage.RowsPerSlide;
					for (var k = 0; k < slidesCount; k++)
					{
						var presentationTemplatePath = MasterWizardManager.Instance.SelectedWizard.GetOnlinePackageFile(rowsCount, digitalPackage.PackageSettings.ShowScreenshot);
						if (!File.Exists(presentationTemplatePath)) continue;
						var presentation = PowerPointObject.Presentations.Open(FileName: presentationTemplatePath, WithWindow: MsoTriState.msoFalse);
						foreach (Slide slide in presentation.Slides)
						{
							foreach (Shape shape in slide.Shapes)
							{
								if (shape.HasTable != MsoTriState.msoTrue) continue;
								var table = shape.Table;
								var tableRowsCount = table.Rows.Count;
								var tableColumnsCount = table.Columns.Count;
								for (var i = 1; i <= tableRowsCount; i++)
								{
									for (var j = 1; j <= tableColumnsCount; j++)
									{
										var tableShape = table.Cell(i, j).Shape;
										if (tableShape.HasTextFrame != MsoTriState.msoTrue) continue;
										var cellText = tableShape.TextFrame.TextRange.Text.Trim();
										if (!digitalPackage.OutputReplacementsLists[k].ContainsKey(cellText)) continue;
										tableShape.TextFrame.TextRange.Text = digitalPackage.OutputReplacementsLists[k][cellText];
										digitalPackage.OutputReplacementsLists[k].Remove(cellText);
									}
								}

								var deletedRows = 0;
								for (var i = 1; i <= tableRowsCount; i++)
								{
									var tableShape = table.Cell(i - deletedRows, 1).Shape;
									if (tableShape.HasTextFrame != MsoTriState.msoTrue) continue;
									var cellText = tableShape.TextFrame.TextRange.Text.Trim();
									if (!cellText.Equals("DeleteRow")) continue;
									table.Rows[i - deletedRows].Delete();
									deletedRows++;
								}

								var deletedColumns = 0;
								tableRowsCount = table.Rows.Count;
								tableColumnsCount = table.Columns.Count;
								for (var i = 1; i <= tableColumnsCount; i++)
								{
									for (var j = 1; j <= tableRowsCount; j++)
									{
										var tableShape = table.Cell(j, i - deletedColumns).Shape;
										if (tableShape.HasTextFrame != MsoTriState.msoTrue) continue;
										var cellText = tableShape.TextFrame.TextRange.Text.Trim();
										if (!cellText.Equals("DeleteColumn")) continue;
										table.Columns[i - deletedColumns].Delete();
										deletedColumns++;
										break;
									}
								}
							}
						}
						var selectedTheme = digitalPackage.SelectedTheme;
						if (selectedTheme != null)
							presentation.ApplyTheme(selectedTheme.GetThemePath());
						AppendSlide(presentation, -1, destinationPresentation);
						presentation.Close();
					}
				});
				thread.Start();

				while (thread.IsAlive)
					System.Windows.Forms.Application.DoEvents();
			}
			catch { }
			finally
			{
				MessageFilter.Revoke();
			}
		}
		public void PrepareWebPackageEmail(IWebPackageOutput digitalPackage, string fileName)
		{
			PreparePresentation(fileName, presentation => AppendWebPackage(digitalPackage, presentation));
		}
		public void PrepareWebPackagePdf(IWebPackageOutput digitalPackage, string targetFileName)
		{
			var sourceFileName = Path.GetTempFileName();
			PreparePresentation(sourceFileName, presentation => AppendWebPackage(digitalPackage, presentation));
			BuildPdf(sourceFileName, targetFileName);
		}