Я пытаюсь решить эту проблему в течение почти двух дней. В сети много или меньше хороших решений, но ни одна из них не подходит для моей задачи.
Задача:
- Печатать PDF программно
- Сделайте это с помощью фиксированного принтера
- Не позволяйте пользователю делать несколько кнопок Button_Click
- Сделай это молчанием - чем больше, тем лучше
- Сделайте это на стороне клиента
Первые решения:
Сделайте это с помощью Forms.WebBrowser
Если у нас установлен Adobe Reader, есть плагин для показа PDF в веб-браузере. С помощью этого решения у нас есть хороший предварительный просмотр, и с помощью webbrowserControlName.Print() мы можем заставить элемент управления печатать его содержимое.
Проблема - у нас все еще есть PrintDialog.
Запустите AcroRd32.exe с начальными аргументами
Следующая команда CMD позволяет использовать Adobe Reader для печати нашего PDF.
InsertPathTo..\AcroRd32.exe/t "C:\sample.pdf" "\ printerNetwork\имя_принтера"
Проблемы - нам нужен абсолютный путь к AcroRd32.exe | открывается окно Adobe Reader Window, и его нужно открыть, пока задача печати не будет готова.
Использовать предварительные настройки Windows
Process process = new Process();
process.StartInfo.FileName = pathToPdf;
process.StartInfo.Verb = "printto";
process.StartInfo.Arguments = "\"" + printerName + "\"";
process.Start();
process.WaitForInputIdle();
process.Kill();
Проблема - появляется окно Adobe Reader, но после завершения печати оно обычно закрывается.
Решение - убедить клиента использовать Foxit Reader (не использовать последние две строки кода).
Преобразование страниц PDF в Drawing.Image
Я не знаю, как это сделать с кодом, но когда я получаю это, чтобы работать, остальное - всего лишь кусок пирога. Printing.PrintDocument может удовлетворить все требования.
Кто-нибудь задумался о том, чтобы получить Drawing.Image из этих PDF'ов или другого подхода, как это сделать?
С наилучшими пожеланиями, Макс