在不使用 Office 自动化的情况下将办公文档转换为 PDF 的开源解决方案 [关闭]

Posted

技术标签:

【中文标题】在不使用 Office 自动化的情况下将办公文档转换为 PDF 的开源解决方案 [关闭]【英文标题】:Open source solution to convert office documents to PDF without using Office automation [closed] 【发布时间】:2013-03-07 10:34:59 【问题描述】:

我可以在 ASP.Net 应用程序中使用任何开源 sdk 将任何办公文档转换为 pdf。 (我特别需要将 DOCX 转换为 PDF,但也希望能够转换 Excel 和 powerpoint 文件)。

我知道我可以使用下面显示的代码使用 Office 自动化,但我不想使用 Office 自动化,因为不建议在非交互式应用程序中使用它KB257757

我发现Aspose 有一个可用于此的组件(付费解决方案),但我想知道是否有任何开源解决方案。

//reference: Microsoft.Office.Interop.Word.dll
//using Word = Microsoft.Office.Interop.Word;
public static void Convert(string documentFilePath, string outputPath)
    
        var ap = new Word.Application Visible = false;

        var document = ap.Documents.Open(documentFilePath);

        document.ExportAsFixedFormat(outputPath,
                       WdExportFormat.wdExportFormatPDF,
                       OptimizeFor: WdExportOptimizeFor.wdExportOptimizeForPrint,
                       BitmapMissingFonts: true, DocStructureTags: false);

        document.Close();
    

注意:我看到有人建议为此使用 OpenXML。但是 OpenXML 没有为您提供任何将 Office 文档转换为 PDF 文档的方法。

【问题讨论】:

Aspose 还提供免费或非常便宜的 SaaSpose,具体取决于您的要求。 DAI - 我正在寻找开源解决方案。但是感谢那个链接,不知道 Aspose 有 SAAS 产品 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。 您看过 LibreOffice 吗?显然,任何第三方工具的转换质量都不会像 Microsoft Office 那样高,但 LibreOffice 中的 docx 格式的输入转换器已经相当不错了。 【参考方案1】:

您可以在 apache 2.0 下使用 libreOffice 是免费许可的,我做了一个将 docx 转换为 ppt 的示例,它工作得很好,您可以转换为多种类型,例如 pdf

这里是我的例子:

    static string getLibreOfficePath()
    
        switch (Environment.OSVersion.Platform)
        
            case PlatformID.Unix:
                return "/usr/bin/soffice";
            case PlatformID.Win32NT:
                string binaryDirectory = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
                //return binaryDirectory + "\\Windows\\program\\soffice.exe";
                return @"C:\Program Files\LibreOffice\program\soffice.exe";
            default:
                throw new PlatformNotSupportedException("Your OS is not supported");
        
    

    static void Main(string[] args)
    
        string libreOfficePath = getLibreOfficePath();
        //to convert docx to pdf just change input file to docx
        ProcessStartInfo procStartInfo = new ProcessStartInfo(libreOfficePath, 
        string.Format("--convert-to pdf  C:\\test.ppt"));
        procStartInfo.RedirectStandardOutput = true;
        procStartInfo.UseShellExecute = false;
        procStartInfo.CreateNoWindow = true;
        procStartInfo.WorkingDirectory = Environment.CurrentDirectory;

        Process process = new Process()  StartInfo = procStartInfo, ;
        process.Start();
        process.WaitForExit();

        // Check for failed exit code.
        if (process.ExitCode != 0)
        
            throw new LibreOfficeFailedException(process.ExitCode);
        
    

谢谢,希望对你有帮助。

【讨论】:

【参考方案2】:

看看JODConverter。这是免费和开源的,可以很好地完成 Doc->PDF,DocX 取决于您的文档。您可能想查看 ODFOverter 以获得出色的 DocX->ODT 路径,然后 JODConverter 可以执行 ODT->PDF 部分。

【讨论】:

【参考方案3】:

虽然它是一个库,但您可以将 NPoi 和 iTextSharp 库组合在一起来完成您的任务。两者都是其流行且强大的 Java 同类产品的 .Net 端口。

【讨论】:

虽然 iTextSharp 是一个开源解决方案,但它在 AGPL 下获得许可。在 Raj 的案例中,很可能需要为 iTextSharp 购买商业许可证。

以上是关于在不使用 Office 自动化的情况下将办公文档转换为 PDF 的开源解决方案 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用库的情况下将默认名称“选择文件”更改为“选择文档”? [复制]

在不安装 Ghostscript 的情况下将 PDF 文档转换为 PHP 中的预览图像

如何在不删除旧文档的情况下将 XMLDocument 附加到 LocalStorage

C# - 将 xls 文件转换为不带 office 组件的 xlsx

在不使用 Dataproc 的情况下将 GCP 与 PySpark 连接

如何在不将数据输入自动编号列的情况下将数据插入 MS Access 表?