2

我正在将 .txt 文件转换为 pdf 并需要向用户显示 pdf。为此,我创建了一个临时 .pdf 文件并创建了一个打开文件的进程。当安装了 adobe acrobat 时,这可以正常工作。当没有默认应用程序时,这将失败。就我而言,pdf 在 Internet Explorer 中打开,我得到No process is associated with this object exception。有没有其他方法可以找出文件何时关闭,以便我以后可以删除它。

我的代码是这样的。

                HtmlToPdf htmlToPdf = new HtmlToPdf(pdfPrintOptions);

                string tmpFileName = "zx" + DateTime.Now.Ticks + "x.pdf";

                //Iron pdf does not handle in-memory pdf viewing
                //convert it to pdf
                htmlToPdf.RenderHTMLFileAsPdf(fileWithPath).SaveAs(tmpFileName);

                // TempFileCollection tmpFileCollection = new TempFileCollection();
                //Use windows process to open the file
                Process pdfViewerProcess = new Process
                {
                    EnableRaisingEvents = true, StartInfo = {FileName = tmpFileName}
                };
                pdfViewerProcess.Start();

                pdfViewerProcess.WaitForExit(); **Failing in this line**
                //Delete temporary file after the viewing windows is closed
                if (File.Exists(tmpFileName))
                {
                    File.Delete(tmpFileName);
                }

类似的问题似乎没有提供解决此问题的方法。任何帮助将不胜感激。谢谢。

4

2 回答 2

2

您必须像这样定义tmpFileNameglobal variable使用EventExited:

try{
 Process myProcess = new Process();
 myProcess.StartInfo.FileName = tmpFileName;
 myProcess.EnableRaisingEvents = true;
 myProcess.Exited += new EventHandler(myProcess_Exited);
 myProcess.Start();
}
catch (Exception ex){
 //Handle ERROR
 return;
}


// Method Handle Exited event. 
private void myProcess_Exited(object sender, System.EventArgs e){
 if (File.Exists(tmpFileName))
    {
       File.Delete(tmpFileName);
    }
}

希望它可以帮助你

更新我的答案:如果它仍然不起作用。试试这个答案

于 2019-12-19T01:55:35.170 回答
-1

我只是将 PDF 文件保存在 TEMP 文件夹中。

在 Windows 用户 TEMP 文件夹中或您的应用程序可以创建一个 TEMP 文件夹。如果您创建一个 TEMP 文件夹,只需在您的应用关闭时删除每个文件。

string filePath = Path.GetTempPath() + "yourfile.pdf"; 

//Writer your file to Path
//File.WriteAllBytes(filePath, content);

Process.Start(filePath);
于 2019-12-19T00:09:18.117 回答