Как я могу печатать качественно ?PDF-файлы в .NET?
Я пытаюсь сделать функцию в VB.NET это позволяет пользователю распечатать файл. PDF из папки. Указанная функция должна иметь следующие технические характеристики:
- Качество печатного файла должно быть таким же, как и у оригинала, без ухудшения.
- Пользователь должен иметь возможность выбрать принтер и отредактировать настройки печати перед печатью файла. Дуплексная печать, в частности, обязательна.
- Программа должна работать правильно, независимо от спецификаций принтера или установленных пользователем программ (эта функция будет частью программы, которую нужно будет установить на разные компьютеры, поэтому я не могу делать предположений о типе принтера или о том, есть ли у пользователя Adobe или нет).
- Функция не должна открывать другие программы во время печати.
- Функция не должна полагаться на лицензионные или платные библиотеки DLL.
Я уже пробовал методы, описанные ниже, но ни один из них не отвечал всем требованиям: я также искал много разных сайтов, но все ответы приводили либо к методу, который я уже пробовал, либо к предложению использовать сторонние библиотеки DLL. Может ли кто-нибудь порекомендовать мне альтернативный метод или дать мне совет о том, как решить проблемы с теми, которые я уже пробовал? Заранее спасибо.
Что я уже пробовал:
Методы, которые я пробовал, следующие:
- Я пробовал использовать iTextSharp для преобразования каждой страницы в изображение, а затем печатать эти изображения с помощью PrintDocument. Этот метод соответствовал почти всем спецификациям, но изображения, сгенерированные таким образом, были действительно ухудшены по сравнению с оригиналом, поэтому мне пришлось искать другое решение.
- Я попробовал использовать ProcessStartInfo с кодом, похожим на этот, чтобы система использовала для этой задачи программу печати по умолчанию:
Using dialogPrint As New PrintDialog dialogPrint.AllowPrintToFile = True dialogPrint.AllowSomePages = True If dialogPrint.ShowDialog = DialogResult.OK Then Dim proc As New Process proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden proc.StartInfo.Verb = "PrintTo" proc.StartInfo.FileName = selectedFile proc.StartInfo.Arguments = """" & dialogPrint.PrinterSettings.PrinterName & """" proc.StartInfo.CreateNoWindow = True proc.StartInfo.UseShellExecute = True proc.Start() If Not proc.HasExited Then proc.WaitForExit(10000) End If proc.Close() End If End UsingОднако этот метод не соответствовал нескольким спецификациям: он не только не позволяет мне печатать файл в дуплексном режиме, но и открывает Adobe каждый раз, когда я пытаюсь распечатать документ. Кроме того, поскольку функция полагается на уже установленную программу, я не уверен, что этот метод обязательно надежен.
- Я попробовал использовать метод, описанный в эта страница чтобы отправить файл непосредственно на принтер. Этот метод, однако, был слишком ненадежным: результат был идеальным при печати в файл, но всякий раз, когда я пытался отправить файл на физический принтер, он ничего не печатал.
Richard MacCutchan
Вы не можете сделать это так. Вы можете печатать только из приложения, которое может читать и форматировать PDF-файл, например Adobe, Adobe Reader и т. д. А остальные требования зависят от особенностей принтера.