none
Beim Drucken eines FixedDocument die nicht druckbaren Ränder ermitteln RRS feed

  • Frage

  • Hallo

    Ich bin noch relativ neu in WPF und versuche meine erste Seite zu drucken. 

    Dank Google und meines Handbuches habe soweit fast alles hin bekommen. Ich habe aber noch Probleme mit dem unteren Rand.

    siehe Bild aus dem Demo-Projekt:

     

    Falls Eure Glaskugel gerade defekt ist, hier der Code dazu:

           private void Button_Click_2(object sender, RoutedEventArgs e)
            {
                PrintQueue queue = LocalPrintServer.GetDefaultPrintQueue();
                var prnTicket = queue.DefaultPrintTicket;
                Size prnPageSize = new Size((double)prnTicket.PageMediaSize.Width, (double)prnTicket.PageMediaSize.Height);
                Size prnPageMargin = new Size(queue.GetPrintCapabilities(prnTicket).PageImageableArea.OriginWidth,
                                              queue.GetPrintCapabilities(prnTicket).PageImageableArea.OriginHeight);
                FixedDocument doc = CreateFixedDocument_Test1(prnPageSize, prnPageMargin);
                XpsDocumentWriter writer = PrintQueue.CreateXpsDocumentWriter(queue);
                writer.Write(doc);
            }
    
            private FixedDocument CreateFixedDocument_Test1(Size pageSize, Size pageMargin)
            {
                FixedDocument doc = new FixedDocument();
                FixedPage fPage = new FixedPage();
                PageContent content = new PageContent();
                ((IAddChild)content).AddChild(fPage);
                doc.Pages.Add(content);
                Canvas canvas = new Canvas();
    
                int zeile = 0;
                double y = pageMargin.Height;
                while (y < pageSize.Height - pageMargin.Height)
                {
                    zeile++;
                    var textBlock = new TextBlock();
                    textBlock.Text = "Das iste die Testzeile mit der Nummer: " + zeile.ToString();
                    var formattedText = new FormattedText(textBlock.Text, CultureInfo.CurrentCulture, FlowDirection.LeftToRight,
                                        new Typeface(textBlock.FontFamily, textBlock.FontStyle, textBlock.FontWeight, textBlock.FontStretch),
                                        textBlock.FontSize, Brushes.Black, new NumberSubstitution(), TextFormattingMode.Display);
                    Canvas.SetLeft(textBlock, pageMargin.Width);
                    Canvas.SetTop(textBlock, y);
                    canvas.Children.Add(textBlock);
                    y += formattedText.Height;
                }
    
                var textBlockEnde = new TextBlock();
                textBlockEnde.Text = zeile.ToString() + " Zeilen sollten eigentlich zu sehen sein!";
                Canvas.SetLeft(textBlockEnde, pageSize.Width * 0.5d);
                Canvas.SetTop(textBlockEnde, pageSize.Height * 0.8d);
                canvas.Children.Add(textBlockEnde);
    
                fPage.Children.Add(canvas);
                return doc;
            }

    Meine Fragen:

    Wie kann ich die Größe des unteren Rands ermitteln?

    Kann man die Größe verkleinern?  (Beim Drucken mit Windows-Forms-Projekten ist er in etwa so groß wie der linke Rand.)

    Grüße Klaus

    Samstag, 19. Januar 2019 11:02

Antworten

  • Hallo,

                fPage.Width = pageSize.Width;
                fPage.Height = pageSize.Height;

    ist die Lösung für das Problem.

    Gruß Klaus


    • Als Antwort markiert Klaus Raabe Mittwoch, 23. Januar 2019 08:54
    Mittwoch, 23. Januar 2019 08:54