private static string PdfOutputPath = @"d:\Temp\1";
private static string SourcePdfDocumentPath =
Path.Combine(
System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
@"Content\TestPdf.pdf");
static void Main(string[] args)
{
PdfDocument.EnableCache = false; // to prevent exceptions im multithreading environment;
OutputPdfFlattenOneThread(100);
OutputPdfFlattenMultithreading(100);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
private static void OutputPdfFlattenOneThread(int documentsCount)
{
Console.WriteLine("One thread generating pdf files:");
Console.WriteLine();
foreach (var index in Enumerable.Range(0, documentsCount))
{
PdfDocument outputDocument = new PdfDocument();
outputDocument.Form.Flatten = true;
FileStream sourceStream = new FileStream(SourcePdfDocumentPath, FileMode.Open, FileAccess.Read, FileShare.Read);
PdfLoadedDocument loadedDocument = new PdfLoadedDocument(sourceStream);
foreach (PdfPageBase page in loadedDocument.Pages)
{
outputDocument.ImportPage(loadedDocument, page);
}
outputDocument.Save(Path.Combine(PdfOutputPath, "oneThread", string.Concat(index, ".pdf")));
loadedDocument.Close(true);
outputDocument.Close(true);
Console.WriteLine("{0}.pdf document has been created", index);
}
Console.WriteLine();
Console.WriteLine();
}
private static void OutputPdfFlattenMultithreading(int documentsCount)
{
Console.WriteLine("Multiple threads generating pdf files:");
Enumerable.Range(0, documentsCount).AsParallel().ForAll(index =>
{
Console.WriteLine("{0}.pdf document is creating", index);
PdfDocument outputDocument = new PdfDocument();
outputDocument.Form.Flatten = true;
FileStream sourceStream = new FileStream(SourcePdfDocumentPath, FileMode.Open, FileAccess.Read, FileShare.Read);
PdfLoadedDocument loadedDocument = new PdfLoadedDocument(sourceStream);
foreach (PdfPageBase page in loadedDocument.Pages)
{
outputDocument.ImportPage(loadedDocument, page);
}
outputDocument.Save(Path.Combine(PdfOutputPath, "multipleThreads", string.Concat(index, ".pdf")));
loadedDocument.Close(true);
outputDocument.Close(true);
sourceStream.Close();
});
Console.WriteLine();
Console.WriteLine();
}