protected static void AddElement(ref PrintPages pages, FrameworkElement element) { var size = pages.Last.UpdateAndMeasure(element); bool fits = pages.Last.Fits(size); if (pages.Last.HasElements && !fits) { pages.AddNewPage(); } pages.Last.AddElement(element); }
/// <summary> /// 印刷実行 /// </summary> /// <returns>エラーメッセージ</returns> public string ExecutePrint() { // ページ数の計算 if (File.Summaries.Count % PageLineCount == 0) { MaxPage = File.Summaries.Count / PageLineCount; } else { MaxPage = File.Summaries.Count / PageLineCount + 1; } // ページ毎に印刷データを作成 for (int pageNo = 1; pageNo <= MaxPage; pageNo++) { PrintPages.Add(new View::Quotation(DataFile, pageNo, MaxPage)); } // 印刷実行 return(Print()); }
/// <summary> /// Resets all settings to its default values. /// </summary> public void Clear() { FPrinter = ""; FSavePrinterWithReport = false; FPrintToFile = false; FPrintToFileName = ""; FPageRange = PageRange.All; FPageNumbers = ""; FCopies = 1; FCollate = true; FPrintPages = PrintPages.All; FReverse = false; FDuplex = Duplex.Default; FPaperSource = 7; FPrintMode = PrintMode.Default; FPrintOnSheetWidth = 210; FPrintOnSheetHeight = 297; FPrintOnSheetRawPaperSize = 0; FPagesOnSheet = PagesOnSheet.One; FCopyNames = new string[0]; FShowDialog = true; DisposeMeasureGraphics(); }
public FixedDocument Create() { var pages = new PrintPages(PageLayout, HeaderTemplate, FooterTemplate, PageInfoFormat, PrintInfoFormat, UserName); foreach (var pagePopulator in this.pagePopulators) { pagePopulator.Populate(ref pages); } pages.SetPageCount(); var document = new FixedDocument {Name = Name}; foreach (var page in pages) { var documentPage = new FixedPage { Width = PageLayout.Size.Width, Height = PageLayout.Size.Height }; page.IsHitTestVisible = false; documentPage.Children.Add(page); var content = new PageContent(); ((IAddChild) content).AddChild(documentPage); document.Pages.Add(content); } var printTicket = LocalPrintServer.GetDefaultPrintQueue().DefaultPrintTicket; double width = PageLayout.Size.Width; double height = PageLayout.Size.Height; printTicket.PageOrientation = height > width ? PageOrientation.Portrait : PageOrientation.Landscape; printTicket.PageMediaSize = PageLayout.PageMediaSize; printTicket.PagesPerSheet = 1; document.PrintTicket = printTicket; return document; }
public abstract void Populate(ref PrintPages pages);
public override void Populate(ref PrintPages pages) { var element = this.elementCreator.Invoke(); //element.InvalidateVisual(); AddElement(ref pages, element); }
public override void Populate(ref PrintPages pages) { AddElement(ref pages, Create()); }
public void Populate(ref PrintPages pages) { if (pages.Last.HasElements) { var element = new Border {Width = this.width, Height = this.height}; pages.Last.UpdateMeasureAndAddElement(element); } }
public void Populate(ref PrintPages pages) { if (pages.Last.HasElements) { pages.AddNewPage(); } }
public void Populate(ref PrintPages pages) { this.first = true; bool newPage = true; var subItemsSource = new ArrayList(); var mock = pages.Last.CreatePageMock(); //Debug.Print("Page height: {0}", pages.Last.Height / PrintLayout.DotsPerCm); //Debug.Print("Mock height: {0}", mock.BodySize.Height / PrintLayout.DotsPerCm); mock.AddPrintElement(this.caption); mock.AddPrintElement(this.tableHeader); double sumsize = 0; foreach (var itemSource in this.itemsSource) { if (newPage) { mock.AddPrintElement(this.columsHeader); newPage = false; } var element = PrintTemplate.Create(this.itemTemplate, itemSource); var size = mock.UpdateAndMeasure(element); //sumsize += size.Height; //Debug.Print("Element size height {0}", size.Height / PrintLayout.DotsPerCm); //Debug.Print("Height {0}", mock.BodySize.Height / PrintLayout.DotsPerCm); if (!mock.Fits(size)) { if (subItemsSource.Count > 0) { AddToPage(pages.Last, subItemsSource, false); } pages.AddNewPage(); mock = pages.Last.CreatePageMock(); if (subItemsSource.Count == 0) { mock.AddPrintElement(this.caption); mock.AddPrintElement(this.tableHeader); } subItemsSource = new ArrayList(); newPage = true; } subItemsSource.Add(itemSource); mock.AddElement(element); } var tableFooterSize = new Size(); if (this.tableFooter != null) { var tableFooterElement = this.tableFooter.Create(); tableFooterSize = mock.UpdateAndMeasure(tableFooterElement); } if (mock.Fits(tableFooterSize)) { AddToPage(pages.Last, subItemsSource, true); } else { if (subItemsSource.Count > 0) //<- neue Zeile um den Bug zu beheben. { /* hier beginnt der Bug*/ var last = subItemsSource[subItemsSource.Count - 1]; subItemsSource.RemoveAt(subItemsSource.Count - 1); AddToPage(pages.Last, subItemsSource, false); pages.AddNewPage(); AddToPage(pages.Last, new[] {last}, true); } } Debug.Print("Sumsize {0}", sumsize / PrintLayout.DotsPerCm); }