如何利用C#將word檔產生為pdf

    在常見的企業需求中,常常會有將word檔轉換成pdf的要求,而一般來說若採取免費的方案有幾種solution

    1. 利用提供免費API(例如:docx4j),而此種方式有時候要碰碰運氣,若word的格式太過於複雜,轉換的格式經常會跑掉,若遇到中文字有時會變成亂碼

    因為此種方式採用前要先有心裡準備,或是先將要轉的word格式都試過後,都不會跑版才放心採行。

    2.利用呼叫 Microsoft.Office.Interop.Word的原生功能轉檔,此方式來說近乎100%的格式沒有問題,但是執行環境下要安裝Office,若採行免費方案下,此方式則被排除。

    當然綜合以上二點,所以會想到是否又免費的方案,且轉換格式不跑掉的雙贏策略,那就Open Office 呼之欲出:

    本說明採納Open Office的另一實作LibraOffice, 請先下載安裝後,

    利用C# 的Process的方法進行執行Commend Line 產生PDF,程式碼如下:

    /// <summary>

    /// 利用LibraOffice將Doc轉成PDF
    /// </summary>
    /// <param name="openOfficePath">soffice.exe的路徑</param>
    /// <param name="workDir">要被轉換檔案的資料夾位置</param>
    /// <param name="docFileName">要被轉換檔案的名稱</param>
    /// <returns></returns>
    private bool convertDocToPdf(String openOfficePath,String workDir,String docFileName)
    {
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.CreateNoWindow = false;
    startInfo.UseShellExecute = false;
    startInfo.FileName = openOfficePath;
    startInfo.WorkingDirectory = workDir;
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;
    startInfo.Arguments = “–headless –convert-to pdf “+docFileName;

    try
    {
    using (Process exeProcess = Process.Start(startInfo))
    {
    exeProcess.WaitForExit();
    }

    return true;
    }
    catch (Exception ex)
    {
    Console.WriteLine(ex);
    return false;
    }
    }

     

    範例為將在D:\tmp2下的a.doc 在執行後會產生在D:\tmp2\a.pdf

    convertDocToPdf(“C:\\Program Files (x86)\\LibreOffice 5\\program\\soffice.exe", “D:\\tmp2″,"a.doc");