【问题标题】:Converting a doc to a pdf in a mvc c# environment在 mvc c# 环境中将 doc 转换为 pdf
【发布时间】:2017-05-09 14:28:22
【问题描述】:

您好,我有一个在特定用户(app.pool 用户)下运行的 c# MVC 应用程序。 我需要将 doc 或 docx 文件转换为 pdf。

我认为一个不错的选择是使用 libreoffice 来启动一个进程来启动它。

为了让我自己的生活更轻松(如果 libreoffice 不应该工作)我使用了一个批处理文件。

echo on

SET var1=%2

IF "%var1:~-1%"=="\" SET var1=%var1:~0,-1%

cd %var1%

echo %1

echo %var1%

start /wait "" "C:\Program Files (x86)\LibreOffice 4\program\soffice" -headless -convert-to pdf %1 -outdir %var1%

我的启动代码如下。

var ba = @"C:\inetpub\wwwroot\apps\xxxxxxxxx\Services\convert.bat";
                fullPath = @"C:\inetpub\wwwroot\apps\xxxxxxxxx\Files\Temp\636295920370843147.doc";
                var tempPath = @"C:\inetpub\wwwroot\apps\xxxxxxxxx\Files\Temp";

                string command = ba;

                //Process.Start(command, fullPath + " " + tempPath);

                var processInfo = new ProcessStartInfo("cmd.exe", "/c " + command + " "+ fullPath+ " "+ tempPath);
                processInfo.CreateNoWindow = false;
                processInfo.UseShellExecute = false;
                processInfo.RedirectStandardError = true;
                processInfo.RedirectStandardOutput = true;

                var process = Process.Start(processInfo);

                process.OutputDataReceived += (object sender, DataReceivedEventArgs e) =>
                    Trace.WriteLine("output>>" + e.Data);
                process.BeginOutputReadLine();

                process.ErrorDataReceived += (object sender, DataReceivedEventArgs e) =>
                    Trace.WriteLine("error>>" + e.Data);
                process.BeginErrorReadLine();

                process.WaitForExit();

                Trace.WriteLine("ExitCode: {0}", process.ExitCode.ToString());
                process.Close();

这似乎确实可以手动工作,但是当我运行代码时,我可以看到整个事情只是在转换过程中停滞不前。查看线程,它似乎加载了 gdiplus.dll,我认为这是一个看起来不正确的图形模块。

当我将其复制并粘贴到 Windows 中的“运行”框中时,该过程可以正常工作并且制作了 pdf。

我检查了 app.pool 用户是否可以访问 libreoffice 以及包含文件的文件夹。 我以 app.pool 用户身份运行它,在 c# 中它只是停在process.WaitForExit(); 线。直到我终止进程。

有什么想法吗?

我也尝试了许多不同的方式来执行 soffice 转换。直接来自 c# - libreoffice 4,5。

我看到有人将 libreoffice 用作服务,这是一种选择吗?如果有怎么办? 理查德

编辑 啊,刚刚将应用程序池用户更改为我自己,现在它可以工作了,所以标准应用程序池用户存在权限问题。如何找出什么....

【问题讨论】:

    标签: pdf libreoffice iis


    【解决方案1】:

    我将用户添加到计算机上的管理员组并重新启动机器,然后它就可以工作了。

    这可能不是最好的解决方案,但在尝试了 2 天后,我不会争论。

    理查德

    【讨论】:

      猜你喜欢
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-05
      • 2014-12-09
      • 2012-04-14
      相关资源
      最近更新 更多