在 mvc c# 环境中将文档转换为 pdf

Converting a doc to a pdf in a mvc c# environment

您好,我在特定用户(app.pool 用户)下有一个 c# MVC 应用程序 运行ning。 我需要将 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\Temp6295920370843147.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 中的 'run' 框中时,该过程运行良好,并且制作了 pdf。

我检查过 app.pool 用户可以访问 libreoffice 以及包含文件的文件夹。 我有 运行 作为 app.pool 用户,在 c# 中它只是停在 process.WaitForExit(); 线。直到我杀掉进程。

有什么想法吗?

我还尝试了许多 种不同的方式来执行办公室转换。直接来自 c# - libreoffice 4,5。

我看到有些人使用 libreoffice 作为服务,这是一个选项吗?如果是这样怎么办? 理查德

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

我把用户加到电脑的administrators组,重启机器,就可以了。

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

理查德