예제 #1
-1
    /// <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();
      }
    }
예제 #2
-1
        /// <summary>
        /// Implements the PDF file to XPS file conversion.
        /// </summary>
        public static void Convert(XpsDocument xpsDoc, string pdfFilename)
        {
            int docIndex = 0;

            XpsDocument xpsDocument = null;
            try
            {
                xpsDocument = xpsDoc;
                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;



            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                if (xpsDocument != null)
                    xpsDocument.Close();
                throw;
            }
            finally
            {
                if (xpsDocument != null)
                    xpsDocument.Close();
            }
        }