Как и чем программно конвертировать Word в PDF. Конечно, независимость от нативных библиотек приветствуется.
Спасибо.
Здравствуйте, Аноним, Вы писали:
А>Как и чем программно конвертировать Word в PDF. Конечно, независимость от нативных библиотек приветствуется.
А>Спасибо.
например с помощью самого Word 2007+
пример —
http://social.msdn.microsoft.com/Forums/en/innovateonoffice/thread/ceecbdd9-b331-47f5-b2b3-43766902ac55
А>>Спасибо.
ZN>например с помощью самого Word 2007+
ZN>пример — http://social.msdn.microsoft.com/Forums/en/innovateonoffice/thread/ceecbdd9-b331-47f5-b2b3-43766902ac55
Насколько я понимаю, здесь нужно использовать интероп на библиотеку Word. Я с инероп не так знаком, можно ли динамически runtime как то проверять, установлен ли ворд или без ворда и существующей ссылки на COM запуск приложения не возможен.
Если не смущает требование иметь установленный MS Office 2007 или 2010,
то есть
такой прием — описано как при помощи Word (библиотека AWordReport) генерировать отчеты в разных форматах, в т.ч.в PDF.
У Вас будет примерно такой код:
aWordReport1.LoadFromFile(@"Ваш .DOC или .DOCX файл"); //Загружаем Ваш файл в Word
//aWordReport1.Render(); //Render document - закомментили, т.к. не надо менять содержимое файла
//Сохраняем в .PDF:
object filename = @"c:\test.pdf";//Куда сохранять
object format = 17;//PDF
object missing = System.Reflection.Missing.Value;
object vFalse = false;
object vTrue = true;
aWordReport1.WordDocument.SaveAs(ref filename, ref format, ref missing, ref missing, ref vFalse, ref missing, ref missing, ref missing, ref missing, ref vTrue, ref missing); //Сохраняем .PDF
В грядущей версии AWordReport код более читабельный:
aWordReport1.LoadFromFile(@"Ваш .DOC или .DOCX файл"); //Загружаем Ваш файл в Word
//aWordReport1.Render(); //Render document - закомментили, т.к. не надо менять содержимое файла
aWordReport1.SaveToFile(@"c:\test.pdf", wffPDF); //Сохраняем .PDF
Можно также реализовать этот подход самостоятельно без сторонних библиотек просто через COM Interop..
Здравствуйте, Аноним, Вы писали:
А>>>Спасибо.
ZN>>например с помощью самого Word 2007+
ZN>>пример — http://social.msdn.microsoft.com/Forums/en/innovateonoffice/thread/ceecbdd9-b331-47f5-b2b3-43766902ac55
А>Насколько я понимаю, здесь нужно использовать интероп на библиотеку Word. Я с инероп не так знаком, можно ли динамически runtime как то проверять, установлен ли ворд или без ворда и существующей ссылки на COM запуск приложения не возможен.
Если необходимая библиотека отсутвует будет генериться исключение, путем его обработки можно выявить отсутствие требуемого компонента.
ZN>например с помощью самого Word 2007+
ZN>пример — http://social.msdn.microsoft.com/Forums/en/innovateonoffice/thread/ceecbdd9-b331-47f5-b2b3-43766902ac55
Только что с шефом обсудил. 2007+ неприемлемое ограничение. Нужны рание версии. Хотя бы 2003
Здравствуйте, <Аноним>, Вы писали:
А>Как и чем программно конвертировать Word в PDF. Конечно, независимость от нативных библиотек приветствуется.
Посмотрите тему:
Серверных разбор офисных документовАвтор: rsn81
Дата: 23.11.10
.
Привет всем еще раз. Решил использовать пока (вероятно на первых этапах) MS Office, как это описано здесь:
http://social.msdn.microsoft.com/Forums/en/innovateonoffice/thread/ceecbdd9-b331-47f5-b2b3-43766902ac55
Теперь мне нежно добиться стабильного поведения в тех случаях, если нет подходящей версии или вовсе нет офиса.
Попробовал запустить на машине 2003 офисом.
Код доходит до "// Export it in the specified format.", т.е. документ окрывается, но на коневертации падает. Причем показывается системное сообщение "программа выполнила недопустимую операцию", а не окно из блока cath (System.Windows.Forms.MessageBox.Show(ex.Message)
![](/Forum/Images/wink.gif)
. Т.е. блок catch не выполняется.
После этого приложение закрывается, и код блока finally остается не выполенным. Word остается висеть в процессах
После повторного запуска, показывается Word, ругается, что файл используется.
Мне нужно добиться, что бы в подобных случаях ничего не оставалось висеть в процессах, ворд не показывался, а ошибка бы нормально отлавливалась.
Как можно сие исполнить?
Пробовал подгружать сборку в отдельный AppDomain,
wordDomain = AppDomain.CreateDomain("WordDomain");
Microsoft.Office.Interop.Word.Application wordApp;
Type worAddType = typeof(Microsoft.Office.Interop.Word.Application);
wordDomain = AppDomain.CreateDomain ("X");
Object obj = wordDomain.CreateInstanceFromAndUnwrap(worAddType.Assembly.Location, "Microsoft.Office.Interop.Word.Application" );
wordApp = ...
Но не получается создать инстанцию для Application, ведь это интерфейс, а ApplicationClass чего-то не создается, хоть обычным спосом (new), хоть через CreateInstanceFrom.
Что делать?