/// <summary> /// Rotates the pages and saves the result as a new document to the given StorageFile /// </summary> private async void RotateAndSaveAsync(List <PageOrientation> orientations, StorageFile outputFile) { if (outputFile != null) { Task <Stream> outputStreamTask = outputFile.OpenStreamForWriteAsync(); Stream outputStream = await outputStreamTask; if (outputStream != null) { PdfAssembler pdfAssembler = new PdfAssembler(outputStream); for (int i = 0; i < loadedFile.PageCount; i++) { int pageNumber = i + 1; ExportTask task = new ExportTask(PageRange.FromPattern(loadedFile.Document, pageNumber.ToString()), new PageRotation(orientations[i])); pdfAssembler.AppendTask(task); } pdfAssembler.ExportFile(); } else { ToolPage.Current.NotifyUser("Error occured while while exporting the merged file. Try again.", NotifyType.ErrorMessage); } } else { ToolPage.Current.NotifyUser("No output file has been selected.", NotifyType.ErrorMessage); } }
/// <summary> /// Encrypts ands saves a file. /// @Requires: PasswordInput.Password != null && !String.Empty().Equals(PasswordInput.Password) /// </summary> private async void EncryptAndSaveAsync(InternalFile source, StorageFile outputFile) { if (outputFile != null) { Task <Stream> outputStreamTask = outputFile.OpenStreamForWriteAsync(); Stream outputStream = await outputStreamTask; if (outputStream != null) { string password = PasswordInput.Password; PdfAssembler pdfAssembler = new PdfAssembler(outputStream); PageRange pageRange = PageRange.EntireDocument(source.Document); ExportTask task = new ExportTask(pageRange); pdfAssembler.AppendTask(task); pdfAssembler.ExportFileEncrypted(password); loadedFilesList.Remove(source); ToolPage.Current.NotifyUser(String.Empty, NotifyType.StatusMessage); } else { ToolPage.Current.NotifyUser("Error occured while while exporting the merged file. Try again.", NotifyType.ErrorMessage); } } else { ToolPage.Current.NotifyUser("No output file has been selected.", NotifyType.ErrorMessage); } }
public void TestMergeEntireFiles(string[] inputFileNames, string outputFilename, int expectedNumberOfPages) { List <PdfDocument> inputFiles = new List <PdfDocument>(); foreach (var filename in inputFileNames) { inputFiles.Add(LoadTestFile(filename)); } List <PageRange> relevantPages = new List <PageRange>(); foreach (var doc in inputFiles) { relevantPages.Add(PageRange.EntireDocument(doc)); } List <ExportTask> exportTasks = new List <ExportTask>(); foreach (var pageRange in relevantPages) { exportTasks.Add(new ExportTask(pageRange /*no transform*/)); } Stream outputStream = new FileStream(outputFilename, FileMode.OpenOrCreate, FileAccess.ReadWrite); PdfAssembler assembler = new PdfAssembler(outputStream); foreach (var task in exportTasks) { assembler.AppendTask(task); } assembler.ExportFile(); PdfDocument result = LoadTestFile(outputFilename); Assert.AreEqual(expectedNumberOfPages, result.GetNumberOfPages()); }
private async void MergeButton_Click(object sender, RoutedEventArgs e) { if (loadedFilesList.Count > 0) { var savePicker = new FileSavePicker(); savePicker.FileTypeChoices.Add("PDF-Document", new List <String>() { ".pdf" }); savePicker.SuggestedFileName = "MergedPdfDocuments"; if (!StorageApplicationPermissions.FutureAccessList.ContainsItem(App.RECENT_FILE_DIRECTORY_TOKEN)) { savePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary; } StorageFile savedFile = await savePicker.PickSaveFileAsync(); if (savedFile != null) { Task <Stream> outputStreamTask = savedFile.OpenStreamForWriteAsync(); Stream outputStream = await outputStreamTask; if (outputStream != null) { PdfAssembler pdfAssembler = new PdfAssembler(outputStream); foreach (var obj in loadedFilesList) { var file = (InternalFile)obj; PageRange pageRange = PageRange.EntireDocument(file.Document); ExportTask task = new ExportTask(pageRange); pdfAssembler.AppendTask(task); } pdfAssembler.ExportFile(); } else { ToolPage.Current.NotifyUser("Error occured while while exporting the merged file. Try again.", NotifyType.ErrorMessage); } } else { ToolPage.Current.NotifyUser("No output file has been selected.", NotifyType.ErrorMessage); } } else { ToolPage.Current.NotifyUser("No files loaded.", NotifyType.ErrorMessage); } }
/// <summary> /// Saves the pages from the PageRange instance as a new document to the given StorageFile /// </summary> private async void ExtractAndSaveAsync(PageRange outputPageRange, StorageFile outputFile) { if (outputFile != null) { Task <Stream> outputStreamTask = outputFile.OpenStreamForWriteAsync(); Stream outputStream = await outputStreamTask; if (outputStream != null) { PdfAssembler pdfAssembler = new PdfAssembler(outputStream); ExportTask task = new ExportTask(outputPageRange); pdfAssembler.AppendTask(task); pdfAssembler.ExportFile(); } else { ToolPage.Current.NotifyUser("Error occured while while exporting the merged file. Try again.", NotifyType.ErrorMessage); } } else { ToolPage.Current.NotifyUser("No output file has been selected.", NotifyType.ErrorMessage); } }
public void TestRotatePages(string inputFileName, string outputFilename, int expectedNumberOfPages) { PdfDocument inputFile = LoadTestFile(inputFileName); List <PageRange> relevantPages = new List <PageRange>(); relevantPages.Add(PageRange.FromPattern(inputFile, "1,5")); relevantPages.Add(PageRange.FromPattern(inputFile, "3-4")); relevantPages.Add(PageRange.FromPattern(inputFile, "2-3")); relevantPages.Add(PageRange.FromPattern(inputFile, "")); List <ExportTask> exportTasks = new List <ExportTask>(); exportTasks.Add(new ExportTask(relevantPages[0], new List <IPageTransformation>() { new PageRotation(PageOrientation.NoRotation()) })); exportTasks.Add(new ExportTask(relevantPages[1], new List <IPageTransformation>() { new PageRotation(PageOrientation.UpsideDown()) })); exportTasks.Add(new ExportTask(relevantPages[2], new PageRotation(PageOrientation.RotateRight()))); exportTasks.Add(new ExportTask(relevantPages[3], new PageRotation(PageOrientation.NoRotation()))); Stream outputStream = new FileStream(outputFilename, FileMode.OpenOrCreate, FileAccess.ReadWrite); PdfAssembler assembler = new PdfAssembler(outputStream); foreach (var task in exportTasks) { assembler.AppendTask(task); } assembler.ExportFile(); PdfDocument result = LoadTestFile(outputFilename); Assert.AreEqual(expectedNumberOfPages, result.GetNumberOfPages()); }