打印时图像不可见

时间:2015-04-16 18:06:03

标签: c# printing windows-8.1

我需要在我的Win 8.1应用程序中实现打印,关键要求是能够在>选择打印机并单击打印按钮后生成页面。这是围绕图像的安全要求驱动的,是不可协商的。最终,我必须下载打印所需的图像。

目前我的测试是使用项目本地的图像:

string testImageLocalSource = "ms-appx:///Assets/testImage.png";

在我的测试项目中,我正在PrintDocument.AddPages事件处理程序中生成打印页面,如下所示(为了简洁而删除了布局/边距代码):

    private void PrintDocument_AddPages(object sender, AddPagesEventArgs e)
    {
        var printPageDescription = e.PrintTaskOptions.GetPageDescription(0);
        FrameworkElement printPage;

        printPage = new MainPrintPage();

        // get the printable content
        Grid printableArea = (Grid)printPage.FindName("printableArea");

        Run myRun1 = new Run();
        myRun1.Text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
        myRun1.FontStyle = Windows.UI.Text.FontStyle.Oblique;
        myRun1.Foreground = new SolidColorBrush(Windows.UI.Colors.Purple);
        myRun1.FontSize = 42;

        Image i = new Image();
        i.Source = new BitmapImage(new Uri(testImageLocalSource, UriKind.Absolute));
        i.Height = 200;

        InlineUIContainer container = new InlineUIContainer();
        container.Child = i;

        // Create a paragraph and add the content.
        Paragraph myParagraph = new Paragraph();
        myParagraph.Inlines.Add(container);
        myParagraph.Inlines.Add(myRun1);

        // add paragraph to RichTextBlock blocks
        var mainRTB = printPage.FindName("mainrtb");
        ((RichTextBlock)mainRTB).Blocks.Add(myParagraph);

        // add page to hidden canvas
        printingRoot.Children.Add(printPage);
        printingRoot.InvalidateMeasure();
        printingRoot.UpdateLayout();

        printDocument.AddPage(printPage);

        PrintDocument printDoc = (PrintDocument)sender;
        printDoc.AddPagesComplete();

    }

文字显得很好,图像应该有额外的空间,但图像不会显示。

如果我在早期的事件处理程序中使用此代码,则图像会显示在打印件中,例如PrintDocument.Paginate

有没有人试图做类似的事情并找到解决方案,或者是否有人解释这里发生了什么以及如何解决它的想法?

更新
我试图将大部分代码移到PrintTask.Submitting事件中,这显示出了希望。如果有效的话,我会用一个例子来更新它。

2 个答案:

答案 0 :(得分:0)

您是否忘记设置图像的宽度?

i.Width = 200;

答案 1 :(得分:0)

Not exactly sure what was causing this in Win 8.1, but it seems to be fixed in Windows 10.