WPF 打印圖片


效果如圖

打印結果

private string outputDic { get { return $"{AppDomain.CurrentDomain.BaseDirectory}\\Temp\\"; } }

private void PrintImage(object sender, RoutedEventArgs e)
{
	//將控件imageBorder的畫面輸出圖片
	var outputPath = GetPicFromControl(imageBorder as FrameworkElement);
	//打印
	Print(outputPath);
	//刪除圖片
	File.Delete(outputPath);
}

private string GetPicFromControl(FrameworkElement element)
{
	//96為顯示器DPI
	double dpiX = 96;
	double dpiY = 96;

	var bitmapRender = new RenderTargetBitmap((int)element.ActualWidth, (int)element.ActualHeight, dpiX, dpiY, PixelFormats.Pbgra32);//位圖 寬度  高度   水平DPI  垂直DPI  位圖的格式    高度+100保證整個圖都能截取
	//控件內容渲染RenderTargetBitmap
	bitmapRender.Render(element);
	BitmapEncoder encoder = new JpegBitmapEncoder();
	var outputPath = $"{outputDic}\\{Guid.NewGuid().ToString()}.jpg";
	//對於一般的圖片,只有一幀,動態圖片是有多幀的。
	encoder.Frames.Add(BitmapFrame.Create(bitmapRender));//添加圖
	if (!Directory.Exists(System.IO.Path.GetDirectoryName(outputPath)))
		Directory.CreateDirectory(System.IO.Path.GetDirectoryName(outputPath));
	using (var file = File.Create(outputPath))//存儲文件
		encoder.Save(file);
	return outputPath;
}

private void Print(string outputPath)
{
	try
	{
		this.Cursor = Cursors.Wait;
		var bi = new BitmapImage();
		bi.BeginInit();
		bi.CacheOption = BitmapCacheOption.OnLoad;
		//加載圖片
		bi.UriSource = new Uri(outputPath);
		bi.EndInit();

		var vis = new DrawingVisual();
		using (var dc = vis.RenderOpen())
		{
			dc.DrawImage(bi, new Rect { Width = bi.Width, Height = bi.Height });
		}

		var pdialog = new PrintDialog();
		if (pdialog.ShowDialog() == true)
		{
			pdialog.PrintVisual(vis, "My Image");
		}
	}
	finally
	{
		this.Cursor = Cursors.AppStarting;
	}
}

打印表單,參考用WPF實現打印及打印預覽

打印圖片的思路是將控件的畫面保存為圖片->打印圖片
打印表單的思路是xaml模板+數據->打印表單

示例代碼

PrintImage
打印表單的代碼PrintTable

參考資料

Load image from file and print it using WPF… how?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM