/// <summary> /// 设置打印格式 /// </summary> /// <param name="printDialog">打印文档</param> /// <param name="pageSize">打印纸张大小 a4</param> /// <param name="pageOrientation">打印方向 竖向</param> public void SetPrintProperty(PrintDialog printDialog, PageMediaSizeName pageSize = PageMediaSizeName.ISOA4, PageOrientation pageOrientation = PageOrientation.Portrait) { var printTicket = printDialog.PrintTicket; printTicket.PageMediaSize = new PageMediaSize(pageSize); //A4纸 printTicket.PageOrientation = pageOrientation; //默认竖向打印 }
/// <summary> /// Sets page media size setting to a standard fixed media size name. /// </summary> /// <param name="value">the standard fixed media size name</param> /// <exception cref="ArgumentOutOfRangeException"> /// "value" is not one of the standard <see cref="PageMediaSizeName"/>. /// </exception> /// <remarks> /// This function will also automatically set page media size setting to /// fixed width and height physical media dimensions defined by Print Schema for /// the standard fixed media size name. /// </remarks> public void SetFixedMediaSize(PageMediaSizeName value) { InternalSetFixedMediaSize(value, true, 0, 0, false); // automatically set the dimension for the standard media sizes for (int i = 0; i < PrintSchema.StdMediaSizeTable.Length; i++) { if (PrintSchema.StdMediaSizeTable[i].SizeValue == value) { // Our internal table stores size width/height values in microns, so no need to // do unit conversion. if (PrintSchema.StdMediaSizeTable[i].SizeW != -1) { this[PrintSchemaTags.Keywords.PageMediaSizeKeys.MediaSizeWidth] = PrintSchema.StdMediaSizeTable[i].SizeW; } if (PrintSchema.StdMediaSizeTable[i].SizeH != -1) { this[PrintSchemaTags.Keywords.PageMediaSizeKeys.MediaSizeHeight] = PrintSchema.StdMediaSizeTable[i].SizeH; } break; } } }
/// <summary> /// 表示用の名称を取得する /// </summary> /// <param name="pageSize">this PageMediaSizeName</param> /// <returns>文字列</returns> public static string ToDisplayName(this PageMediaSizeName pageSize) { switch (pageSize) { case PageMediaSizeName.ISOA0: return("A0"); case PageMediaSizeName.ISOA1: return("A1"); case PageMediaSizeName.ISOA2: return("A2"); case PageMediaSizeName.ISOA3: return("A3"); case PageMediaSizeName.ISOA4: return("A4"); case PageMediaSizeName.ISOA5: return("A5"); case PageMediaSizeName.ISOA6: return("A6"); case PageMediaSizeName.ISOA7: return("A7"); case PageMediaSizeName.ISOA8: return("A8"); case PageMediaSizeName.ISOA9: return("A9"); case PageMediaSizeName.ISOA10: return("A10"); case PageMediaSizeName.JISB0: return("B0"); case PageMediaSizeName.JISB1: return("B1"); case PageMediaSizeName.JISB2: return("B2"); case PageMediaSizeName.JISB3: return("B3"); case PageMediaSizeName.JISB4: return("B4"); case PageMediaSizeName.JISB5: return("B5"); case PageMediaSizeName.JISB6: return("B6"); case PageMediaSizeName.JISB7: return("B7"); case PageMediaSizeName.JISB8: return("B8"); case PageMediaSizeName.JISB9: return("B9"); case PageMediaSizeName.JISB10: return("B10"); default: return(pageSize.ToString()); } }
/* Set up the print ticket */ private PrintTicket SetUpTicket(PrintQueue queue, Print printcontrol, FixedDocumentSequence fixdoc, bool tempfile) { PrintTicket Ticket = new PrintTicket(); PageMediaSizeName name = PaperKindToPageMediaSize(printcontrol.m_pagedetails.PaperSize.Kind); PageMediaSize mediasize = new PageMediaSize(name, printcontrol.m_pagedetails.PaperSize.Width, printcontrol.m_pagedetails.PaperSize.Height); /* Media size */ Ticket.PageMediaSize = mediasize; /* Scale to fit */ Ticket.PageScalingFactor = (int)Math.Round(printcontrol.m_page_scale * 100.0); System.Windows.Size page_size = new System.Windows.Size(mediasize.Width.Value, mediasize.Height.Value); DocumentPaginator paginator = fixdoc.DocumentPaginator; paginator.PageSize = page_size; /* Copy Count */ Ticket.CopyCount = printcontrol.m_numcopies; if (printcontrol.m_pagedetails.Landscape) { Ticket.PageOrientation = PageOrientation.Landscape; } else { Ticket.PageOrientation = PageOrientation.Portrait; } /* Orientation. If we had a tempfile, then gs did a conversion * and adjusted everything for us. Other wise we may need to * rotate the document if it was xps to start with. */ if (printcontrol.m_isrotated && !tempfile) { if (printcontrol.m_pagedetails.Landscape) { Ticket.PageOrientation = PageOrientation.Portrait; } else { Ticket.PageOrientation = PageOrientation.Landscape; } } System.Printing.ValidationResult result = queue.MergeAndValidatePrintTicket(queue.UserPrintTicket, Ticket); queue.UserPrintTicket = result.ValidatedPrintTicket; queue.Commit(); return(result.ValidatedPrintTicket); }
private void UpdatePageSizes(Printer printer) { List <PageSize> pageSizes = new List <PageSize>(); PageMediaSizeName?selectedName = ((PageSize)PageSizeCombo.SelectedItem)?.PageMediaSizeName; PageSize selectedPageSize = null; PageMediaSizeName defaultName = PageMediaSizeName.ISOA4; PageSize defaultPageSize = null; foreach (PageMediaSize pageMediaSize in printer.PageMediaSizeCapability) { PageSize pageSize = new PageSize(pageMediaSize); pageSizes.Add(pageSize); if (pageSize.PageMediaSizeName == selectedName) { selectedPageSize = pageSize; } if (pageSize.PageMediaSizeName == defaultName) { defaultPageSize = pageSize; } } pageSizes.Sort(); PageSizeCombo.ItemsSource = pageSizes; PageSizeCombo.SelectionChanged -= PageSizeCombo_SelectionChanged; PageSizeCombo.SelectionChanged += PageSizeCombo_SelectionChanged; if (selectedPageSize != null) { PageSizeCombo.SelectedItem = selectedPageSize; } else if (defaultPageSize != null) { PageSizeCombo.SelectedItem = defaultPageSize; } else { PageSizeCombo.SelectedIndex = 0; } }
/// <exception cref="ArgumentOutOfRangeException"> /// "value" is not one of the standard <see cref="PageMediaSizeName"/>. /// </exception> /// <exception cref="ArgumentOutOfRangeException"> /// Either "mediaSizeWidth" or "mediaSizeHeight" is not a positive dimension value. /// </exception> private void InternalSetFixedMediaSize(PageMediaSizeName value, bool bSetValue, double mediaSizeWidth, double mediaSizeHeight, bool bSetWH) { if (bSetValue) { if (value < PrintSchema.PageMediaSizeNameEnumMin || value > PrintSchema.PageMediaSizeNameEnumMax) { throw new ArgumentOutOfRangeException("value"); } } if (bSetWH) { if ((mediaSizeWidth <= 0) || (mediaSizeHeight <= 0)) { throw new ArgumentOutOfRangeException((mediaSizeWidth <= 0) ? "mediaSizeWidth" : "mediaSizeHeight", PTUtility.GetTextFromResource("ArgumentException.PositiveValue")); } } // Remove all XML content related to PageMediaSize feature ClearSetting(); if (bSetValue) { this[PrintSchemaTags.Framework.OptionNameProperty] = (int)value; } if (bSetWH) { this[PrintSchemaTags.Keywords.PageMediaSizeKeys.MediaSizeWidth] = UnitConverter.LengthValueFromDIPToMicron(mediaSizeWidth); this[PrintSchemaTags.Keywords.PageMediaSizeKeys.MediaSizeHeight] = UnitConverter.LengthValueFromDIPToMicron(mediaSizeHeight); } }
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; }
/// <summary> /// Sets page media size setting to a standard fixed media size name and /// to fixed width and height physical media dimensions. /// </summary> /// <param name="value">the standard fixed media size name</param> /// <param name="mediaSizeWidth">physical media dimension in the width direction, in 1/96 inch unit</param> /// <param name="mediaSizeHeight">physical media dimension in the height direction, in 1/96 inch unit</param> /// <exception cref="ArgumentOutOfRangeException"> /// "value" is not one of the standard <see cref="PageMediaSizeName"/>. /// </exception> /// <exception cref="ArgumentOutOfRangeException"> /// Either "mediaSizeWidth" or "mediaSizeHeight" is not a positive dimension value. /// </exception> public void SetFixedMediaSize(PageMediaSizeName value, double mediaSizeWidth, double mediaSizeHeight) { InternalSetFixedMediaSize(value, true, mediaSizeWidth, mediaSizeHeight, true); }
bool TryGetPaperSize(PageMediaSizeName pageMediaSizeName, out short value) { bool result = false; value = unchecked ((short)0xFFFFFFFF); switch (pageMediaSizeName) { case PageMediaSizeName.BusinessCard: break; case PageMediaSizeName.CreditCard: break; case PageMediaSizeName.ISOA0: break; case PageMediaSizeName.ISOA1: break; case PageMediaSizeName.ISOA10: break; case PageMediaSizeName.ISOA2: break; case PageMediaSizeName.ISOA3: { result = true; value = DevModePaperSizes.DMPAPER_A3; break; } case PageMediaSizeName.ISOA3Extra: break; case PageMediaSizeName.ISOA3Rotated: { result = true; value = DevModePaperSizes.DMPAPER_A3_ROTATED; break; } case PageMediaSizeName.ISOA4: { result = true; value = DevModePaperSizes.DMPAPER_A4; break; } case PageMediaSizeName.ISOA4Extra: break; case PageMediaSizeName.ISOA4Rotated: { result = true; value = DevModePaperSizes.DMPAPER_A4_ROTATED; break; } case PageMediaSizeName.ISOA5: { result = true; value = DevModePaperSizes.DMPAPER_A5; break; } case PageMediaSizeName.ISOA5Extra: break; case PageMediaSizeName.ISOA5Rotated: { result = true; value = DevModePaperSizes.DMPAPER_A5_ROTATED; break; } case PageMediaSizeName.ISOA6: { result = true; value = DevModePaperSizes.DMPAPER_A6; break; } case PageMediaSizeName.ISOA6Rotated: { result = true; value = DevModePaperSizes.DMPAPER_A6_ROTATED; break; } case PageMediaSizeName.ISOA7: break; case PageMediaSizeName.ISOA8: break; case PageMediaSizeName.ISOA9: break; case PageMediaSizeName.ISOB0: break; case PageMediaSizeName.ISOB1: break; case PageMediaSizeName.ISOB10: break; case PageMediaSizeName.ISOB2: break; case PageMediaSizeName.ISOB3: break; case PageMediaSizeName.ISOB4: { result = true; value = DevModePaperSizes.DMPAPER_B4; break; } // verify may be JISB4 case PageMediaSizeName.ISOB4Envelope: { result = true; value = DevModePaperSizes.DMPAPER_ENV_B4; break; } //verify may be JIS case PageMediaSizeName.ISOB5Envelope: { result = true; value = DevModePaperSizes.DMPAPER_ENV_B5; break; } //verify may be JIS case PageMediaSizeName.ISOB5Extra: break; case PageMediaSizeName.ISOB7: break; case PageMediaSizeName.ISOB8: break; case PageMediaSizeName.ISOB9: break; case PageMediaSizeName.ISOC0: break; case PageMediaSizeName.ISOC1: break; case PageMediaSizeName.ISOC10: break; case PageMediaSizeName.ISOC2: break; case PageMediaSizeName.ISOC3: break; case PageMediaSizeName.ISOC3Envelope: { result = true; value = DevModePaperSizes.DMPAPER_ENV_C3; break; } case PageMediaSizeName.ISOC4: break; case PageMediaSizeName.ISOC4Envelope: { result = true; value = DevModePaperSizes.DMPAPER_ENV_C4; break; } case PageMediaSizeName.ISOC5: break; case PageMediaSizeName.ISOC5Envelope: { result = true; value = DevModePaperSizes.DMPAPER_ENV_C5; break; } case PageMediaSizeName.ISOC6: break; case PageMediaSizeName.ISOC6C5Envelope: { result = true; value = DevModePaperSizes.DMPAPER_ENV_C65; break; } case PageMediaSizeName.ISOC6Envelope: { result = true; value = DevModePaperSizes.DMPAPER_ENV_C6; break; } case PageMediaSizeName.ISOC7: break; case PageMediaSizeName.ISOC8: break; case PageMediaSizeName.ISOC9: break; case PageMediaSizeName.ISODLEnvelope: break; case PageMediaSizeName.ISODLEnvelopeRotated: break; case PageMediaSizeName.ISOSRA3: break; case PageMediaSizeName.Japan2LPhoto: break; case PageMediaSizeName.JapanChou3Envelope: { result = true; value = DevModePaperSizes.DMPAPER_JENV_CHOU3; break; } case PageMediaSizeName.JapanChou3EnvelopeRotated: { result = true; value = DevModePaperSizes.DMPAPER_JENV_CHOU3_ROTATED; break; } case PageMediaSizeName.JapanChou4Envelope: { result = true; value = DevModePaperSizes.DMPAPER_JENV_CHOU4; break; } case PageMediaSizeName.JapanChou4EnvelopeRotated: { result = true; value = DevModePaperSizes.DMPAPER_JENV_CHOU4_ROTATED; break; } case PageMediaSizeName.JapanDoubleHagakiPostcard: { result = true; value = DevModePaperSizes.DMPAPER_DBL_JAPANESE_POSTCARD; break; } case PageMediaSizeName.JapanDoubleHagakiPostcardRotated: { result = true; value = DevModePaperSizes.DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED; break; } case PageMediaSizeName.JapanHagakiPostcard: break; case PageMediaSizeName.JapanHagakiPostcardRotated: { result = true; value = DevModePaperSizes.DMPAPER_JAPANESE_POSTCARD_ROTATED; break; } case PageMediaSizeName.JapanKaku2Envelope: { result = true; value = DevModePaperSizes.DMPAPER_JENV_KAKU2; break; } case PageMediaSizeName.JapanKaku2EnvelopeRotated: { result = true; value = DevModePaperSizes.DMPAPER_JENV_KAKU2_ROTATED; break; } case PageMediaSizeName.JapanKaku3Envelope: { result = true; value = DevModePaperSizes.DMPAPER_JENV_KAKU3; break; } case PageMediaSizeName.JapanKaku3EnvelopeRotated: { result = true; value = DevModePaperSizes.DMPAPER_JENV_KAKU3_ROTATED; break; } case PageMediaSizeName.JapanLPhoto: break; case PageMediaSizeName.JapanQuadrupleHagakiPostcard: break; case PageMediaSizeName.JapanYou1Envelope: break; case PageMediaSizeName.JapanYou2Envelope: break; case PageMediaSizeName.JapanYou3Envelope: break; case PageMediaSizeName.JapanYou4Envelope: { result = true; value = DevModePaperSizes.DMPAPER_JENV_YOU4; break; } case PageMediaSizeName.JapanYou4EnvelopeRotated: { result = true; value = DevModePaperSizes.DMPAPER_JENV_YOU4_ROTATED; break; } case PageMediaSizeName.JapanYou6Envelope: break; case PageMediaSizeName.JapanYou6EnvelopeRotated: break; case PageMediaSizeName.JISB0: break; case PageMediaSizeName.JISB1: break; case PageMediaSizeName.JISB10: break; case PageMediaSizeName.JISB2: break; case PageMediaSizeName.JISB3: break; case PageMediaSizeName.JISB4: { result = true; value = DevModePaperSizes.DMPAPER_B4; break; } // verify may be ISO case PageMediaSizeName.JISB4Rotated: { result = true; value = DevModePaperSizes.DMPAPER_B4_JIS_ROTATED; break; } case PageMediaSizeName.JISB5: { result = true; value = DevModePaperSizes.DMPAPER_B5; break; } // verify may be ISO case PageMediaSizeName.JISB5Rotated: { result = true; value = DevModePaperSizes.DMPAPER_B5_JIS_ROTATED; break; } case PageMediaSizeName.JISB6: { result = true; value = DevModePaperSizes.DMPAPER_B6_JIS; break; } case PageMediaSizeName.JISB6Rotated: { result = true; value = DevModePaperSizes.DMPAPER_B6_JIS_ROTATED; break; } case PageMediaSizeName.JISB7: break; case PageMediaSizeName.JISB8: break; case PageMediaSizeName.JISB9: break; case PageMediaSizeName.NorthAmerica10x11: break; case PageMediaSizeName.NorthAmerica10x12: break; case PageMediaSizeName.NorthAmerica10x14: { result = true; value = DevModePaperSizes.DMPAPER_10X14; break; } case PageMediaSizeName.NorthAmerica11x17: { result = true; value = DevModePaperSizes.DMPAPER_11X17; break; } case PageMediaSizeName.NorthAmerica14x17: break; case PageMediaSizeName.NorthAmerica4x6: break; case PageMediaSizeName.NorthAmerica4x8: break; case PageMediaSizeName.NorthAmerica5x7: break; case PageMediaSizeName.NorthAmerica8x10: break; case PageMediaSizeName.NorthAmerica9x11: break; case PageMediaSizeName.NorthAmericaArchitectureASheet: break; case PageMediaSizeName.NorthAmericaArchitectureBSheet: break; case PageMediaSizeName.NorthAmericaArchitectureCSheet: break; case PageMediaSizeName.NorthAmericaArchitectureDSheet: break; case PageMediaSizeName.NorthAmericaArchitectureESheet: break; case PageMediaSizeName.NorthAmericaCSheet: { result = true; value = DevModePaperSizes.DMPAPER_CSHEET; break; } case PageMediaSizeName.NorthAmericaDSheet: { result = true; value = DevModePaperSizes.DMPAPER_DSHEET; break; } case PageMediaSizeName.NorthAmericaESheet: { result = true; value = DevModePaperSizes.DMPAPER_ESHEET; break; } case PageMediaSizeName.NorthAmericaExecutive: { result = true; value = DevModePaperSizes.DMPAPER_EXECUTIVE; break; } case PageMediaSizeName.NorthAmericaGermanLegalFanfold: { result = true; value = DevModePaperSizes.DMPAPER_FANFOLD_LGL_GERMAN; break; } case PageMediaSizeName.NorthAmericaGermanStandardFanfold: { result = true; value = DevModePaperSizes.DMPAPER_FANFOLD_STD_GERMAN; break; } case PageMediaSizeName.NorthAmericaLegal: break; case PageMediaSizeName.NorthAmericaLegalExtra: break; case PageMediaSizeName.NorthAmericaLetter: { result = true; value = DevModePaperSizes.DMPAPER_LETTER; break; } case PageMediaSizeName.NorthAmericaLetterExtra: break; case PageMediaSizeName.NorthAmericaLetterPlus: break; case PageMediaSizeName.NorthAmericaLetterRotated: { result = true; value = DevModePaperSizes.DMPAPER_LETTER_ROTATED; break; } case PageMediaSizeName.NorthAmericaMonarchEnvelope: break; case PageMediaSizeName.NorthAmericaNote: { result = true; value = DevModePaperSizes.DMPAPER_NOTE; break; } case PageMediaSizeName.NorthAmericaNumber10Envelope: { result = true; value = DevModePaperSizes.DMPAPER_ENV_10; break; } case PageMediaSizeName.NorthAmericaNumber10EnvelopeRotated: break; case PageMediaSizeName.NorthAmericaNumber11Envelope: { result = true; value = DevModePaperSizes.DMPAPER_ENV_11; break; } case PageMediaSizeName.NorthAmericaNumber12Envelope: { result = true; value = DevModePaperSizes.DMPAPER_ENV_12; break; } case PageMediaSizeName.NorthAmericaNumber14Envelope: { result = true; value = DevModePaperSizes.DMPAPER_ENV_14; break; } case PageMediaSizeName.NorthAmericaNumber9Envelope: { result = true; value = DevModePaperSizes.DMPAPER_ENV_9; break; } case PageMediaSizeName.NorthAmericaPersonalEnvelope: { result = true; value = DevModePaperSizes.DMPAPER_ENV_PERSONAL; break; }; case PageMediaSizeName.NorthAmericaQuarto: { result = true; value = DevModePaperSizes.DMPAPER_QUARTO; break; } case PageMediaSizeName.NorthAmericaStatement: { result = true; value = DevModePaperSizes.DMPAPER_STATEMENT; break; } case PageMediaSizeName.NorthAmericaSuperA: break; case PageMediaSizeName.NorthAmericaSuperB: break; case PageMediaSizeName.NorthAmericaTabloid: { result = true; value = DevModePaperSizes.DMPAPER_TABLOID; break; } case PageMediaSizeName.NorthAmericaTabloidExtra: break; case PageMediaSizeName.OtherMetricA3Plus: break; case PageMediaSizeName.OtherMetricA4Plus: break; case PageMediaSizeName.OtherMetricFolio: { result = true; value = DevModePaperSizes.DMPAPER_FOLIO; break; } case PageMediaSizeName.OtherMetricInviteEnvelope: break; case PageMediaSizeName.OtherMetricItalianEnvelope: { result = true; value = DevModePaperSizes.DMPAPER_ENV_ITALY; break; } case PageMediaSizeName.PRC10Envelope: { result = true; value = DevModePaperSizes.DMPAPER_PENV_10; break; } case PageMediaSizeName.PRC10EnvelopeRotated: { result = true; value = DevModePaperSizes.DMPAPER_PENV_10_ROTATED; break; } case PageMediaSizeName.PRC16K: { result = true; value = DevModePaperSizes.DMPAPER_P16K; break; } case PageMediaSizeName.PRC16KRotated: { result = true; value = DevModePaperSizes.DMPAPER_P16K_ROTATED; break; } case PageMediaSizeName.PRC1Envelope: { result = true; value = DevModePaperSizes.DMPAPER_PENV_1; break; } case PageMediaSizeName.PRC1EnvelopeRotated: { result = true; value = DevModePaperSizes.DMPAPER_PENV_1_ROTATED; break; } case PageMediaSizeName.PRC2Envelope: { result = true; value = DevModePaperSizes.DMPAPER_PENV_2; break; } case PageMediaSizeName.PRC2EnvelopeRotated: { result = true; value = DevModePaperSizes.DMPAPER_PENV_2_ROTATED; break; } case PageMediaSizeName.PRC32K: { result = true; value = DevModePaperSizes.DMPAPER_P32K; break; } case PageMediaSizeName.PRC32KBig: { result = true; value = DevModePaperSizes.DMPAPER_P32KBIG; break; } case PageMediaSizeName.PRC32KRotated: { result = true; value = DevModePaperSizes.DMPAPER_P32KBIG_ROTATED; break; } case PageMediaSizeName.PRC3Envelope: { result = true; value = DevModePaperSizes.DMPAPER_PENV_3; break; } case PageMediaSizeName.PRC3EnvelopeRotated: { result = true; value = DevModePaperSizes.DMPAPER_PENV_3_ROTATED; break; } case PageMediaSizeName.PRC4Envelope: { result = true; value = DevModePaperSizes.DMPAPER_PENV_4; break; } case PageMediaSizeName.PRC4EnvelopeRotated: { result = true; value = DevModePaperSizes.DMPAPER_PENV_4_ROTATED; break; } case PageMediaSizeName.PRC5Envelope: { result = true; value = DevModePaperSizes.DMPAPER_PENV_5; break; } case PageMediaSizeName.PRC5EnvelopeRotated: { result = true; value = DevModePaperSizes.DMPAPER_PENV_5_ROTATED; break; } case PageMediaSizeName.PRC6Envelope: { result = true; value = DevModePaperSizes.DMPAPER_PENV_6; break; } case PageMediaSizeName.PRC6EnvelopeRotated: { result = true; value = DevModePaperSizes.DMPAPER_PENV_6_ROTATED; break; } case PageMediaSizeName.PRC7Envelope: { result = true; value = DevModePaperSizes.DMPAPER_PENV_7; break; } case PageMediaSizeName.PRC7EnvelopeRotated: { result = true; value = DevModePaperSizes.DMPAPER_PENV_7_ROTATED; break; } case PageMediaSizeName.PRC8Envelope: { result = true; value = DevModePaperSizes.DMPAPER_PENV_8; break; } case PageMediaSizeName.PRC8EnvelopeRotated: { result = true; value = DevModePaperSizes.DMPAPER_PENV_8_ROTATED; break; } case PageMediaSizeName.PRC9Envelope: { result = true; value = DevModePaperSizes.DMPAPER_PENV_9; break; } case PageMediaSizeName.PRC9EnvelopeRotated: { result = true; value = DevModePaperSizes.DMPAPER_PENV_9_ROTATED; break; } case PageMediaSizeName.Roll04Inch: break; case PageMediaSizeName.Roll06Inch: break; case PageMediaSizeName.Roll08Inch: break; case PageMediaSizeName.Roll12Inch: break; case PageMediaSizeName.Roll15Inch: break; case PageMediaSizeName.Roll18Inch: break; case PageMediaSizeName.Roll22Inch: break; case PageMediaSizeName.Roll24Inch: break; case PageMediaSizeName.Roll30Inch: break; case PageMediaSizeName.Roll36Inch: break; case PageMediaSizeName.Roll54Inch: break; } return(result); }
/// <summary> /// 打印方法 /// </summary> /// <param name="ViewContainer">需要打印的控件</param> /// <param name="pageOrientation">打印方向,通过枚举类型 System.Printing.PageOrientation选择需要打印的方式</param> public static void Print(FrameworkElement ViewContainer, PageOrientation pageOrientation = PageOrientation.Portrait, PageMediaSizeName pageMediaSizeName = PageMediaSizeName.ISOA4) { if (ViewContainer is Canvas) { throw new Exception("该方法不支持 Canvas 类型控件打印"); } FrameworkElement objectToPrint = ViewContainer as FrameworkElement; double obj_Width = objectToPrint.ActualWidth; double obj_Heigh = objectToPrint.ActualHeight; if (pageOrientation == PageOrientation.Portrait) { a4Width = 761.5; a4Height = 1084.7; } else if (pageOrientation == PageOrientation.Landscape) { a4Width = 1084.7; //后续修改 自动获取 a4Height = 761.5; //后续修改 自动获取 } RenderTargetBitmap bmp = null; System.Drawing.Bitmap bmp2 = null; PageContent lastPageContent = null; FixedDocument document = new FixedDocument(); PrintDialog printDialog = new PrintDialog(); bool isDoPrint = false; try { printDialog.PrintTicket.PageOrientation = pageOrientation; printDialog.PrintTicket.PageMediaSize = new PageMediaSize(pageMediaSizeName); if ((bool)printDialog.ShowDialog().GetValueOrDefault()) { isDoPrint = true; Mouse.OverrideCursor = Cursors.Wait; double dpiScale = 300.0 / 96.0; try { Size size = new Size(a4Width > objectToPrint.ActualWidth ? objectToPrint.ActualWidth : a4Width, a4Height > objectToPrint.ActualHeight ? a4Height : objectToPrint.ActualHeight); objectToPrint.Measure(size); objectToPrint.Arrange(new Rect(size)); double left = a4Width > objectToPrint.ActualWidth ? (a4Width - objectToPrint.ActualWidth) * 0.5 : 20; // Convert the UI control into a bitmap at 300 dpi double dpiX = 300; double dpiY = 300; bmp = new RenderTargetBitmap(Convert.ToInt32( a4Width * dpiScale), Convert.ToInt32(objectToPrint.ActualHeight * dpiScale), dpiX, dpiY, PixelFormats.Pbgra32); bmp.Render(objectToPrint); bmp.Freeze(); // Convert the RenderTargetBitmap into a bitmap we can more readily use PngBitmapEncoder png = new PngBitmapEncoder(); png.Frames.Add(BitmapFrame.Create(bmp)); using (MemoryStream memoryStream = new MemoryStream()) { png.Save(memoryStream); bmp2 = new System.Drawing.Bitmap(memoryStream); } document.DocumentPaginator.PageSize = new Size(printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight); // break the bitmap down into pages int pageBreak = 0; int previousPageBreak = 0; int temp = 0; int pageHeight = Convert.ToInt32(a4Height * dpiScale); while (pageBreak < bmp2.Height - pageHeight) { pageBreak += pageHeight - 250; // Where we thing the end of the page should be temp = pageBreak; // Keep moving up a row until we find a good place to break the page while (!IsRowGoodBreakingPoint(bmp2, pageBreak)) { pageBreak--; if (pageBreak == previousPageBreak) { pageBreak = temp; break; } } var pageContent = GeneratePageContent( bmp2, previousPageBreak == 0 ? 0 : previousPageBreak - 3, pageBreak + 3, document.DocumentPaginator.PageSize.Width, document.DocumentPaginator.PageSize.Height, new Size(a4Width, a4Height), left); document.Pages.Add(pageContent); previousPageBreak = pageBreak; } // Last Page lastPageContent = GeneratePageContent(bmp2, previousPageBreak == 0 ? 0 : previousPageBreak - 3, bmp2.Height, document.DocumentPaginator.PageSize.Width, document.DocumentPaginator.PageSize.Height, new Size(a4Width, a4Height), left); document.Pages.Add(lastPageContent); printDialog.PrintDocument(document.DocumentPaginator, "Print Document Name"); } catch (Exception ex) { throw ex; } finally { //Scale UI control back to the original so we don't effect what is on the screen Size size = new Size(obj_Width, obj_Heigh); objectToPrint.Measure(size); objectToPrint.Arrange(new Rect(size)); Mouse.OverrideCursor = null; } } } catch (Exception ex) { //MessageBox.Show("打印过程中出错,错误描述为:" + ex.Message, "打印", MessageBoxButton.OK, MessageBoxImage.Information); Console.WriteLine(ex.ToString()); //try //{ // if (ex is OutOfMemoryException && isDoPrint) // { // printDialog.PrintVisual(ViewContainer, "打印"); // return; // } //} //catch (Exception e) //{ //} string msg = "系统检测到您的打印机状态不正常(可能您在使用其他软件时能正常打印),建议重新安装打印机驱动!\n点击“确定”按钮,将导出XPS文档,您可自行打印。\n异常信息为:" + ex.Message; if (MessageBox.Show(msg, "打印", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.OK) { SaveAsXps(objectToPrint); } } finally { try { printDialog = null; if (bmp != null) { bmp.Clear(); bmp = null; } if (document != null) { foreach (var fixedPage in document.Pages.Select(pageContent => pageContent.Child)) { fixedPage.Children.Clear(); } } lastPageContent = null; if (bmp2 != null) { bmp2.Dispose(); } document = null; GC.Collect(); GC.WaitForPendingFinalizers(); //GC.Collect(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } }
/// <summary> /// 打印方法 /// </summary> /// <param name="ViewContainer">需要打印的控件</param> /// <param name="pageOrientation">打印方向,通过枚举类型 System.Printing.PageOrientation选择需要打印的方式</param> public static bool Print(PrintDialog printDialog, List <FrameworkElement> ViewContainers, PageOrientation pageOrientation = PageOrientation.Portrait, PageMediaSizeName pageMediaSizeName = PageMediaSizeName.ISOA4) { if (pageOrientation == PageOrientation.Portrait) { a4Width = 761.5; a4Height = 1084.7; } else if (pageOrientation == PageOrientation.Landscape) { a4Width = 1084.7; //后续修改 自动获取 a4Height = 761.5; //后续修改 自动获取 } RenderTargetBitmap bmp = null; System.Drawing.Bitmap bmp2 = null; PageContent lastPageContent = null; FixedDocument document = new FixedDocument(); try { printDialog.PrintTicket.PageOrientation = pageOrientation; printDialog.PrintTicket.PageMediaSize = new PageMediaSize(pageMediaSizeName); Mouse.OverrideCursor = Cursors.Wait; double dpiScale = 300.0 / 96.0; try { foreach (FrameworkElement objectToPrint in ViewContainers) { Size size = new Size(a4Width > objectToPrint.ActualWidth ? objectToPrint.ActualWidth : a4Width, a4Height > objectToPrint.ActualHeight ? a4Height : objectToPrint.ActualHeight); objectToPrint.Measure(size); objectToPrint.Arrange(new Rect(size)); double left = a4Width > objectToPrint.ActualWidth ? (a4Width - objectToPrint.ActualWidth) * 0.5 : 20; // Convert the UI control into a bitmap at 300 dpi double dpiX = 300; double dpiY = 300; bmp = new RenderTargetBitmap(Convert.ToInt32( a4Width * dpiScale), Convert.ToInt32(objectToPrint.ActualHeight * dpiScale), dpiX, dpiY, PixelFormats.Pbgra32); bmp.Render(objectToPrint); bmp.Freeze(); // Convert the RenderTargetBitmap into a bitmap we can more readily use PngBitmapEncoder png = new PngBitmapEncoder(); png.Frames.Add(BitmapFrame.Create(bmp)); using (MemoryStream memoryStream = new MemoryStream()) { png.Save(memoryStream); bmp2 = new System.Drawing.Bitmap(memoryStream); } document.DocumentPaginator.PageSize = new Size(printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight); // break the bitmap down into pages int pageBreak = 0; int previousPageBreak = 0; int temp = 0; int pageHeight = Convert.ToInt32(a4Height * dpiScale); while (pageBreak < bmp2.Height - pageHeight) { pageBreak += pageHeight - 250; // Where we thing the end of the page should be temp = pageBreak; // Keep moving up a row until we find a good place to break the page while (!IsRowGoodBreakingPoint(bmp2, pageBreak)) { pageBreak--; if (pageBreak == previousPageBreak) { pageBreak = temp; break; } } var pageContent = GeneratePageContent( bmp2, previousPageBreak == 0 ? 0 : previousPageBreak - 3, pageBreak + 3, document.DocumentPaginator.PageSize.Width, document.DocumentPaginator.PageSize.Height, new Size(a4Width, a4Height), left); document.Pages.Add(pageContent); previousPageBreak = pageBreak; } // Last Page lastPageContent = GeneratePageContent(bmp2, previousPageBreak == 0 ? 0 : previousPageBreak - 3, bmp2.Height, document.DocumentPaginator.PageSize.Width, document.DocumentPaginator.PageSize.Height, new Size(a4Width, a4Height), left); document.Pages.Add(lastPageContent); } printDialog.PrintDocument(document.DocumentPaginator, "Print Document Name"); } catch (Exception ex) { throw ex; } finally { //Scale UI control back to the original so we don't effect what is on the screen //Size size = new Size(obj_Width, obj_Heigh); //objectToPrint.Measure(size); //objectToPrint.Arrange(new Rect(size)); Mouse.OverrideCursor = null; } } catch (Exception ex) { Console.WriteLine(ex.ToString()); MessageBox.Show("打印时出现异常,异常信息为:" + ex.Message, "打印"); } finally { try { if (bmp != null) { bmp.Clear(); bmp = null; } if (document != null) { foreach (var fixedPage in document.Pages.Select(pageContent => pageContent.Child)) { fixedPage.Children.Clear(); } } lastPageContent = null; if (bmp2 != null) { bmp2.Dispose(); } document = null; GC.Collect(); GC.WaitForPendingFinalizers(); //GC.Collect(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } return(true); }
/// <summary> /// 设置打印格式 /// </summary> /// <param name="printDialog">打印文档</param> /// <param name="pageSize">打印纸张大小 a4</param> /// <param name="pageOrientation">打印方向 竖向</param> public void SetPrintProperty(PrintDialog printDialog, double width, double height, PageMediaSizeName pageSize = PageMediaSizeName.CreditCard, PageOrientation pageOrientation = PageOrientation.ReverseLandscape) { //PageMediaSizeName page = new PageMediaSizeName(); var printTicket = printDialog.PrintTicket; printTicket.PageMediaType = PageMediaType.AutoSelect; printTicket.PageMediaSize = new PageMediaSize(width, height); //printTicket.PageMediaSize = new PageMediaSize(pageSize);//A4纸 printTicket.PageOrientation = pageOrientation;//默认竖向打印 }
// Get image for page size private string GetPageImage(PageMediaSizeName? name) { if (name.HasValue) { if (name.Value == PageMediaSizeName.ISOA3) return "pack://application:,,,/;component/Images/A3.png"; if (name.Value == PageMediaSizeName.ISOA4) return "pack://application:,,,/;component/Images/A4.png"; if (name.Value == PageMediaSizeName.ISOA5) return "pack://application:,,,/;component/Images/A5.png"; } return null; }
/// <summary> /// Constructor /// </summary> /// <param name="name">Page media size name</param> /// <param name="width">Page width</param> /// <param name="height">Page height</param> /// <param name="image">Page image</param> /// <param name="pageMediaSize">Page media size</param> public PageSize(PageMediaSizeName? name, double width, double height, string image, PageMediaSize pageMediaSize) { Name = name; Width = width; Height = height; Image = image; PageMediaSize = pageMediaSize; }