public Task PrintCanvasAsync(Canvas canvas, CancellationToken token = default(CancellationToken)) { System.Windows.Controls.PrintDialog printDialog = new System.Windows.Controls.PrintDialog(); System.Drawing.Printing.PrinterSettings printer = new System.Drawing.Printing.PrinterSettings(); System.Printing.LocalPrintServer localPrintServer = new System.Printing.LocalPrintServer(); System.Printing.PrintTicket pt = new System.Printing.PrintTicket(); System.Printing.PrintQueue pq = new System.Printing.PrintQueue(localPrintServer, printer.PrinterName, System.Printing.PrintSystemDesiredAccess.UsePrinter); System.Printing.PageMediaSize PMS = new System.Printing.PageMediaSize(canvas.ActualWidth + 20, canvas.ActualHeight + 20); System.Windows.Size pageSize = new System.Windows.Size(canvas.ActualWidth + 20, canvas.ActualHeight + 20); canvas.Arrange(new Rect(0, 0, pageSize.Width, pageSize.Height)); canvas.Measure(pageSize); pt.PageMediaSize = PMS; pt.PageMediaType = System.Printing.PageMediaType.Unknown; pq.DefaultPrintTicket.PageMediaSize = PMS; pq.DefaultPrintTicket.PageMediaType = System.Printing.PageMediaType.Unknown; printDialog.PrintQueue = pq; printDialog.PrintTicket = pt; //printDialog.PrintQueue.Commit(); if (printDialog.ShowDialog() == true) { printDialog.PrintVisual(canvas, "Состояние холста"); } return(Task.FromResult(0)); //Task.CompletedTask; }
private void FileCmdExecuted(object sender, ExecutedRoutedEventArgs e) { RoutedCommand rc = e.Command as RoutedCommand; if (rc == null) { return; } switch (rc.Name) { case "Open": OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = AtalaDemos.HelperMethods.CreateDialogFilter(true); if (dlg.ShowDialog().Value) { this.AnnotationViewer.Open(dlg.FileName, 0, null); } break; case "SaveAs": SaveFileDialog save = new SaveFileDialog(); save.Filter = "JPEG (*.jpg)|*.jpg|TIFF (*.tif)|*.tif|PDF (*.pdf)|*.pdf"; if (save.ShowDialog().Value) { if (save.FilterIndex == 1) { SaveImage(save.FileName, new Atalasoft.Imaging.Codec.JpegEncoder()); } else if (save.FilterIndex == 2) { SaveImage(save.FileName, new Atalasoft.Imaging.Codec.TiffEncoder()); } else { if (Atalasoft.Imaging.AtalaImage.Edition == Atalasoft.Imaging.LicenseEdition.Document) { SaveImage(save.FileName, new Atalasoft.Imaging.Codec.Pdf.PdfEncoder()); SavePdfAnnotations(save.FileName); } else { MessageBox.Show("A 'DotImage Document Imaging' license is required to save as PDF.", "License Required", MessageBoxButton.OK, MessageBoxImage.Information); } } } break; case "Print": PrintDialog pdlg = new PrintDialog(); if (pdlg.ShowDialog().Value) { System.Printing.PageMediaSize sz = pdlg.PrintTicket.PageMediaSize; pdlg.PrintVisual(this.AnnotationViewer.CreateVisual(new Size(sz.Width.HasValue ? sz.Width.Value : 0, sz.Height.HasValue ? sz.Height.Value : 0), _printScaleMode, new Thickness(10)), "WPF Annotation Printing"); } break; } }
/// <summary> /// Печать. /// </summary> /// <param name="canvas"></param> /// <param name="description"></param> public void Print(Canvas canvas, string description) { if (canvas == null) { MessageBox.Show("Не заполнена область печати!"); return; } if (canvas.Width < 100 || canvas.Height < 100) { MessageBox.Show("Область печати имеет недопустимый размер!"); return; } //var children = canvas.Children.Cast<UIElement>().ToArray(); var canvasPrint = GetCanvasCopy(canvas); // Получить PrintTicket по умолчанию с принтера. var localPrintServer = new System.Printing.LocalPrintServer(); // Получение коллекции локального принтера на компьютере пользователя. var localPrinterCollection = localPrintServer.GetPrintQueues(); System.Collections.IEnumerator localPrinterEnumerator = localPrinterCollection.GetEnumerator(); if (localPrinterEnumerator.MoveNext()) { // Получить PrintQueue с первого доступного принтера. var printQueue = (System.Printing.PrintQueue)localPrinterEnumerator.Current; // Получить PrintTicket по умолчанию с принтера. if (printQueue != null) { var printTicket = printQueue.DefaultPrintTicket; var pageMediaSize = new System.Printing.PageMediaSize(canvasPrint.Width, canvasPrint.Height); printTicket.PageMediaSize = pageMediaSize; //printTicket.PageMediaType = System.Printing.PageMediaType.Unknown; //var printCapabilites = printQueue.GetPrintCapabilities(); // Modify PrintTicket //if (printCapabilites.CollationCapability.Contains(System.Printing.Collation.Collated)) // printTicket.Collation = System.Printing.Collation.Collated; //if (printCapabilites.DuplexingCapability.Contains(System.Printing.Duplexing.TwoSidedLongEdge)) // printTicket.Duplexing = System.Printing.Duplexing.TwoSidedLongEdge; //if (printCapabilites.StaplingCapability.Contains(System.Printing.Stapling.StapleDualLeft)) // printTicket.Stapling = System.Printing.Stapling.StapleDualLeft; var printDialog = new PrintDialog { //PrintQueue = printQueue, PrintTicket = printTicket, }; printDialog.PrintQueue.Commit(); if (printDialog.ShowDialog() == true) { printDialog.PrintVisual(canvasPrint, description); } } } }
/// <summary> /// Print the controls list /// </summary> /// <param name="controls">Visuals to Print</param> /// <param name="paperSize">The Size of the Paper</param> /// <param name="printJobName">Job Description</param> /// <remarks>Waring!: Only print paper size of "A4"</remarks> /// public static void Print(UserControl[] controls, PaperSize paperSize = PaperSize.A4, string printJobName = "A Imprimir Trabalhos Meio Mundo") { PrintDialog printDialog = new PrintDialog(); Paper paper = new Paper(paperSize); System.Printing.PageMediaSize a4 = new System.Printing.PageMediaSize(System.Printing.PageMediaSizeName.ISOA4); printDialog.PrintTicket.PageMediaSize = a4; if (printDialog.ShowDialog() == true) { var document = new FixedDocument(); document.DocumentPaginator.PageSize = new Size( (double)new LengthConverter().ConvertFromString("21cm"), (double)new LengthConverter().ConvertFromString("29,7cm") ); for (int pages = 0; pages < controls.Length; pages++) { Size pageSize = new Size(controls[pages].Width, controls[pages].Height); FixedPage fixedPage = new FixedPage(); fixedPage.Width = pageSize.Width; fixedPage.Height = pageSize.Height; fixedPage.Children.Add((UIElement)controls[pages]); fixedPage.Measure(pageSize); fixedPage.Arrange(new Rect(new Point(), pageSize)); fixedPage.UpdateLayout(); // Add page to document var pageContent = new PageContent(); ((IAddChild)pageContent).AddChild(fixedPage); document.Pages.Add(pageContent); } printDialog.PrintDocument(document.DocumentPaginator, printJobName); } }
public static void PrintModelos(Modelos modelo, PagEncomendasEscolares[] pags) { PrintDialog printDialog = new PrintDialog(); System.Printing.PageMediaSize a4 = new System.Printing.PageMediaSize(System.Printing.PageMediaSizeName.ISOA4); printDialog.PrintTicket.PageMediaSize = a4; if (printDialog.ShowDialog() == true) { var document = new FixedDocument(); document.DocumentPaginator.PageSize = new Size( (double)new LengthConverter().ConvertFromString("21cm"), (double)new LengthConverter().ConvertFromString("29,7cm") ); for (int i = 0; i < pags.Length; i++) { for (int copies = 0; copies < pags[i].Copies; copies++) { // Add visual, measure/arrange page. UserControl control = GetModelo(modelo, pags[i].Escola.Nome, pags[i].SelectAno); Size pageSize = new Size(control.Width, control.Height); FixedPage fixedPage = new FixedPage(); fixedPage.Width = pageSize.Width; fixedPage.Height = pageSize.Height; fixedPage.Children.Add((UIElement)control); fixedPage.Measure(pageSize); fixedPage.Arrange(new Rect(new Point(), pageSize)); fixedPage.UpdateLayout(); // Add page to document var pageContent = new PageContent(); ((IAddChild)pageContent).AddChild(fixedPage); document.Pages.Add(pageContent); } } printDialog.PrintDocument(document.DocumentPaginator, "Mod.2021 - Encomendas Escolares"); } }