Офисные документы в PDF - PullRequest
7 голосов
/ 05 октября 2011

Я видел пару веток по этому поводу, но не получаю очень прямых ответов в моих поисках.У меня есть веб-приложение, которое должно принимать файлы doc, docx, xls, xlsx и конвертировать их в PDF.Прямо сейчас у нас есть процесс, который использует библиотеку Microsoft.Office.Interop.Word, которая открывает документ, печатает его в файл PS, затем GPL GhostScript преобразует файл PS в PDF.

Этот процесс работаетХорошо, но в целом есть несколько шагов, и это было первоначально разработано несколько лет назад, когда было еще труднее найти драйвер для печати PDF и настроить его.В духе обновления я пытаюсь найти лучший способ справиться с этим.Основная причина в том, что в нашем приложении мы используем вызов веб-службы для выполнения повышенных операций процесса преобразования, с более новым сервером Windows и, в частности, для Windows 7 для разработки, возможность открытия файла даже с олицетворением вызывает некоторые проблемыс библиотекой Interop.

Все это, я уверен, можно выяснить и сгладить, но мне было интересно, есть ли более новый и лучший способ сделать это.Я посмотрел в PDF995, но не могу найти отличный способ программно войти и распечатать файл непосредственно в PDF.Код, который они предоставляют, находится на C ++, и я не нахожу, как имитировать вызовы в C #.

Ответы [ 3 ]

7 голосов
/ 05 октября 2011

Если вы ищете «бесплатное» решение, я думаю, что у вас может быть единственно возможный вариант, но, как сказал Джон, взаимодействие на стороне сервера, как правило, не очень хорошая идея. Мы использовали компоненты .NET Aspose с большим успехом. Это чисто управляемое решение, не требующее взаимодействия или офиса.

4 голосов
/ 05 октября 2011

РЕДАКТИРОВАТЬ: В свете этой статьи, предоставленной Джоном Сондерсом, Соображения относительно автоматизации Office на стороне сервера , приведенный ниже код не следует использовать для целей разработки на стороне сервера.

Вот код для преобразования Docx в PDF с использованием Interop.Надеюсь, вы сможете выяснить, как сделать другие документы, используя это в качестве отправной точки.

private void DocxToPdf(String sourcePath, String destPath) {

        //Change the path of the .docx file and filename to your file name.

        object paramSourceDocPath = sourcePath;
        object paramMissing = Type.Missing;
        var wordApplication = new Microsoft.Office.Interop.Word.Application();
        Document wordDocument = null;

        //Change the path of the .pdf file and filename to your file name.

        string paramExportFilePath = destPath;
        WdExportFormat paramExportFormat = WdExportFormat.wdExportFormatPDF;
        bool paramOpenAfterExport = false;
        WdExportOptimizeFor paramExportOptimizeFor =
            WdExportOptimizeFor.wdExportOptimizeForPrint;
        WdExportRange paramExportRange = WdExportRange.wdExportAllDocument;
        int paramStartPage = 0;
        int paramEndPage = 0;
        WdExportItem paramExportItem = WdExportItem.wdExportDocumentContent;
        bool paramIncludeDocProps = true;
        bool paramKeepIRM = true;
        WdExportCreateBookmarks paramCreateBookmarks =
            WdExportCreateBookmarks.wdExportCreateWordBookmarks;
        bool paramDocStructureTags = true;
        bool paramBitmapMissingFonts = true;
        bool paramUseISO19005_1 = false;

        try {
            // Open the source document.
            wordDocument = wordApplication.Documents.Open(
                ref paramSourceDocPath, ref paramMissing, ref paramMissing,
                ref paramMissing, ref paramMissing, ref paramMissing,
                ref paramMissing, ref paramMissing, ref paramMissing,
                ref paramMissing, ref paramMissing, ref paramMissing,
                ref paramMissing, ref paramMissing, ref paramMissing,
                ref paramMissing);

            // Export it in the specified format.
            if (wordDocument != null)
                wordDocument.ExportAsFixedFormat(paramExportFilePath,
                    paramExportFormat, paramOpenAfterExport,
                    paramExportOptimizeFor, paramExportRange, paramStartPage,
                    paramEndPage, paramExportItem, paramIncludeDocProps,
                    paramKeepIRM, paramCreateBookmarks, paramDocStructureTags,
                    paramBitmapMissingFonts, paramUseISO19005_1,
                    ref paramMissing);
        }
        catch (Exception ex) {
            // Respond to the error
            System.Windows.Forms.MessageBox.Show(ex.Message);
        }
        finally {
            // Close and release the Document object.
            if (wordDocument != null) {
                wordDocument.Close(ref paramMissing, ref paramMissing,
                    ref paramMissing);
                wordDocument = null;
            }

            // Quit Word and release the ApplicationClass object.
            if (wordApplication != null) {
                wordApplication.Quit(ref paramMissing, ref paramMissing,
                    ref paramMissing);
                wordApplication = null;
            }

            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
            GC.WaitForPendingFinalizers();
        }
    }
2 голосов
/ 18 ноября 2015

Syncfusion Essential PDF может использоваться для преобразования офисных документов в PDF.Библиотеку можно использовать из Windows Forms, WPF, ASP.NET Webforms, приложений ASP.NET MVC

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

Примечание. Я работаю в Syncfusion.

...