在不使用 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