private FixedPage GetFixedPage(string fileName, int index) { if (!_xpsCache.TryGetValue(fileName, out var xpsDocument)) { xpsDocument = XpsDocument.Open(fileName); _xpsCache.Add(fileName, xpsDocument); } var fixedDocument = xpsDocument.GetDocument(); return(fixedDocument.GetFixedPage(index)); }
public void TestHyperlink() { using (var xpsDoc = XpsDocument.Open("NavigateUri/Hyperlink.xps")) { PdfDocument pdfDocument = new PdfDocument(); XpsConverter converter = new XpsConverter(pdfDocument, xpsDoc); PdfPage pdfPage = converter.CreatePage(0); converter.RenderPage(pdfPage, 0); Assert.AreEqual(2, pdfPage.Annotations.Count); Assert.AreEqual(typeof(PdfLinkAnnotation), pdfPage.Annotations[0].GetType()); Assert.AreEqual(typeof(PdfLinkAnnotation), pdfPage.Annotations[1].GetType()); } }
/// <summary> /// Initializes a new instance of the <see cref="XpsConverter"/> class. /// </summary> /// <param name="pdfDocument">The PDF document.</param> /// <param name="xpsDocumentPath">The XPS document path.</param> public XpsConverter(PdfDocument pdfDocument, string xpsDocumentPath) // TODO: a constructor with an Uri { if (pdfDocument == null) { throw new ArgumentNullException("pdfDocument"); } if (String.IsNullOrEmpty(xpsDocumentPath)) { throw new ArgumentNullException("xpsDocumentPath"); } this.pdfDocument = pdfDocument; xpsDocument = XpsDocument.Open(xpsDocumentPath); Initialize(); }
public void ConvertManyInput() { var testRootDir = TestContext.WorkDirectory; var xps1File = Path.Combine(testRootDir, "XpsConverterTest/xps", "page1.xps"); var xps2File = Path.Combine(testRootDir, "XpsConverterTest/xps", "page2.xps"); var xps3File = Path.Combine(testRootDir, "XpsConverterTest/xps", "page3.xps"); var pdfFile = Path.Combine(testRootDir, "XpsConverterTest/xps", "page_123.pdf"); var pdfDoc = XpsConverter.Convert( XpsDocument.Open(xps1File).GetDocument().Pages .Concat(XpsDocument.Open(xps2File).GetDocument().Pages) .Concat(XpsDocument.Open(xps3File).GetDocument().Pages) ); Assert.AreEqual(3, pdfDoc.PageCount); pdfDoc.Save(pdfFile); Assert.IsTrue(File.Exists(pdfFile)); }
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> /// A first hack to do the job... /// </summary> public static void RenderPage_Test01(PdfPage page, string xpsFilename) { //XpsDocument xpsdoc = new XpsDocument(xpsFilename, System.IO.FileAccess.Read); //FixedDocument fds = xpsdoc.GetFixedDocument(); //DocumentReferenceCollection docrefs = fds.References; //DocumentReference docref = docrefs[0]; //Uri uri1 = docref.Source; //FixedDocument fixeddoc = docref.GetDocument(false); //PageContent content = fixeddoc.Pages[0]; //Uri uri2 = content.Source; //FixedPage fixedPage = content.Child; //xpsdoc.Close(); // /Documents/1/Pages/1.fpage try { #if true XpsDocument doc = XpsDocument.Open(xpsFilename); FixedPage fpage = doc.GetDocument().GetFixedPage(0); //ZipPackage pack = ZipPackage.Open(xpsFilename) as ZipPackage; Uri uri = new Uri("/Documents/1/Pages/1.fpage", UriKind.Relative); ZipPackagePart part = doc.Package.GetPart(uri) as ZipPackagePart; using (Stream stream = part.GetStream()) { using (StreamReader sr = new StreamReader(stream)) { string xml = sr.ReadToEnd(); #if true string xmlPath = IOPath.Combine(IOPath.GetDirectoryName(xpsFilename), IOPath.GetFileNameWithoutExtension(xpsFilename)) + ".xml"; using (StreamWriter sw = new StreamWriter(xmlPath)) { sw.Write(xml); } #endif DocumentRenderingContext context = new DocumentRenderingContext(page.Owner); //XpsElement el = PdfSharp.Xps.Parsing.XpsParser.Parse(xml); PdfRenderer renderer = new PdfRenderer(); renderer.RenderPage(page, fpage); } } #else ZipPackage pack = ZipPackage.Open(xpsFilename) as ZipPackage; Uri uri = new Uri("/Documents/1/Pages/1.fpage", UriKind.Relative); ZipPackagePart part = pack.GetPart(uri) as ZipPackagePart; using (Stream stream = part.GetStream()) { using (StreamReader sr = new StreamReader(stream)) { string xml = sr.ReadToEnd(); #if true string xmlPath = IOPath.Combine(IOPath.GetDirectoryName(xpsFilename), IOPath.GetFileNameWithoutExtension(xpsFilename)) + ".xml"; using (StreamWriter sw = new StreamWriter(xmlPath)) { sw.Write(xml); } #endif XpsElement el = PdfSharp.Xps.Parsing.XpsParser.Parse(xml); PdfRenderer renderer = new PdfRenderer(); renderer.RenderPage(page, el as PdfSharp.Xps.XpsModel.FixedPage); } } #endif } catch { //DaSt : } }
//[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(); } } }