Преобразование файла слов (.docx & doc) в .pdf с помощью С# не работает
Я использую visualstudio 2010, и я пытаюсь преобразовать файл word.docx в файл .pdf и отлично работает в локальном, но во время выполнения на сервере он показывает ошибку как
Could not load file or assembly 'office, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' or one of its dependencies. The system cannot find the file specified.
То, что я пробовал, добавлено ссылкой и помещено в папку bin
Microsoft.Office.Interop.Word.dll
Microsoft.Office.Interop.Word.xml
как показано на рисунке
![enter image description here]()
мой код .cs равен
Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();
wordApp.Visible = false;
// file from
object filename =Server.MapPath("word.docx"); // input
// file to
object newFileName = Server.MapPath("pdf/document_to_read_tomorrow.pdf"); // output
object missing = System.Type.Missing;
// open document
Microsoft.Office.Interop.Word.Document doc = wordApp.Documents.Open(ref filename, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing);
// formt to save the file, this case PDF
object formatoArquivo = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF;
// changes in paper size
doc.PageSetup.PaperSize = Microsoft.Office.Interop.Word.WdPaperSize.wdPaperA4;
// changes orietation paper
doc.PageSetup.Orientation = Microsoft.Office.Interop.Word.WdOrientation.wdOrientPortrait;
// other changes
doc.PageSetup.LeftMargin = 20;
doc.PageSetup.RightMargin = 0;
// save file
doc.SaveAs(ref newFileName, ref formatoArquivo, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
doc.Close(ref missing, ref missing, ref missing);
wordApp.Quit(ref missing, ref missing, ref missing);
Мой WebConfig выглядит как
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="xyz" connectionString="Data Source=xyz;Initial Catalog=xyz;Persist Security Info=True;User ID=xyz;Password=xyz" providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<httpHandlers>
<add verb="GET" path="CaptchaImage.axd" type="MSCaptcha.CaptchaImageHandler, MSCaptcha"/>
<add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/>
</httpHandlers>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="Microsoft.ReportViewer.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="Microsoft.Office.Interop.Word, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"/></assemblies>
<buildProviders>
<add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</buildProviders>
</compilation>
<customErrors mode="Off">
</customErrors>
<sessionState timeout="720">
</sessionState>
<pages enableViewStateMac="false"/>
</system.web>
<system.webServer>
<defaultDocument>
<files>
<clear/>
<add value="default.aspx"/>
</files>
</defaultDocument>
<validation validateIntegratedModeConfiguration="false"/>
<handlers>
<add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</handlers>
</system.webServer>
</configuration>
Ответы
Ответ 1
Не рекомендуется использовать взаимодействие Office в среде сервера из-за утечек памяти и проблем с производительностью. Вам нужно будет найти управляемое решение для преобразования PDF в слово на сервере, а не установку офисного пакета и сборок. Есть несколько управляемых компонентов, которые могут выполнить эту работу, но они не являются бесплатными.
http://www.aspose.com/.net/pdf-component.aspx
http://www.websupergoo.com/wordglue-1.htm
Ответ 2
Я давно искал решение этих проблем, и в конце концов мне пришлось использовать третью сторону. Я предлагаю вам использовать третью сторону, такую как Aspose
Aspose.Total для .NET
Aspose.Words для .NET - это расширенная библиотека классов для .NET, которая позволяет выполнять широкий спектр задач обработки документов непосредственно в ваших приложениях .NET.
С помощью Aspose.Words вы можете создавать, изменять, конвертировать, рендерить и распечатывать документы без использования Microsoft Word.
Aspose.Words для .NET поддерживает DOC, OOXML, RTF, HTML, OpenDocument, PDF, XPS, EPUB и многих других форматах.
Этот компонент отлично работает для меня и очень прост в использовании.
это пример преобразования слова в pdf-код:
Document doc = new Document(getMyDir() + "Document.doc");
doc.save(getMyDir() + "Document.Doc2PdfSave Out.pdf");
Ответ 3
Вам нужно будет установить библиотеку "office.dll" в глобальном кэше сборок на сервере, чтобы сделать эту работу. Проверьте папку C:\Windows\assembly, и там вы найдете office.dll.
EDIT:
Кажется, что это будет не так просто, как кажется. Некоторые разработчики упоминают здесь, что Office должен быть установлен на сервере или вам потребуется установить еще больше библиотек вручную.