渲染画布仅在打开的窗口中工作?

时间:2013-10-17 08:32:12

标签: c# wpf pdf canvas render

我遇到了一个与之混淆的问题。 我在C#中绘制一些WPF Canvas并将它们添加到列表中。我将列表绑定到TabControl以显示它们。我看得很清楚。所以现在我想将它们全部保存为PDF,我为ea Canvas创建了一个单独的PDF。第一个PDF显示Canvas,其他都是空的。 如果我在ShowDialog()的新窗口中打印方法中打开ea Canvas并关闭它,它会创建所有页面。

那么如何在不打开需要关闭的额外窗口的情况下渲染所有窗口。

我正在使用PDFSharp创建PDF

// PDF创建方法

 s_document = new PdfDocument();
            s_document.Info.Title = "PDFKlemmen";
            s_document.Info.Author = Environment.UserName + " FESTO AG & Co. KG Abt. SG-ME";
            s_document.Info.Subject = "Belegungsplan IO";

            //cCanvastest ct = new cCanvastest(Can); // This is the other Window
            //ct.ShowDialog();

            PdfSharp.Pdf.PdfPage page = s_document.AddPage();
            page.Size = PdfSharp.PageSize.A372;

            RenderTargetBitmap bitmap = new RenderTargetBitmap((int)(1114 / 72 * dpi), (int)(1584 / 72 * dpi), dpi, dpi, PixelFormats.Pbgra32);//PixelFormats.Pbgra32/ 72 *300
            bitmap.Render(Can);
            BitmapEncoder encoder = new BmpBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(bitmap));


            BitmapImage bmp = new BitmapImage() { CacheOption = BitmapCacheOption.OnLoad };
            System.IO.MemoryStream outStream = new System.IO.MemoryStream();
            encoder.Save(outStream);
            outStream.Seek(0, System.IO.SeekOrigin.Begin);
            bmp.BeginInit();
            bmp.StreamSource = outStream;
            bmp.EndInit();



            XImage image = XImage.FromBitmapSource(bmp);

            XGraphics gfx = XGraphics.FromPdfPage(page);

            gfx.DrawImage(image, 0, 0, 1088, 1584);
            gfx.Dispose();
            image.Dispose();
            outStream.Close();

            //ct.Close();
            s_document.Save(sPfadTemp + "Klemme" + Nr.ToString() + ".pdf");

0 个答案:

没有答案