接上一篇生成二维码,这篇就是里面的图片预览并且打印
<Window x:Class="程序名.PrintPreviewWin"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
BorderThickness="0" AllowsTransparency="True" ResizeMode="CanResize" Background="Transparent"
BorderBrush="Transparent" WindowStartupLocation="CenterScreen" WindowStyle="None"
FontSize="28" Height="800" Width="600">
<Border Background="#FFFFFFFF" CornerRadius="6" Margin="5">
<Border.Effect>
<DropShadowEffect Opacity="1" Direction="0" BlurRadius="10" ShadowDepth="0"/>
</Border.Effect>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="38"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Border Background="#f0f0f0" />
<Button Margin="10 0 0 0" Width="80" Height="48" HorizontalAlignment="Left"
Style="{StaticResource BlueButton}" Content="打印" FontSize="12"
Command="{Binding PrintCommand}" CommandParameter="{Binding ElementName=border}"/>
<Image Source="/Images/Login/Close.png" Stretch="None" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,0,10,0">
<i:Interaction.Triggers>
<i:EventTrigger EventName="PreviewMouseUp">
<i:InvokeCommandAction Command="{Binding CloseCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=Window}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Image>
<Viewbox Stretch="Uniform" Grid.Row="1">
<Border Background="#a0a0a0">
<!-- 该Border设置成固定A4纸大小 -->
<Border Background="#fff" Margin="10" Width="793" Height="1123">
<!-- 该Border可缩放至打印纸 -->
<Border x:Name="border" >
<Grid x:Name="IMG">
<Grid.Resources>
<TransformGroup x:Key="Imageview">
<ScaleTransform/>
<TranslateTransform/>
</TransformGroup>
</Grid.Resources>
<ContentControl MouseLeftButtonDown="IMG1_MouseLeftButtonDown"
MouseLeftButtonUp="IMG1_MouseLeftButtonUp"
MouseMove="IMG1_MouseMove"
MouseWheel="IMG1_MouseWheel" >
<Image Stretch="Uniform" Height="457" Width="457" Source="{Binding QrCodeImage}"
HorizontalAlignment="Center" VerticalAlignment="Top" RenderTransform="{StaticResource Imageview}"
RenderOptions.BitmapScalingMode="NearestNeighbor"/>
</ContentControl>
</Grid>
</Border>
</Border>
</Border>
</Viewbox>
</Grid>
</Border>
</Window>
PrintPreviewWin.xmal.cs
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace 程序名
{
/// <summary>
/// PrintPreviewWin.xaml 的交互逻辑
/// </summary>
public partial class PrintPreviewWin : Window
{
PrintPreviewViewModel Vm { get; set; }
public PrintPreviewWin()
{
InitializeComponent();
this.DataContext = Vm = new PrintPreviewViewModel();
}
public PrintPreviewWin(BitmapImage ele):this()
{
this.DataContext = Vm = new PrintPreviewViewModel(ele);
}
private bool mouseDown;
private System.Windows.Point mouseXY;
private void IMG1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var img = sender as ContentControl;
if (img == null)
{
return;
}
img.CaptureMouse();
mouseDown = true;
mouseXY = e.GetPosition(img);
}
private void IMG1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
var img = sender as ContentControl;
if (img == null)
{
return;
}
img.ReleaseMouseCapture();
mouseDown = false;
}
private void IMG1_MouseMove(object sender, MouseEventArgs e)
{
var img = sender as ContentControl;
if (img == null)
{
return;
}
if (mouseDown)
{
Domousemove(img, e);
}
}
private void IMG1_MouseWheel(object sender, MouseWheelEventArgs e)
{
var img = sender as ContentControl;
if (img == null)
{
return;
}
var point = e.GetPosition(border);
var group = IMG.FindResource("Imageview") as TransformGroup;
var delta = e.Delta * 0.001;
DowheelZoom(group, point, delta);
}
private void Domousemove(ContentControl img, MouseEventArgs e)
{
if (e.LeftButton != MouseButtonState.Pressed)
{
return;
}
var group = IMG.FindResource("Imageview") as TransformGroup;
var transform = group.Children[1] as TranslateTransform;
var position = e.GetPosition(img);
transform.X -= mouseXY.X - position.X;
transform.Y -= mouseXY.Y - position.Y;
mouseXY = position;
}
private void DowheelZoom(TransformGroup group,System.Windows.Point point, double delta)
{
var pointToContent = group.Inverse.Transform(point);
var transform = group.Children[0] as ScaleTransform;
if (transform.ScaleX + delta < 0.1) return;
transform.ScaleX += delta;
transform.ScaleY += delta;
var transform1 = group.Children[1] as TranslateTransform;
transform1.X = -1 * ((pointToContent.X * transform.ScaleX) - point.X);
transform1.Y = -1 * ((pointToContent.Y * transform.ScaleY) - point.Y);
}
}
}
PrintPreviewViewModel .cs
using System;
using System.Drawing.Printing;
using System.IO;
using System.Printing;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using iTextSharp.text.html.simpleparser;
namespace 程序名
{
internal partial class PrintPreviewViewModel : ObservableObject
{
public PrintPreviewViewModel() { }
public PrintPreviewViewModel(BitmapImage ele) : this()
{
QrCodeImage = ele;
}
/// <summary>
/// 需要打印预览的控件
/// </summary>
[ObservableProperty]
private FrameworkElement _Element;
[ObservableProperty]
BitmapImage _QrCodeImage;
[RelayCommand]
void Print(Border border)
{
try
{
PrintDialog printDialog = new PrintDialog();
if (printDialog.ShowDialog() == true)
{
printDialog.PrintTicket.PageOrientation = PageOrientation.Portrait;
var pageSize = new Size(8.5 * 96, 11.7 * 96); // A4 纸张大小,单位是设备无关单位 (1 inch = 96 pixels)
var printTicket = printDialog.PrintTicket;
// 设置纸张大小为A4
printTicket.PageMediaSize = new PageMediaSize(PageMediaSizeName.ISOA4);
// 设置打印方向为纵向
printTicket.PageOrientation = PageOrientation.Portrait;
// 应用打印票据和打印票据
printDialog.PrintTicket = printTicket;
printDialog.PrintVisual(border, "打印二维码");
}
}
catch (Exception)
{
throw;
}
}
[RelayCommand]
void Close(PrintPreviewWin win)
{
win?.Close();
}
}
}
380



被折叠的 条评论
为什么被折叠?



