Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        /// <summary>
        /// Implements the PDF file to XPS file conversion.
        /// </summary>
        public static void Convert(Stream xpsInStream, Stream pdfOutStream, bool closePdfStream)
        {
            if (xpsInStream == null)
            {
                throw new ArgumentNullException("xpsInStream");
            }

            if (pdfOutStream == null)
            {
                throw new ArgumentNullException("pdfOutStream");
            }

            XpsDocument xpsDocument = null;

            try
            {
                xpsDocument = XpsDocument.Open(xpsInStream);
                FixedDocument fixedDocument = xpsDocument.GetDocument();

                using (PdfDocument pdf = Convert(fixedDocument.Pages))
                {
                    pdf.Save(pdfOutStream, closePdfStream);
                }

                xpsDocument.Close();
                xpsDocument = null;
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                if (xpsDocument != null)
                {
                    xpsDocument.Close();
                }
                throw;
            }
            finally
            {
                if (xpsDocument != null)
                {
                    xpsDocument.Close();
                }
            }
        }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 5
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 :
            }
        }
Esempio n. 6
0
        /// <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();
                }
            }
        }