2015-11-06 5 views
0

У меня проблема, которую я пытаюсь решить в течение недели, и я решил зарегистрироваться и попросить вас, потому что все, что я пробовал, потерпело неудачу.Печать в C# WPF - PrintDialog.PrintVisual метод работает на одном компьютере и не работает на другом

У меня есть приложение WPF, написанное на C#. Моя самая большая проблема - печатание. У меня есть следующий код:

TransformedBitmap tb = new TransformedBitmap(); 
RotateTransform transform = new RotateTransform(90); 

tb.BeginInit(); 
tb.Source = myBitmapImage; 
tb.Transform = transform; 
tb.EndInit(); 

PrintDialog myPrintDialog = new PrintDialog(); 

var dv = new DrawingVisual(); 
using (var dc = dv.RenderOpen()) 
{ 
    dc.DrawImage(tb, new Rect(0, 0, myPrintDialog.PrintableAreaWidth, myPrintDialog.PrintableAreaHeight)); 
} 

myPrintDialog.PrintVisual(dv, "Image"); 

Я пробовал этот код на нескольких компьютерах с различными версиями Windows. Отлично работает на Win 10, Win 8.1, Win 7, даже на моей старой Win XP.

Но в последнее время я попытался запустить это приложение на ASUS X553M с Win 8.1. Приложение зависает после приведенного выше кода. И, конечно, ничего не печатается.

Я взял поближе к коду, я отлажена этот код и я полагаю, что он останавливается в строке:

myPrintDialog.PrintVisual(dv, "Image"); 

Файл будет отправлен на принтер, но больше ничего не происходит. Интересно, что в файле очереди принтера есть статус: «буферизация» все время и не изменяется. Я пробовал с несколькими принтерами, как физическими, так и виртуальными принтерами - то же самое, никогда не заканчивая буферизацией ... Еще одна странная вещь: я тестировал принтеры, и они, кажется, работают правильно. Печать тестовой страницы из драйвера принтера преуспела.

Это странно для меня, потому что, как я уже сказал, код отлично работает на других компьютерах. В последние несколько дней я искал ответ в Интернете, я очистил и сбросил службу диспетчера очереди печати в системе Windows. Я установил все возможные обновления для этого Asus X553M Win 8, я даже обновил его до Windows 10. Я создал новую учетную запись для нового пользователя admin, потому что я думал, что профиль пользователя поврежден. И ничего не изменилось, до сих пор не печатает ... и приложение все еще висит на этой линии.

Буду признателен за каждую подсказку, что может быть не так или где я должен выглядеть ... Я рассчитываю на ваши предложения. Я должен сделать этот ноутбук (или мое приложение) работать правильно. Смена ноутбука - это не вариант, поэтому вы - моя последняя надежда. Спасибо заранее!

+0

ли печать работы с другими приложениями? – Contango

+0

Благодарим вас за интерес. Да, я тестировал печать из Windows Picture Browser, и буферизация занимает менее секунды, затем изображение печатает. – Dario

ответ

0

У меня возникла аналогичная проблема, когда я мог печатать с некоторых компьютеров, но не с одного, на физическом принтере (работа с ОК с XPS). Я, наконец, получил рабочее решение здесь:

»https://social.msdn.microsoft.com/Forums/vstudio/en-US/9eb79e11-ee5a-4687-ad4c-a6d96276a8f4/printing-a-wpf-usercontrol?forum=wpf

 UserControlToPrint.Measure(New Size(816, 1056)) 
     UserControlToPrint.Arrange(New Rect(New Size(816, 1056))) 
     UserControlToPrint.UpdateLayout()