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]