1

我正在使用 webbrowsercontrol 来显示本地存储的 .pdf。在按下按钮时,我希望网络浏览器显示一个空页面/什么都没有,并且我想将 .pdf 移动到另一个文件夹。首先,我在移动之前尝试导航到“”,但我的 .pdf 被另一个进程使用。谷歌告诉我,我可能需要清除浏览器的缓存才能移动它。我使用此处找到的代码这样做了:http: //www.gutgames.com/post/Clearing-the-Cache-of-a-WebBrowser-Control.aspx,我什至尝试了评论 nr 2 中的替代代码行,但这些都不能让我移动我的.pdf,它仍然被另一个进程使用。

我可以/应该做什么才能移动文件?我忘记了什么吗?

在第二个 File.Move 是我得到错误的地方:

webBrowser1.Navigate("");
WebBrowserHelper.ClearCache();
if (calConv != "")
{
    File.Move(forsDir + calConv + ".cal", forsDir + calConv.Replace("ToDo\\", "") + ".cg4");
    File.Move(forsDir + calConv + ".pdf", forsDir + calConv.Replace("ToDo\\", "") + ".pdf");
}
4

1 回答 1

0

这是如何在不使用 web 控件的情况下显示 PDF,而是使用 Adob​​e Reader:

从http://www.adobe.com/devnet/acrobat/downloads.html下载 Acrobat SDK

在您的项目中添加对来自 SDK 的两个 dll 的引用 - AxInterop.AcroPDFLib.dll 和 Interop.AcroPDFLib.dll

在表单的构造函数中添加 Adob​​e 预览器控件:

// Check if the user has Adobe Reader installed, if not you could show a link to Adobe Reader installer
if (Type.GetTypeFromProgID("AcroPDF.PDF") == null)
{
    pnlGetAdobe.Visible = pnlGetAdobe.Enabled = true;
}
else
{
    try
    {
        // Initialize the Adobe control
        axAcroPDF1 = new AxAcroPDF();
        axAcroPDF1.Dock = DockStyle.Fill;
        axAcroPDF1.Enabled = true;
        axAcroPDF1.Location = new Point(0, 25);
        axAcroPDF1.Name = "axAcroPDF1";
        axAcroPDF1.OcxState = (AxHost.State)new ComponentResourceManager(typeof(JasperPdfReport)).GetObject("axAcroPDF1.OcxState");
        axAcroPDF1.Size = new Size(634, 393);
        axAcroPDF1.TabIndex = 1;
        pnlCenter.Controls.Add(axAcroPDF1); // Add it to a container or instead directly to your form with this.Controls.Add(axAcroPDF1)
        axAcroPDF1.BringToFront();
    }
    catch (COMException cex)
    {
        axAcroPDF1.Dispose();
        axAcroPDF1 = null;
        MessageBox.Show(cex.ToString());
    }
    catch (Exception ex)
    {
        axAcroPDF1.Dispose();
        axAcroPDF1 = null;
        MessageBox.Show(ex.ToString());
    }
}

最后将您的 PDF 文件加载到控件中:

if (axAcroPDF1 != null && File.Exists(pdfFilename))
{
    axAcroPDF1.setShowToolbar(false);
    axAcroPDF1.setView("FitH");
    axAcroPDF1.setLayoutMode("SinglePage");
    // Load the PDF into the control
    axAcroPDF1.LoadFile(pdfFilename);
    axAcroPDF1.src = pdfFilename;

    // Show it
    axAcroPDF1.Show();
    axAcroPDF1.Refresh();
}
于 2013-03-04T09:22:22.353 回答