更新之前PDF转word遇到的坑 在使用offic系列的转换 在本地测试完全ok,部署到服务器上会出现Could not load file or assembly ‘office, Version=

**更新之前PDF转word遇到的坑 在使用offic系列的转换 在本地测试完全ok,部署到服务器上会出现Could not load file or assembly 'office, Version=15.0.0.0, Culture=neutral,等错误。
发布之后 一定要修改服务器应用的权限,否则是调用不了应用的Word或者wps应用的,(引用其他dll)调用其他应用也类型。
**
在我调试的过程中,发现了一种更好的解决办法,就是使用WPS去进行转换,代码如下:` public class WpsWordToPdf : IDisposable
{

    dynamic wps;
    public WpsWordToPdf()
    {
        Type type = Type.GetTypeFromProgID("KWps.Application");
        wps = Activator.CreateInstance(type);
    }
    /// <summary>
    /// 根据word文件的路径转换为pdf文件,并删除word文件
    /// </summary>
    /// <param name="wordFileName">Wps文件路径</param>
    /// <param name="pdfFileName">Pdf文件路径</param>
    /// <returns></returns>
    public void ToPdf(string wordFileName, string pdfFileName = null)
    {
        if (wordFileName == null)
        {
            throw new ArgumentNullException("wpsFilename");
        }
        if (pdfFileName == null)
        {
            pdfFileName = wordFileName.Replace(".docx", ".pdf");
        }
        dynamic doc = wps.Documents.Open(wordFileName, Visible: false);
        //doc 转pdf 
        doc.ExportAsFixedFormat(pdfFileName, 17);
        doc.Close();
        wps.Quit();
        DeleteFileByPath(wordFileName);
    }
    public void Dispose()
    {
        if (wps != null) { wps.Quit(); }
    }
    /// <summary>
    /// 删除根据路径删除文件
    /// </summary>
    /// <param name="path">文件路径</param>
    public static void DeleteFileByPath(string path)
    {
        FileAttributes attr = File.GetAttributes(path);
        if (attr == FileAttributes.Directory)
        {
            Directory.Delete(path, true);
        }
        else
        {
            File.Delete(path);
        }
    }

}

调用

                //word转pdf,并删除word文件
                WpsWordToPdf wpsWordToPdf = new WpsWordToPdf();
                wpsWordToPdf.ToPdf(reportData.FilePath);

可以全美解决问题
切记修改IIs服务器上的 应用程序池中的自己的应用的标识。下班啦!!!

posted @ 2021-09-27 18:01  doufei  阅读(313)  评论(0编辑  收藏  举报  来源