目錄 Welcome to YARP - 1.認識YARP並搭建反向代理服務 Welcome to YARP - 2.配置功能 2.1 - 配置文件(Configuration Files) 2.2 - 配置提供者(Configuration Providers) 2.3 - 配置過濾器(Confi ...
上面兩篇介紹的Office文檔轉pdf格式的方式都只能在Windows系統下使用,存在一定的局限性,本文介紹一個在Windows和Linux下都可以使用的,而且是開源且免費的軟體:LibreOffice,下載地址為:https://www.libreoffice.org/download/download-libreoffice/,使用這個軟體,可以通過命令或者代碼的方式來實現將Office文檔轉為pdf格式。具體方法如下:
1. 前提條件
安裝LibreOffice軟體,選擇Windows(64位),點擊下載,然後進行安裝。
2. 通過命令方式轉換
打開cmd命令行視窗,切換到目錄C:\Program Files\LibreOffice\program\下麵(或者可將其添加到環境變數中),輸入命令:
soffice.exe --convert-to pdf --nologo 源文件全路徑 --outdir 目標目錄
3. 通過代碼方式轉換
實際上就是用代碼的方式來運行LibreOffice,並執行轉換命令(需要將C:\Program Files\LibreOffice整個目錄拷到轉換項目的運行目錄下),示例代碼如下:
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnSearch_Click(object sender, EventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "文檔|*.doc;*.docx;*.xls;*.xlsx;*.ppt;*.pptx;"; if (dialog.ShowDialog() == DialogResult.OK) { txtFilePath.Text = dialog.FileName; } } private void btnConvert_Click(object sender, EventArgs e) { string sourceFileFullName = txtFilePath.Text.Trim(); if (string.IsNullOrEmpty(sourceFileFullName)) { MessageBox.Show("請先選擇要轉換的文件!"); return; } FolderBrowserDialog dialog = new FolderBrowserDialog(); dialog.Description = "選擇一個目錄"; dialog.SelectedPath = Path.GetDirectoryName(sourceFileFullName); if (dialog.ShowDialog() == DialogResult.OK) { string targetFilePath = dialog.SelectedPath; try { string libreOfficePath = GetLibreOfficePath(); ProcessStartInfo procStartInfo = new ProcessStartInfo(libreOfficePath, string.Format("--convert-to pdf --nologo {0} --outdir {1}", sourceFileFullName, targetFilePath)); procStartInfo.RedirectStandardOutput = true; procStartInfo.UseShellExecute = false; procStartInfo.CreateNoWindow = true; procStartInfo.WorkingDirectory = Environment.CurrentDirectory; //開啟線程 Process process = new Process() { StartInfo = procStartInfo, }; process.Start(); process.WaitForExit(); if (process.ExitCode != 0) { throw new LibreOfficeFailedException(process.ExitCode); } MessageBox.Show("轉換成功!"); } catch(Exception ex) { MessageBox.Show("轉換失敗!"); } } } private string GetLibreOfficePath() { switch (Environment.OSVersion.Platform) { case PlatformID.Unix: return "/usr/bin/soffice"; case PlatformID.Win32NT: string binaryDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); return binaryDirectory + "\\LibreOffice\\program\\soffice.exe"; default: throw new PlatformNotSupportedException("你的系統暫不支持!"); } } } public class LibreOfficeFailedException : Exception { public LibreOfficeFailedException(int exitCode) : base(string.Format("LibreOffice錯誤 {0}", exitCode)) { } }View Code