internal static void PrintFlowDocument(PrintQueue pq, FlowDocument flowDocument) { if (pq == null) { throw new InvalidOperationException("Invalid Printer"); } // Create a XpsDocumentWriter object, open a Windows common print dialog. // This methods returns a ref parameter that represents information about the dimensions of the printer media. XpsDocumentWriter docWriter = PrintQueue.CreateXpsDocumentWriter(pq); PageImageableArea ia = pq.GetPrintCapabilities().PageImageableArea; PrintTicket pt = pq.UserPrintTicket; if (ia != null) { DocumentPaginator paginator = ((IDocumentPaginatorSource)flowDocument).DocumentPaginator; // Change the PageSize and PagePadding for the document to match the CanvasSize for the printer device. paginator.PageSize = new Size((double)pt.PageMediaSize.Width, (double)pt.PageMediaSize.Height); Thickness pagePadding = flowDocument.PagePadding; flowDocument.PagePadding = new Thickness( Math.Max(ia.OriginWidth, pagePadding.Left), Math.Max(ia.OriginHeight, pagePadding.Top), Math.Max((double)pt.PageMediaSize.Width - (ia.OriginWidth + ia.ExtentWidth), pagePadding.Right), Math.Max((double)pt.PageMediaSize.Height - (ia.OriginHeight + ia.ExtentHeight), pagePadding.Bottom)); flowDocument.ColumnWidth = double.PositiveInfinity; flowDocument.FontFamily = new System.Windows.Media.FontFamily(LocalSettings.PrintFontFamily); // Send DocumentPaginator to the printer. docWriter.Write(paginator); } }
/// <summary> /// コンストラクタ /// 出来高を取得、印刷関連オブジェクトの設定をする /// </summary> /// <param name="Dekidaka">出来高データ</param> public PrintingTelop(Dekidaka_Data orgDekidaka) { Dekidaka = orgDekidaka; //出来高データの保持 //プリンタの印刷範囲を取得する為に関連オブジェクトを作成する pq = null; Pt = null; //Settings.PrintDlg = new PrintDialog(); //ローカルプリントサーバーから設定内容のプリンタキューと印刷設定チケットを取得する IsPrintSetting = GetPrinterSetting(ps, ref pq, ref Pt); //印刷可能範囲を計算して保持する PageImageableArea Pa = pq.GetPrintCapabilities().PageImageableArea; //double PageWidtha = Pa.OriginWidth + Pa.ExtentWidth; //double PageHeighta = Pa.OriginHeight + Pa.ExtentHeight; PageWidth = (double)Pt.PageMediaSize.Width - Pa.OriginWidth; PageHeight = (double)Pt.PageMediaSize.Height - Pa.OriginHeight; //MessageBox.Show("1 Width:" + PageWidth.ToString() + " Height:" + PageHeight.ToString() + // "\n2 Width:" + PageWidtha.ToString() + " Height:" + PageHeighta.ToString() + // "\nO Width:" + Pa.OriginWidth.ToString() + " Height:" + Pa.OriginHeight.ToString() + // "\nE Width:" + Pa.ExtentWidth.ToString() + " Height:" + Pa.ExtentHeight.ToString() + // "\nP Width:" + Pt.PageMediaSize.Width.ToString() + " Height:" + Pt.PageMediaSize.Height.ToString()); }
private static Rect GetImageableRect(PrintDialog dialog) { Rect empty = Rect.Empty; Invariant.Assert(dialog != null, "Dialog should not be null."); PrintCapabilities printCapabilities = null; CodeAccessPermission codeAccessPermission = SystemDrawingHelper.NewDefaultPrintingPermission(); codeAccessPermission.Assert(); try { PrintQueue printQueue = dialog.PrintQueue; if (printQueue != null) { printCapabilities = printQueue.GetPrintCapabilities(); } } finally { CodeAccessPermission.RevertAssert(); } if (printCapabilities != null) { PageImageableArea pageImageableArea = printCapabilities.PageImageableArea; if (pageImageableArea != null) { empty = new Rect(pageImageableArea.OriginWidth, pageImageableArea.OriginHeight, pageImageableArea.ExtentWidth, pageImageableArea.ExtentHeight); } } if (empty == Rect.Empty) { empty = new Rect(15.0, 15.0, dialog.PrintableAreaWidth, dialog.PrintableAreaHeight); } return(empty); }
/// <summary> /// Set pate margins with minimal /// </summary> public void SetMinimalPageMargins() { PageImageableArea pia = TicketCapabilities.PageImageableArea; // Set minimal page margins to bypass the unprinted area. PageMargins = new Thickness(pia.OriginWidth, pia.OriginHeight, (double)TicketCapabilities.OrientedPageMediaWidth - -pia.OriginWidth - pia.ExtentWidth, (double)TicketCapabilities.OrientedPageMediaHeight - pia.OriginHeight - pia.ExtentHeight); }
/// <summary> /// Set page margins and return true. /// <para/> /// If new page margins are too small (unprinted area) then set minimum and return false. /// </summary> public bool SetPageMargins(Thickness margins) { PageImageableArea pia = TicketCapabilities.PageImageableArea; PageMargins = new Thickness(Math.Max(margins.Left, pia.OriginWidth), Math.Max(margins.Top, pia.OriginHeight), Math.Max(margins.Right, PageSize.Width - pia.OriginWidth - pia.ExtentWidth), Math.Max(margins.Bottom, PageSize.Height - pia.OriginHeight - pia.ExtentHeight)); return(PageMargins == margins); }
void preparePrintDialog() { // Set page orientation (and size) to landscape printDialog.PrintTicket.PageOrientation = PageOrientation.Landscape; double width = (double)printDialog.PrintTicket.PageMediaSize.Width; double height = (double)printDialog.PrintTicket.PageMediaSize.Height; double mediaWidth = Math.Max(width, height); double mediaHeight = Math.Min(width, height); PageMediaSizeName mediaSizeName = (PageMediaSizeName)printDialog.PrintTicket.PageMediaSize.PageMediaSizeName; printDialog.PrintTicket.PageMediaSize = new PageMediaSize(mediaSizeName, mediaWidth, mediaHeight); // Get printable area PrintCapabilities printCapabilities = printDialog.PrintQueue.GetPrintCapabilities(printDialog.PrintTicket); PageImageableArea pageImageableArea = printCapabilities.PageImageableArea; printWidth = pageImageableArea.ExtentWidth; printHeight = pageImageableArea.ExtentHeight; printPosX = pageImageableArea.OriginWidth; printPosY = pageImageableArea.OriginHeight; printDpiX = (double)printDialog.PrintTicket.PageResolution.X; printDpiY = (double)printDialog.PrintTicket.PageResolution.Y; }