Создание PDF-файлов из .NET с использованием стандартных классов печати .NET GDI - PullRequest
4 голосов
/ 10 июля 2009

Я ищу способ создания PDF-файлов с использованием стандартных классов PrintDocument и Graphics (GDI) в .NET. Насколько я знаю, единственный способ сделать это - распечатать на принтере PDF.

Проблема в том, что драйвер принтера PDF всегда запрашивает имя файла, но мне нужно контролировать имя файла из моего кода. Использование библиотеки PDF, такой как PDFSharp или DynamicPDF, не вариант, поскольку все они предоставляют собственный API для создания файлов PDF.

Мне это нужно для внутреннего приложения, поэтому зависимости не являются проблемой.

Мой вопрос прост: есть ли способ управления драйвером принтера (Adobe Acrobat, PDFCreator, ...) таким образом, чтобы можно было указать имя файла и пользователю ничего не предлагалось?

Ответы [ 9 ]

4 голосов
/ 10 мая 2010

Код System.Drawing для PrintDocument можно повторно использовать для создания PDF-файла с ABCpdf.NET из webSupergoo. См. System.Drawing пример для более подробной информации. Компонент не использует драйвер принтера - он создает PDF-файл напрямую, поэтому не требует указания имени файла.

2 голосов
/ 10 июля 2009

Продукт под названием Amyuni делает это (я использую его в проекте), но мне не нравится лицензирование, вы можете хорошо с ним справиться.

См. Amyuni.com

Ryan

1 голос
/ 06 января 2011

Amyuni PDF Converter делает то, что вам нужно, он предоставляет сертифицированный Microsoft драйвер принтера, которым вы можете полностью манипулировать, используя интерфейс COM или сборку .net, и вы можете использовать стандартные GDI (или классы Windows.Forms). ) для создания ваших файлов PDF (вы, вероятно, проверили Amyuni PDF Creator, который является пользовательским API, как вы указали в своих комментариях к этому ответу ).

0 голосов
/ 06 марта 2015

Компонент C1Pdf делает это. Он имеет методы, которые имитируют GDI plus (DrawString, DrawImage и т. Д.) И генерируют PDF-файлы. Он не устанавливает и не требует никаких драйверов принтера. Вот ссылка на документацию, если вы хотите получить более подробную информацию:

http://www.componentone.com/newimages/Products/Documentation/WinForms.PDF.pdf

0 голосов
/ 07 декабря 2010

Dane-Prairie Systems http://www.win2pdf.com/, кажется, захватывает строку "print to file" из вызовов GDI и создает ваш PDF-файл, где бы вы ни были. Вот цитата из руководства:

Установите поле lpszOutput DOCINFO структура в полной мере полное имя файла и затем передать структуру DOCINFO Win32 StartDoc функция.

Peter

0 голосов
/ 10 июля 2009

Провел еще несколько исследований, и хотя я все еще не нашел идеального решения, есть несколько продуктов, которые устанавливают драйвер принтера PDF и позволяют вам каким-то образом контролировать имя файла, который будет сгенерирован:

Bullzip и PDFCreator бесплатны.

ОБНОВЛЕНИЕ : Найден еще один, который выглядит очень многообещающе:

0 голосов
/ 10 июля 2009

Есть несколько компаний, которые создают инструменты для преобразования формата документов. Некоторые из них используют драйверы принтера для «печати» документа в желаемом формате. Посмотрите на инструменты, которые могут конвертировать из документов Word в PDF. Один из них должен иметь нужный вам тип драйвера, а некоторые предложат API, который позволяет вам контролировать имена файлов и тому подобное.

0 голосов
/ 10 июля 2009

Не уверен, что это решение, которое вы бы рассмотрели, но я использовал iTextSharp , чтобы заполнить PDF-формы и сохранить их с именем файла, созданным в коде, а не пользователем. Он также может создавать полные PDF-файлы с нуля, но я не углубился в это.

0 голосов
/ 10 июля 2009

Если драйверы принтера, которые вы используете, не поддерживают это вручную (из которых я не знаю ни одного существующего), вам придется написать свой собственный драйвер принтера, в который вы сможете передавать информацию (например, имя файла) во время операция печати. ​​

Недостатками этого является тот факт, что вам придется реализовать драйвер принтера, а также тот факт, что это должен быть неуправляемый код (вы не можете писать драйверы в .NET).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...