コード例 #1
0
ファイル: XpsRenderer.cs プロジェクト: Alexx999/MigraDoc
        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));
        }
コード例 #2
0
        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());
            }
        }
コード例 #3
0
        /// <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();
        }
コード例 #4
0
        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));
        }
コード例 #5
0
        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();
                }
            }
        }
コード例 #6
0
        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
        }
コード例 #7
0
        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();
                }
            }
        }
コード例 #8
0
        /// <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 :
            }
        }
コード例 #9
0
        //[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();
                }
            }
        }