Печать ленты с использованием PrintDialog - PullRequest
0 голосов
/ 13 марта 2019

это сводит меня с ума. Я стараюсь беззвучно печатать ленту (высота 1000 мм, ширина 150 мм). Контент представляет собой холст, содержащий форматированный текст.

Если я использую «Microsoft Print To PDF», все работает и выглядит хорошо. Когда я иду и использую принтер OKI из PDF, это нормально!

Если я попытаюсь напрямую печатать с использованием OKI, я получу пустую ленту или (если я изменю некоторые параметры) я получу очень маленький текст в середине нигде.

Есть идеи? К сожалению, почти невозможно отладить.

Это функция печати:

        private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        PrintDialog prnt = new PrintDialog();
        //PrintQueue queue = new LocalPrintServer().GetPrintQueue("Microsoft Print To PDF");
        PrintQueue queue = new LocalPrintServer().GetPrintQueue("OKI C3450");

        prnt.PrintQueue = queue;
        //var f = queue.GetPrintCapabilities();
        prnt.PrintTicket = new PrintTicket();
        prnt.PrintTicket.PageMediaSize = new PageMediaSize(3779.53, 566.93);
        prnt.PrintTicket.PageOrientation = PageOrientation.Landscape;
        //if (prnt.ShowDialog() == true)
        //{
            Size pageSize = new Size(3779.53, 566.93);

        var canvasToPrint = this.backgroundCanvasSchleife1;

        this.backgroundCanvasSchleife1.Measure(pageSize);
        this.backgroundCanvasSchleife1.Background = new SolidColorBrush(Colors.Transparent);
        this.backgroundCanvasSchleife1.Children.RemoveRange(0, this.backgroundCanvasSchleife1.Children.Count-1);
        this.backgroundCanvasSchleife1.Arrange(new Rect(0, 0, pageSize.Width, pageSize.Height));

        //if (prnt.ShowDialog() == true)
        //{
       // try
        //{
            prnt.PrintVisual(this.backgroundCanvasSchleife1, "Printing Canvas");
        //}catch (Exception ex)
        //{
        //    var t = ex;
        //}
            //}
        //}
        //this.Close();
    }
...