在 C# XAML 应用程序中进行简单打印?

Posted

技术标签:

【中文标题】在 C# XAML 应用程序中进行简单打印?【英文标题】:Simple Printing in c# XAML App? 【发布时间】:2015-10-03 02:42:13 【问题描述】:

所以我需要从 Windows 8 应用程序 (c# Xaml) 打印标签,并且我发现的所有示例都过于复杂,无法满足我的需求。 我的内容是一个单独的页面,包含一个文本块和一个图像,它们在页面加载时被填充,我需要做的就是打印该页面。是否有用于单个简单页面的简化打印方法(即不使用 RichTextBox 和溢出等)。对于感兴趣的,这是我需要打印的页面:

<Page
x:Class="Storeageapp.OutputforLabel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Storeageapp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Width="300" Height="200">
<Grid x:Name="printableArea">

    <Grid.RowDefinitions>

        <RowDefinition Height="3*"/>
        <RowDefinition Height="3*"/>

    </Grid.RowDefinitions>


    <StackPanel x:Name="header" Grid.Row="0" Grid.ColumnSpan="2" Height="60"  Visibility="Collapsed">

    </StackPanel>

    <TextBlock x:Name="UID" Text="Hello World" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24" />

    <Image Source="" x:Name="scenarioImage"  HorizontalAlignment="Center" Grid.Row="1" Grid.Column="0" Margin="10"/>

    <StackPanel x:Name="footer"  Grid.Row="4" Grid.Column="0" VerticalAlignment="Top" Visibility="Collapsed">

    </StackPanel>
</Grid>
</Page>

如果有某种方法可以将其打印为图像,我会很高兴,但我无法弄清楚。 谢谢。 编辑:抱歉,这是在 Windows 商店应用程序中,而不是 WPF。

【问题讨论】:

【参考方案1】:

您可以使用PrintDialog Class 在 WPF 中执行基本打印。从链接页面中的示例:

private void InvokePrint(object sender, RoutedEventArgs e)

    // Create the print dialog object and set options
    PrintDialog pDialog = new PrintDialog();
    pDialog.PageRangeSelection = PageRangeSelection.AllPages;
    pDialog.UserPageRangeEnabled = true;

    // Display the dialog. This returns true if the user presses the Print button.
    Nullable<Boolean> print = pDialog.ShowDialog();
    if (print == true)
    
        XpsDocument xpsDocument = new XpsDocument("C:\\FixedDocumentSequence.xps", FileAccess.ReadWrite);
        FixedDocumentSequence fixedDocSeq = xpsDocument.GetFixedDocumentSequence();
        pDialog.PrintDocument(fixedDocSeq.DocumentPaginator, "Test print job");
    

但是,可以使用更少的代码进行打印:

PrintDialog printDialog = new PrintDialog();
document.ColumnWidth = printDialog.PrintableAreaWidth;
if (printDialog.ShowDialog() == true) printDialog.PrintDocument(
    ((IDocumentPaginatorSource)document).DocumentPaginator, "Flow Document Print Job");

【讨论】:

抱歉含糊不清,我使用的是 Windows 应用商店应用程序,而不是 WPF。 @Sheridan。很好的例子-谢谢你的分享。它在我的 WPF 项目中帮助了我很多。 +1

以上是关于在 C# XAML 应用程序中进行简单打印?的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 和 XAML 为 Windows 8.1 创建 facebook 应用程序时出现异常

XAML 中的命名空间错误中不存在该名称

在 Windows Phone 8 Bing 地图上设置图钉 (XAML C#)

如何从我的 Windows Phone 8 应用程序(XAML 和 C#)访问相机并将拍摄的照片保存在确定的文件夹中?

可视化程序设计基础——XAML控件

c# wpf代码怎么嵌入EXE应用程序?