Как можно распечатать документы Office из .NET единообразным способом? - PullRequest
2 голосов
/ 13 октября 2009

Используя объекты Microsoft InterOp, я могу программно распечатать документ Word или Excel.

Существует ли более простой и унифицированный способ программной печати всех типов документов (.txt, .doc, .xls, .pdf и т. Д.)?

1 Ответ

3 голосов
/ 12 ноября 2009

Microsoft использует DDE по умолчанию для печати из офисных продуктов. Перейдите в Инструменты / Параметры папки / Типы файлов, затем найдите .XLS, например, и нажмите «Дополнительно». Вы увидите список действий, одним из которых является «Печать». Внутри этого находится команда DDE, которую Excel использует для печати, а затем закрывает документ, и одна из этих команд существует для каждого продукта в пакете Office. К сожалению, DDE использует API SendMessage, но здесь была библиотека, которая оборачивает эти функции для вас:

http://ndde.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=4828

Это больше не обновления, но все равно следует делать то, что вам нужно, если вам нужен только общий способ печати документов.

Если вы используете Interop и уже открыли экземпляр приложения, просто вызовите соответствующую функцию PrintOut. например для Word это:

object nullobj = Missing.Value;
doc.PrintOut(ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj); 

Очевидно, что и взаимодействие, и DDE далеки от идеальных решений, но Office по-прежнему основан на том же ядре Win32, которое было в 90-х годах.

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

Ура, Джейсон

...