Example #1
0
        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);
        }
Example #2
0
        /// <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());
        }
Example #3
0
 /// <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();
 }
Example #4
0
        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;
        }
Example #5
0
 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);
 }
Example #7
0
 public override void Populate(ref PrintPages pages)
 {
     AddElement(ref pages, Create());
 }
Example #8
0
 public void Populate(ref PrintPages pages)
 {
     if (pages.Last.HasElements)
     {
         var element = new Border {Width = this.width, Height = this.height};
         pages.Last.UpdateMeasureAndAddElement(element);
     }
 }
Example #9
0
 public void Populate(ref PrintPages pages)
 {
     if (pages.Last.HasElements)
     {
         pages.AddNewPage();
     }
 }
Example #10
0
        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);
        }