/// <summary> /// Converts a set of <see cref="FixedPage"/>s from at least one XPS document into a <see cref="PdfDocument"/>. /// This method can be used to merge multiple XPS documents into a single PDF. /// </summary> /// <param name="pages">A collection of FixedPages to render to PDF.</param> /// <returns>A PDF document that contains the converted version of the pages passed in.</returns> public static PdfDocument Convert(IEnumerable <FixedPage> pages) { if (pages == null) { throw new ArgumentNullException(nameof(pages)); } PdfDocument pdfDocument = new PdfDocument(); PdfRenderer renderer = new PdfRenderer(); int pageIndex = 0; foreach (FixedPage page in pages) { if (page == null) { continue; } Debug.WriteLine(String.Format(" page={0}", pageIndex)); PdfPage pdfPage = renderer.CreatePage(pdfDocument, page); renderer.RenderPage(pdfPage, page); pageIndex++; #if DEBUG // stop at page... if (pageIndex == 50) { break; } #endif } return(pdfDocument); }
/// <summary> /// Implements the PDF file to XPS file conversion. /// </summary> public static void Convert(XpsDocument xpsDocument, string pdfFilename, int docIndex) { if (xpsDocument == null) { throw new ArgumentNullException("xpsDocument"); } if (String.IsNullOrEmpty(pdfFilename)) { throw new ArgumentNullException("pdfFilename"); } FixedDocument fixedDocument = xpsDocument.GetDocument(); PdfDocument pdfDocument = new PdfDocument(); PdfRenderer renderer = new PdfRenderer(); int pageIndex = 0; foreach (FixedPage page in fixedDocument.Pages) { if (page == null) { continue; } Debug.WriteLine(String.Format(" doc={0}, page={1}", docIndex, pageIndex)); PdfPage pdfPage = renderer.CreatePage(pdfDocument, page); renderer.RenderPage(pdfPage, page); pageIndex++; } pdfDocument.Save(pdfFilename); }
public static void ConvertToPdfInMemory(XpsDocument xpsDocument, MemoryStream pdfMemoryStream, int docIndex) { if (xpsDocument == null) { throw new ArgumentNullException("xpsDocument"); } if (pdfMemoryStream == null) { throw new ArgumentNullException("pdfMemoryStream"); } FixedDocument fixedDocument = xpsDocument.GetDocument(); PdfDocument pdfDocument = new PdfDocument(); PdfRenderer renderer = new PdfRenderer(); int pageIndex = 0; foreach (FixedPage page in fixedDocument.Pages) { if (page == null) { continue; } PdfPage pdfPage = renderer.CreatePage(pdfDocument, page); renderer.RenderPage(pdfPage, page); pageIndex++; } pdfDocument.Save(pdfMemoryStream, false); }
/// <summary> /// Implements the PDF file to XPS file conversion. /// </summary> private static void DoConvert(XpsDocument xpsDocument, string pdfFilename, int docIndex) { if (xpsDocument == null) { throw new ArgumentNullException("xpsDocument"); } if (String.IsNullOrEmpty(pdfFilename)) { throw new ArgumentNullException("pdfFilename"); } var seq = xpsDocument.GetFixedDocumentSequence(); var pdfDocument = new PdfDocument(); var renderer = new PdfRenderer(); int pageIndex = 0; var refs = seq.References; var docs = refs.Select(r => r.GetDocument(false)); foreach (var fixedDocument in docs) { foreach (var page in fixedDocument.Pages) { if (page == null) { continue; } var fixedPage = page.GetPageRoot(false); if (fixedPage == null) { continue; } Debug.WriteLine(String.Format(" doc={0}, page={1}", docIndex, pageIndex)); PdfPage pdfPage = renderer.CreatePage(pdfDocument, fixedPage); renderer.RenderPage(pdfPage, fixedPage); pageIndex++; #if DEBUG // stop at page... if (pageIndex == 50) { break; } #endif } } pdfDocument.Save(pdfFilename); }
/// <summary> /// Implements the PDF file to XPS file conversion. /// </summary> public static void Convert(XpsDocument xpsDocument, string pdfFilename, int docIndex) { if (xpsDocument == null) { throw new ArgumentNullException("xpsDocument"); } if (String.IsNullOrEmpty(pdfFilename)) { throw new ArgumentNullException("pdfFilename"); } FixedDocument fixedDocument = xpsDocument.GetDocument(); PdfDocument pdfDocument = new PdfDocument(); PdfRenderer renderer = new PdfRenderer(); int pageIndex = 0; foreach (FixedPage page in fixedDocument.Pages) { if (page == null) { continue; } Debug.WriteLine(String.Format(" doc={0}, page={1}", docIndex, pageIndex)); PdfPage pdfPage = renderer.CreatePage(pdfDocument, page); renderer.RenderPage(pdfPage, page); pageIndex++; /* DEBUG constant must be active in order to avoid problem with partial pages. * See: http://www.nathanpjones.com/wp/2013/03/output-to-pdf-in-wpf-for-free/ * So, the next limitation is no longer possible... #if DEBUG * // stop at page... * if (pageIndex == 50) * break; #endif */ } pdfDocument.Save(pdfFilename); }
public void TestRenderingAllSamples() { string path = "PdfSharp/testing/SampleXpsDocuments_1_0"; string dir = GetDirectory(path); if (dir == null) { throw new FileNotFoundException("Path not found: " + path + ". Follow instructions in ../../../SampleXpsDocuments_1_0/!readme.txt to download samples from the Internet."); } if (!Directory.Exists(dir)) { throw new FileNotFoundException("Path not found: " + path + ". Follow instructions in ../../../SampleXpsDocuments_1_0/!readme.txt to download samples from the Internet."); } #if true string[] files = Directory.GetFiles(dir, "*.xps", SearchOption.AllDirectories); #else string[] files = Directory.GetFiles("../../../XPS-TestDocuments", "*.xps", SearchOption.AllDirectories); #endif //files = Directory.GetFiles(@"G:\!StLa\PDFsharp-1.20\SourceCode\PdfSharp\testing\SampleXpsDocuments_1_0\MXDW", "*.xps", SearchOption.AllDirectories); //files = Directory.GetFiles(@"G:\!StLa\PDFsharp-1.20\SourceCode\PdfSharp\testing\SampleXpsDocuments_1_0\Handcrafted", "*.xps", SearchOption.AllDirectories); //files = Directory.GetFiles(@"G:\!StLa\PDFsharp-1.20\SourceCode\PdfSharp\testing\SampleXpsDocuments_1_0\Showcase", "*.xps", SearchOption.AllDirectories); //files = Directory.GetFiles(@"G:\!StLa\PDFsharp-1.20\SourceCode\PdfSharp\testing\SampleXpsDocuments_1_0\QualityLogicMinBar", "*.xps", SearchOption.AllDirectories); if (files.Length == 0) { throw new Exception("No sample file found. Copy sample files to the \"SampleXpsDocuments_1_0\" folder!"); } foreach (string filename in files) { // No negative tests here if (filename.Contains("\\ConformanceViolations\\")) { continue; } //if (filename.Contains("\\Showcase\\")) // continue; //if (!filename.Contains("Vista")) // continue; Debug.WriteLine(filename); try { int docIndex = 0; XpsDocument xpsDoc = XpsDocument.Open(filename); foreach (FixedDocument doc in xpsDoc.Documents) { try { PdfDocument pdfDoc = new PdfDocument(); PdfRenderer renderer = new PdfRenderer(); int pageIndex = 0; foreach (FixedPage page in doc.Pages) { if (page == null) { continue; } Debug.WriteLine(String.Format(" doc={0}, page={1}", docIndex, pageIndex)); PdfPage pdfPage = renderer.CreatePage(pdfDoc, page); renderer.RenderPage(pdfPage, page); pageIndex++; // stop at page... if (pageIndex == 50) { break; } } string pdfFilename = IOPath.GetFileNameWithoutExtension(filename); if (docIndex != 0) { pdfFilename += docIndex.ToString(); } pdfFilename += ".pdf"; pdfFilename = IOPath.Combine(IOPath.GetDirectoryName(filename), pdfFilename); pdfDoc.Save(pdfFilename); } catch (Exception ex) { Debug.WriteLine("Exception: " + ex.Message); } docIndex++; } } catch (Exception ex) { Debug.WriteLine(ex.Message); GetType(); } } }
public void TestRenderingTypographySamples() { #if true string path = "PdfSharp/testing/SampleXpsDocuments_1_0/MXDW"; string dir = GetDirectory(path); if (dir == null) { throw new FileNotFoundException("Path not found: " + path + ". Follow instructions in ../../../SampleXpsDocuments_1_0/!readme.txt to download samples from the Internet."); } if (!Directory.Exists(dir)) { throw new FileNotFoundException("Path not found: " + path + ". Follow instructions in ../../../SampleXpsDocuments_1_0/!readme.txt to download samples from the Internet."); } string[] files = Directory.GetFiles(dir, "*Poster.xps", SearchOption.TopDirectoryOnly); if (files.Length == 0) { throw new Exception("No sample file found."); } foreach (string filename in files) { //if (!filename.EndsWith("CalibriPoster.xps")) // continue; Debug.WriteLine(filename); try { XpsDocument xpsDoc = XpsDocument.Open(filename); int docIndex = 0; foreach (FixedDocument doc in xpsDoc.Documents) { PdfDocument pdfDocument = new PdfDocument(); //PdfRenderer renderer = new PdfRenderer(); XpsConverter converter = new XpsConverter(pdfDocument, xpsDoc); int pageIndex = 0; foreach (FixedPage page in doc.Pages) { Debug.WriteLine(String.Format(" doc={0}, page={1}", docIndex, pageIndex)); // HACK: API is senseless PdfPage pdfPage = converter.CreatePage(pageIndex); converter.RenderPage(pdfPage, pageIndex); pageIndex++; } string pdfFilename = IOPath.GetFileNameWithoutExtension(filename); if (docIndex != 0) { pdfFilename += docIndex.ToString(); } pdfFilename += ".pdf"; pdfFilename = IOPath.Combine(IOPath.GetDirectoryName(filename), pdfFilename); pdfDocument.Save(pdfFilename); docIndex++; } } catch (Exception ex) { Debug.WriteLine(ex.Message); GetType(); } } #else //string data = "2.11592697149066,169.466971230985 7.31945717924454E-09,161.067961604689"; //TokenizerHelper helper = new TokenizerHelper(data); //string t = helper.NextTokenRequired(); //t = helper.NextTokenRequired(); //t = helper.NextTokenRequired(); //t = helper.NextTokenRequired(); string[] files = Directory.GetFiles("../../../../../testing/PdfSharp.Xps.UnitTests/Typography", "*.xps", SearchOption.AllDirectories); //files = Directory.GetFiles(@"G:\!StLa\PDFsharp-1.10\OpenSource\PDFsharp\WPF\SampleXpsDocuments_1_0\FontPoster", "*.xps", SearchOption.AllDirectories); if (files.Length == 0) { throw new Exception("No sample file found."); } foreach (string filename in files) { // No negative tests here if (filename.Contains("\\ConformanceViolations\\")) { continue; } //if (!filename.EndsWith("CalibriPoster.xps")) // continue; Debug.WriteLine(filename); try { #if true XpsDocument xpsDoc = XpsDocument.Open(filename); int docIndex = 0; foreach (FixedDocument doc in xpsDoc.Documents) { PdfDocument pdfDocument = new PdfDocument(); //PdfRenderer renderer = new PdfRenderer(); XpsConverter converter = new XpsConverter(pdfDocument, xpsDoc); int pageIndex = 0; foreach (FixedPage page in doc.Pages) { Debug.WriteLine(String.Format(" doc={0}, page={1}", docIndex, pageIndex)); // HACK: API is senseless PdfPage pdfPage = converter.CreatePage(pageIndex); converter.RenderPage(pdfPage, pageIndex); pageIndex++; } string pdfFilename = IOPath.GetFileNameWithoutExtension(filename); if (docIndex != 0) { pdfFilename += docIndex.ToString(); } pdfFilename += ".pdf"; pdfFilename = IOPath.Combine(IOPath.GetDirectoryName(filename), pdfFilename); pdfDocument.Save(pdfFilename); docIndex++; } #else int docIndex = 0; XpsDocument xpsDoc = XpsDocument.Open(filename); foreach (FixedDocument doc in xpsDoc.Documents) { PdfDocument pdfDoc = new PdfDocument(); PdfRenderer renderer = new PdfRenderer(); int pageIndex = 0; foreach (FixedPage page in doc.Pages) { Debug.WriteLine(String.Format(" doc={0}, page={1}", docIndex, pageIndex)); PdfPage pdfPage = renderer.CreatePage(pdfDoc, page); renderer.RenderPage(pdfPage, page); pageIndex++; } string pdfFilename = IOPath.GetFileNameWithoutExtension(filename); if (docIndex != 0) { pdfFilename += docIndex.ToString(); } pdfFilename += ".pdf"; pdfFilename = IOPath.Combine(IOPath.GetDirectoryName(filename), pdfFilename); pdfDoc.Save(pdfFilename); docIndex++; } #endif } catch (Exception ex) { Debug.WriteLine(ex.Message); GetType(); } } #endif }
public void TestExternalXpsFiles() { string path = "SampleXpsDocuments_1_0"; string dir = (path); if (dir == null) { Assert.Inconclusive("Path not found: " + path + ". Follow instructions in ../../../SampleXpsDocuments_1_0/!readme.txt to download samples from the Internet."); return; } if (!Directory.Exists(dir)) { Assert.Inconclusive("Path not found: " + path + ". Follow instructions in ../../../SampleXpsDocuments_1_0/!readme.txt to download samples from the Internet."); return; } string[] files = Directory.GetFiles(dir, "*.xps", SearchOption.AllDirectories); if (files.Length == 0) { Assert.Inconclusive("No sample file found. Follow instructions in ../../../SampleXpsDocuments_1_0/!readme.txt to download samples from the Internet."); return; } foreach (string filename in files) { // No negative tests here if (filename.Contains("\\ConformanceViolations\\")) { continue; } Debug.WriteLine(filename); try { int docIndex = 0; using (XpsDocument xpsDoc = XpsDocument.Open(filename)) { foreach (FixedDocument doc in xpsDoc.Documents) { PdfDocument pdfDoc = new PdfDocument(); PdfRenderer renderer = new PdfRenderer(); int pageIndex = 0; foreach (FixedPage page in doc.Pages) { Debug.WriteLine(String.Format(" doc={0}, page={1}", docIndex, pageIndex)); PdfPage pdfPage = renderer.CreatePage(pdfDoc, page); renderer.RenderPage(pdfPage, page); pageIndex++; } string pdfFilename = IOPath.GetFileNameWithoutExtension(filename); if (docIndex != 0) { pdfFilename += docIndex.ToString(); } pdfFilename += ".pdf"; pdfFilename = IOPath.Combine(IOPath.GetDirectoryName(filename), pdfFilename); pdfDoc.Save(pdfFilename); docIndex++; } } } catch (Exception ex) { Debug.WriteLine(ex.Message); GetType(); } } }
/// <summary> /// Implements the PDF file to XPS file conversion. /// </summary> public static void Convert(string xpsFilename, string pdfFilename, int docIndex, bool createComparisonDocument) { if (String.IsNullOrEmpty(xpsFilename)) { throw new ArgumentNullException("xpsFilename"); } if (String.IsNullOrEmpty(pdfFilename)) { pdfFilename = xpsFilename; if (IOPath.HasExtension(pdfFilename)) { pdfFilename = pdfFilename.Substring(0, pdfFilename.LastIndexOf('.')); } pdfFilename += ".pdf"; } XpsDocument xpsDocument = null; try { xpsDocument = XpsDocument.Open(xpsFilename); FixedDocument fixedDocument = xpsDocument.GetDocument(); PdfDocument pdfDocument = new PdfDocument(); PdfRenderer renderer = new PdfRenderer(); int pageIndex = 0; foreach (FixedPage page in fixedDocument.Pages) { if (page == null) { continue; } Debug.WriteLine(String.Format(" doc={0}, page={1}", docIndex, pageIndex)); PdfPage pdfPage = renderer.CreatePage(pdfDocument, page); renderer.RenderPage(pdfPage, page); pageIndex++; #if DEBUG // stop at page... if (pageIndex == 50) { break; } #endif } pdfDocument.Save(pdfFilename); xpsDocument.Close(); xpsDocument = null; if (createComparisonDocument) { System.Windows.Xps.Packaging.XpsDocument xpsDoc = new System.Windows.Xps.Packaging.XpsDocument(xpsFilename, FileAccess.Read); System.Windows.Documents.FixedDocumentSequence docSeq = xpsDoc.GetFixedDocumentSequence(); if (docSeq == null) { throw new InvalidOperationException("docSeq"); } XPdfForm form = XPdfForm.FromFile(pdfFilename); PdfDocument pdfComparisonDocument = new PdfDocument(); pageIndex = 0; foreach (PdfPage page in pdfDocument.Pages) { if (page == null) { continue; } Debug.WriteLine(String.Format(" doc={0}, page={1}", docIndex, pageIndex)); PdfPage pdfPage = /*renderer.CreatePage(pdfComparisonDocument, page);*/ pdfComparisonDocument.AddPage(); double width = page.Width; double height = page.Height; pdfPage.Width = page.Width * 2; pdfPage.Height = page.Height; DocumentPage docPage = docSeq.DocumentPaginator.GetPage(pageIndex); //byte[] png = PngFromPage(docPage, 96); BitmapSource bmsource = BitmapSourceFromPage(docPage, 96 * 2); XImage image = XImage.FromBitmapSource(bmsource); XGraphics gfx = XGraphics.FromPdfPage(pdfPage); form.PageIndex = pageIndex; gfx.DrawImage(form, 0, 0, width, height); gfx.DrawImage(image, width, 0, width, height); //renderer.RenderPage(pdfPage, page); pageIndex++; #if DEBUG // stop at page... if (pageIndex == 50) { break; } #endif } string pdfComparisonFilename = pdfFilename; if (IOPath.HasExtension(pdfComparisonFilename)) { pdfComparisonFilename = pdfComparisonFilename.Substring(0, pdfComparisonFilename.LastIndexOf('.')); } pdfComparisonFilename += "-comparison.pdf"; pdfComparisonDocument.ViewerPreferences.FitWindow = true; //pdfComparisonDocument.PageMode = PdfPageMode. pdfComparisonDocument.PageLayout = PdfPageLayout.SinglePage; pdfComparisonDocument.Save(pdfComparisonFilename); } } catch (Exception ex) { Debug.WriteLine(ex.Message); if (xpsDocument != null) { xpsDocument.Close(); } throw; } finally { if (xpsDocument != null) { xpsDocument.Close(); } } }
//[TestMethod] public void TestRenderingAllSamples() { string dir = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); // Directory.GetCurrentDirectory(); int slash = dir.LastIndexOf("\\"); while ((slash = dir.LastIndexOf("\\")) != -1) { if (dir.EndsWith("PdfSharp")) { break; } dir = dir.Substring(0, slash); } dir += "/testing/SampleXpsDocuments_1_0"; #if true string[] files = Directory.GetFiles(dir, "*.xps", SearchOption.AllDirectories); #else string[] files = Directory.GetFiles("../../../XPS-TestDocuments", "*.xps", SearchOption.AllDirectories); #endif //files = Directory.GetFiles(@"G:\!StLa\PDFsharp-1.20\SourceCode\PdfSharp\testing\SampleXpsDocuments_1_0\MXDW", "*.xps", SearchOption.AllDirectories); //files = Directory.GetFiles(@"G:\!StLa\PDFsharp-1.20\SourceCode\PdfSharp\testing\SampleXpsDocuments_1_0\Handcrafted", "*.xps", SearchOption.AllDirectories); //files = Directory.GetFiles(@"G:\!StLa\PDFsharp-1.20\SourceCode\PdfSharp\testing\SampleXpsDocuments_1_0\Showcase", "*.xps", SearchOption.AllDirectories); files = Directory.GetFiles(@"G:\!StLa\PDFsharp-1.20\SourceCode\PdfSharp\testing\SampleXpsDocuments_1_0\QualityLogicMinBar", "*.xps", SearchOption.AllDirectories); if (files.Length == 0) { throw new Exception("No sample file found. Copy sample files to the \"SampleXpsDocuments_1_0\" folder!"); } foreach (string filename in files) { // No negative tests here if (filename.Contains("\\ConformanceViolations\\")) { continue; } //if (filename.Contains("\\Showcase\\")) // continue; //if (!filename.Contains("Vista")) // continue; Debug.WriteLine(filename); try { int docIndex = 0; XpsDocument xpsDoc = XpsDocument.Open(filename); foreach (FixedDocument doc in xpsDoc.Documents) { try { PdfDocument pdfDoc = new PdfDocument(); PdfRenderer renderer = new PdfRenderer(); int pageIndex = 0; foreach (FixedPage page in doc.Pages) { if (page == null) { continue; } Debug.WriteLine(String.Format(" doc={0}, page={1}", docIndex, pageIndex)); PdfPage pdfPage = renderer.CreatePage(pdfDoc, page); renderer.RenderPage(pdfPage, page); pageIndex++; // stop at page... if (pageIndex == 50) { break; } } string pdfFilename = IOPath.GetFileNameWithoutExtension(filename); if (docIndex != 0) { pdfFilename += docIndex.ToString(); } pdfFilename += ".pdf"; pdfFilename = IOPath.Combine(IOPath.GetDirectoryName(filename), pdfFilename); pdfDoc.Save(pdfFilename); } catch (Exception ex) { Debug.WriteLine("Exception: " + ex.Message); } docIndex++; } } catch (Exception ex) { Debug.WriteLine(ex.Message); GetType(); } } }