Carlo Piras Ответов: 1

Как я могу печатать качественно ?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 и т. д. А остальные требования зависят от особенностей принтера.

1 Ответов

Рейтинг:
5

Richard MacCutchan

Вы не можете распечатать PDF-файл без какого-либо вспомогательного приложения, которое может читать и форматировать содержимое, например Acrobat Reader, Foxit и т. д. Или вы можете написать свой собственный, используя iTextSharp или аналогичную библиотеку поддержки. А остальные требования к функциям печати зависят от типа принтера, установленного на сайте пользователя.


Carlo Piras

Использование iTextSharp для преобразования файла. pdf на самом деле было моей первой идеей, но все изображения, сгенерированные им, были слишком низкого качества: вот почему мне пришлось искать другое решение.

[no name]

Может быть, это вам поможет: https://code.msdn.microsoft.com/Print-PDF-file-in-C-5b6e66b7

Richard MacCutchan

Пожалуйста, сделайте ваши ссылки кликабельными.

Carlo Piras

Как я уже упоминал в списке реквизитов, я не могу использовать лицензионные или платные библиотеки DLL для этого проекта: если бы не это, я бы легко согласился, что Spire был бы идеальным.

Richard MacCutchan

Тогда вы сами справитесь с этим проектом.

Carlo Piras

В конце концов мне удалось найти способ сделать лучшие изображения с помощью iTextSharp, этого было достаточно, чтобы решить проблему. Все равно спасибо!

Member 12096527

Привет, как вы в конечном итоге использовали iTextSharp для печати Pdf-файла? В настоящее время я пытаюсь распечатать pdf-файл, который существует на моем компьютере, и я хочу иметь возможность установить настройки печати, не открывая ридер.