鲍胜忠 发表于 2023-11-9 19:58:46

Office文档转pdf格式(三)

  上面两篇介绍的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 

来源:https://www.cnblogs.com/Artizan/archive/2023/11/09/17821890.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Office文档转pdf格式(三)