xps转pdf

先安装PdfSharp 程序包。

    class Converter
    {
        public static void Xps2Pdf(string xpsFileName, string pdfName)
        {
            if (!Directory.Exists(Path.GetDirectoryName(pdfName)))
            {
                Directory.CreateDirectory(Path.GetDirectoryName(pdfName));
            }
            
            PdfDocument pdf = new PdfDocument();
            XpsDocument xpsDoc = new XpsDocument(xpsFileName, System.IO.FileAccess.Read);
            FixedDocumentSequence docSeq = xpsDoc.GetFixedDocumentSequence();
            var PageCount = docSeq.References[0].GetDocument(false).Pages.Count;

            double scale = 300 / 96;

            for (int pageNum = 0; pageNum < PageCount; pageNum++)
            {
                DocumentPage docPage = docSeq.DocumentPaginator.GetPage(pageNum);

                RenderTargetBitmap renderTarget =
                    new RenderTargetBitmap((int)(scale * (docPage.Size.Height + 1)),
                                                                   (int)(scale * (docPage.Size.Height + 1)),
                                                                   scale * 96,
                                                                   scale * 96, PixelFormats.Pbgra32);
                renderTarget.Render(docPage.Visual);
                PngBitmapEncoder encoder = new PngBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(renderTarget));

                MemoryStream s = new MemoryStream();
                encoder.Save(s);
                XImage img = XImage.FromStream(s);

                PdfPage page = pdf.AddPage();
                page.Width = renderTarget.Width;
                page.Height = renderTarget.Height;
                page.Size = PageSize.A4;
                XGraphics g = XGraphics.FromPdfPage(page);
                g.DrawImage(img, 0, 0);

            }
            pdf.Save(pdfName);
        }

    }
原文地址:https://www.cnblogs.com/jonney-wang/p/13266963.html