翼度科技»论坛 编程开发 .net 查看内容

Office文档转pdf格式(三)

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
  上面两篇介绍的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整个目录拷到转换项目的运行目录下),示例代码如下:
  1. public partial class Form1 : Form
  2.     {
  3.         public Form1()
  4.         {
  5.             InitializeComponent();
  6.         }
  7.         private void btnSearch_Click(object sender, EventArgs e)
  8.         {
  9.             OpenFileDialog dialog = new OpenFileDialog();
  10.             dialog.Filter = "文档|*.doc;*.docx;*.xls;*.xlsx;*.ppt;*.pptx;";
  11.             if (dialog.ShowDialog() == DialogResult.OK)
  12.             {
  13.                 txtFilePath.Text = dialog.FileName;
  14.             }
  15.         }
  16.         private void btnConvert_Click(object sender, EventArgs e)
  17.         {
  18.             string sourceFileFullName = txtFilePath.Text.Trim();
  19.             if (string.IsNullOrEmpty(sourceFileFullName))
  20.             {
  21.                 MessageBox.Show("请先选择要转换的文件!");
  22.                 return;
  23.             }
  24.             FolderBrowserDialog dialog = new FolderBrowserDialog();
  25.             dialog.Description = "选择一个目录";
  26.             dialog.SelectedPath = Path.GetDirectoryName(sourceFileFullName);
  27.             if (dialog.ShowDialog() == DialogResult.OK)
  28.             {
  29.                 string targetFilePath = dialog.SelectedPath;
  30.                 try
  31.                 {
  32.                     string libreOfficePath = GetLibreOfficePath();
  33.                     ProcessStartInfo procStartInfo = new ProcessStartInfo(libreOfficePath, string.Format("--convert-to pdf --nologo {0} --outdir {1}", sourceFileFullName, targetFilePath));
  34.                     procStartInfo.RedirectStandardOutput = true;
  35.                     procStartInfo.UseShellExecute = false;
  36.                     procStartInfo.CreateNoWindow = true;
  37.                     procStartInfo.WorkingDirectory = Environment.CurrentDirectory;
  38.                     //开启线程
  39.                     Process process = new Process() { StartInfo = procStartInfo, };
  40.                     process.Start();
  41.                     process.WaitForExit();
  42.                     if (process.ExitCode != 0)
  43.                     {
  44.                         throw new LibreOfficeFailedException(process.ExitCode);
  45.                     }
  46.                     MessageBox.Show("转换成功!");
  47.                 }
  48.                 catch(Exception ex)
  49.                 {
  50.                     MessageBox.Show("转换失败!");
  51.                 }
  52.             }            
  53.         }
  54.         private string GetLibreOfficePath()
  55.         {
  56.             switch (Environment.OSVersion.Platform)
  57.             {
  58.                 case PlatformID.Unix:
  59.                     return "/usr/bin/soffice";
  60.                 case PlatformID.Win32NT:
  61.                     string binaryDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
  62.                     return binaryDirectory + "\\LibreOffice\\program\\soffice.exe";
  63.                 default:
  64.                     throw new PlatformNotSupportedException("你的系统暂不支持!");
  65.             }
  66.         }
  67.     }
  68.     public class LibreOfficeFailedException : Exception
  69.     {
  70.         public LibreOfficeFailedException(int exitCode)
  71.             : base(string.Format("LibreOffice错误 {0}", exitCode))
  72.         { }
  73.     }
复制代码
View Code 

来源:https://www.cnblogs.com/Artizan/archive/2023/11/09/17821890.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具