public void DoPrint <T>(T model, PrintTemplate tpl) { Application.Current.Dispatcher.Invoke(new Action(() => { var doc = PrintLayoutHelper.GetDocument(); doc.Format <T>(tpl, model); var q = GetPrinter("Microsoft XPS Document Writer"); var pd = new PrintDialog { PrintQueue = q }; if (q != null || pd.ShowDialog().GetValueOrDefault(false)) { //doc.Background = Brushes.Transparent; doc.PageHeight = pd.PrintableAreaHeight; doc.PageWidth = pd.PrintableAreaWidth; doc.PagePadding = new Thickness(25); // doc.ColumnGap = 0; //doc.ColumnWidth = (doc.PageWidth - // doc.ColumnGap - // doc.PagePadding.Left - // doc.PagePadding.Right); pd.PrintDocument(((IDocumentPaginatorSource)doc).DocumentPaginator, ""); } })); }
public static void Format <T>(this FlowDocument doc, PrintTemplate tpl, T model) { var temptpl = tpl.GetCollections(model, GetModelDatas, GetCollections); var lines = tpl.GetNatureDatas(GetModelDatas, model, temptpl).Select(o => tpl.GetLineTagInfos(o)); var ContentTags = new string[] { "BMP", "T" }; foreach (var tags in lines) { Paragraph block = new Paragraph(); block.LineHeight = 0.0034; block.Margin = new Thickness(0); foreach (var tag in tags) { if (TagFormat(block, tag, tags)) { break; } } if (tags.Count() > 0) { doc.Blocks.Add(block); } } }