Создание PDF-файлов из .NET с использованием стандартных классов печати .NET GDI

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

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

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

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

Ответы на вопрос(9)

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

Смотрите Amyuni.com

Райан

 Philippe Leybaert10 июл. 2009 г., 16:20
Я проверил их документацию, и мне кажется, что они используют собственный API для генерации документов PDF вместо стандартных методов рисования GDI, используемых при стандартной печати .NET. Как указано в моем вопросе, это не то, что я хочу.
 11 июл. 2009 г., 21:16
Моя ошибка, я пропустил GDI часть вашего вопроса.

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

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

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

Решение Вопроса

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

BullZIP PDF Printer PDFCamp PDFCreator (using a COM interface?)

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

UPDATEНашел еще один, который выглядит очень многообещающе

LEADTools ePrint Professional

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

 Philippe Leybaert10 июл. 2009 г., 16:20
AFAIK, iTextSharp использует собственный API для генерации документов PDF вместо стандартных методов рисования GDI, используемых при стандартной печати .NET. Как указано в моем вопросе, это не то, что я хочу

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

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

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

 Philippe Leybaert10 июл. 2009 г., 16:22
Несколько лет назад я прочитал кое-что о встраивании специальных контрольных кодов в печатный документ, которые Adobe Acrobat (Distiller) распознал, чтобы задать имя файла PDF-файла для генерации.

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

Dane-Prairie Systemshttp://www.win2pdf.com/ кажется, что захватывает «печать в файл» строка из вызовов GDI и создаст ваш PDF, где бы вы ни были.  Вот цитата из руководства:

Set the lpszOutput field of the DOCINFO structure to the fully qualified path name of the file, and then pass the DOCINFO structure to the Win32 StartDoc function.

Питер

Ваш ответ на вопрос