Xaml Grid元素为PDF

时间:2014-01-04 08:24:14

标签: wpf pdf

我需要从wpf C#应用程序创建一个pdf文件。我需要将样式应用于与XAML完全相同的pdf。我不能只复制xaml页面,因为在创建pdf时数据可能不同。当用户单击导出按钮时,我将不得不进行数据处理。 pdf将包含文本,图像和背景图像。我想有一个html文件来设计pdf,然后传递数据。但我不知道该怎么办。任何建议或示例都会有很大的帮助。

1 个答案:

答案 0 :(得分:0)

是的,导出到XPS然后通过使用像NiXPS这样的转换器转换为PDF。

这是一个例子:

    private void SaveVisuals(XpsDocumentWriter xpsdw, List<Visual> vc)
{
    // Setup for writing multiple visuals
    VisualsToXpsDocument vToXpsD = (VisualsToXpsDocument)xpsdw.CreateVisualsCollator();

    // Iterate through all visuals in the collection 
    foreach (Visual v in vc)
    {
        vToXpsD.Write(v);   //Write each visual to single page
    }

    // End writing multiple visuals
    vToXpsD.EndBatchWrite();
}

更多相关信息:On MSDN

另一种方法可能是首先将文档渲染成图像,然后您可以轻松地将图像转换为PDF文件(当然这有一些缺点,但这是一种快速的方法)。

如果要将HTML转换为PDF,您可以使用wkhtmltopdf,但有许多不同的工具。

在这里您可以找到.NET实现:Pdf API and HTML to PDF Converter for .NET

如果要将Visuals渲染为图像,可以使用RenderTargetBitmap将任何WPF Visual对象渲染为位图。

来自MSDN的示例:

        DrawingVisual drawingVisual = new DrawingVisual();
        DrawingContext drawingContext = drawingVisual.RenderOpen();
        drawingContext.DrawText(text, new Point(2, 2));
        drawingContext.Close();

        RenderTargetBitmap bmp = new RenderTargetBitmap(180, 180, 120, 96, PixelFormats.Pbgra32);
        bmp.Render(drawingVisual);
        myImage.Source = bmp;

您可以通过这种方式呈现任何视觉效果。您不必显示它,但您可以。 如果你想保持UI的响应能力,你应该在一个单独的线程中执行这个导出操作,而不是事件处理线程。