8

これについていくつかのスレッドを見てきましたが、私の検索ではあまりストレートな答えが得られません。doc、docx、xls、xlsx ファイルを取り込んで PDF に変換する必要がある Web アプリケーションがあります。現在、Microsoft.Office.Interop.Word ライブラリを使用してドキュメントを開き、それを PS ファイルに出力し、GPL GhostScript が PS ファイルを PDF に変換するプロセスがあります。

このプロセスは問題なく機能しますが、全体的にいくつかのステップがあり、これはもともと数年前に開発されたもので、PDF 印刷ドライバーを見つけてインターフェイスするのがさらに困難でした. 更新の精神で、これを処理するためのより良い方法を見つけようとしています。主な理由は、私たちのアプリケーションでは、Web サービス呼び出しを使用して変換プロセスの高度な操作を実行することです。新しい Windows サーバー、特に開発用の Window 7 では、偽装でもファイルを開く機能がいくつかの問題を引き起こしています。相互運用ライブラリを使用します。

これらすべてを理解して解決できると確信していますが、これを行うためのより新しく、より良い方法があるかどうか疑問に思っていました. 私は PDF995 を調べましたが、プログラムを使用してファイルを直接 PDF に出力する優れた方法が見つかりません。彼らが提供するコードは C++ であり、C# で呼び出しを模倣する方法がわかりません。

4

3 に答える 3

7

「無料」のソリューションを探しているなら、実行可能な唯一の選択肢があると思いますが、ジョンが言ったように、サーバー側の相互運用は通常は良い考えではありません. 私たちは .NET Asposeコンポーネントを使用して多くの成功を収めてきました。これは、相互運用性やオフィスを必要としない純粋なマネージド ソリューションです。

于 2011-10-05T17:24:18.770 に答える
4

編集: John Saunders によって提供されたこの記事に照らして、サーバー側の Office の自動化に関する考慮事項 、以下のコードはサーバー側の開発目的には使用しないでください。

Interop を使用して Docx を PDF に変換するコードを次に示します。これを出発点として使用して、他のドキュメントを作成する方法を理解していただければ幸いです。

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();
        }
    }
于 2011-10-05T17:23:52.620 に答える
2

Syncfusion Essential PDFを使用して、オフィス文書を PDF に変換できます。このライブラリは、Windows フォーム、WPF、ASP.NET Web フォーム、ASP.NET MVC アプリケーションから使用できます。

条件を満たしている場合は、コミュニティ ライセンスプログラムを通じて、コントロールのスイート全体を無料で (商用アプリケーションも) 利用できます。コミュニティ ライセンスは、制限や透かしのない完全な製品です。

注: 私は Syncfusion で働いています。

于 2015-11-18T14:54:19.147 に答える