是否可以将wpf控件打印为PDF而不是图像?

时间:2018-09-05 09:06:16

标签: c# wpf

要将文档打印为PDF,首先从视图中创建图像,然后将该图像添加到固定页面。代码如下:

    Size myPageSize = new Size(myView.Width, myView.Height);

    FixedDocument myDocument = new FixedDocument();
    myDocument.DocumentPaginator.PageSize = miTamañoPagina;

    myView.Measure(myPageSize);
    myView.Arrange(new Rect(myPageSize));
    myView.UpdateLayout();

System.Windows.Media.Imaging.RenderTargetBitmap bitmap = new System.Windows.Media.Imaging
    .RenderTargetBitmap(794, 1122, 96, 96, System.Windows.Media.PixelFormats.Pbgra32);
    bitmap.Render(myView);

System.Windows.Controls.Image myImage = new System.Windows.Controls.Image();
myImage.Source = bitmap;

    FixedPage miPage = new FixedPage();
    miPage.Width = myDocument.DocumentPaginator.PageSize.Width;
    miPage.Height = myDocument.DocumentPaginator.PageSize.Height;
    miPage.Children.Add(myImage);

    PageContent myContent = new PageContent();
    ((IAddChild)myContent).AddChild(miPage);
    myDocument.Pages.Add(myContent);

    System.Windows.Controls.PrintDialog myDialog = new System.Windows.Controls.PrintDialog();
    if (myDialog.ShowDialog() == true)
    {
        myDialog.PrintDocument(myDocument.DocumentPaginator, string.Empty);
    }

当我创建PDF时,它就像一个图像,并且无法选择文本,因此我想知道是否有任何方法可以在不将其转换为图像的情况下打印视图。

实际上我正在使用.net 4.7.2和Windows10。我知道在Windows 7和Windows 8.1与Windows 10之间,关于grpahics的行为有所不同。

谢谢。

编辑:我注意到我可以使用PrintVisual来打印视图,问题是我也需要打印背景,因此,如果我将此代码添加到我的axml中,则不会打印,但是如果删除此代码它打印的代码。

<UserControl.Background>
        <ImageBrush AlignmentX="Center" AlignmentY="Center" Stretch="Uniform" Opacity="0.25" ImageSource="{Binding Source={x:Static vg:VariablesGlobales.Logo}}">
            <ImageBrush.RelativeTransform>
                <ScaleTransform ScaleX="0.75" ScaleY="0.75" CenterX=".5" CenterY="0.5" />
            </ImageBrush.RelativeTransform>
        </ImageBrush>
    </UserControl.Background>

打印时,我可以选择文本。

所以也许我应该再问一个问题,问如何用背景图像打印视觉图像。

0 个答案:

没有答案