6

我有一个名为 ShowDocument.cshtml 的视图。

我想在视图中显示 pdf 文档。首先,我将 html 页面转换为 .pdf,其中包含以下信息:

控制器中的代码是:

Stream stream = HtmlToPdfBuilder.GetHtmlForm(model.Type, 16);

如果我给 return File(stream, "application/pdf", "Authorization.pdf"),我将得到保存,另存为对话框。

我不想要这个对话框,我只想在页面内显示 pdf 内容。

那么 MVC 中是否有任何 pdf 查看器,以便我可以仅使用某些控件在视图中显示内容

4

2 回答 2

12

这可能不是您想要的,但可能满足您的需要。您可以将 PDF 嵌入到局部视图中,然后通过 ajax 使用表单提交按钮上的 PDF 更新局部视图。

示例代码:局部视图

    @model Test.Models.ViewModel

<style type="text/css">

#pdfbox
{
    width:600px;
    height:400px;
    border: 5px solid #ccc;
}

</style>

<object id='pdfbox' type="application/pdf" data="@Url.Action("GeneratePDF", "Home", Model)">
    Click @Html.ActionLink("here", "GeneratePDF", "Home") to view the file.
</object>    

控制器调用:

    public ActionResult GeneratePDF(ViewModel model)
    {

        byte[] bytes = OpenPDFAndGetBytes("Thepdfname");
        return File(bytes, "application/pdf");
    }

    public ActionResult RenderPDF(LabelViewModel model)
    {
        return PartialView(model);
    }

主要观点:

@using (Ajax.BeginForm("RenderPDF", "Home", new AjaxOptions { UpdateTargetId = "pdf" }))
{
    <table>
        <tr>
            <td>
                <fieldset>
                    <legend>Fill the form:</legend>
                        Some form junk can go here
                    <br />
                    <input type="submit" value="Display PDF" />
                </fieldset>
            </td>
            <td>
                <div id='pdf'>
                    @{
                        Html.RenderPartial("RenderPDF", Model);
                    }
                </div>
            </td>
        </tr>
    </table>
}

(编辑:将“主视图”更改为标题)

于 2012-12-05T16:12:45.177 回答
1

PDF 文件的显示方式取决于用户的浏览器。我认为您的问题没有真正的“解决方案”。

当我遇到这个问题时,我使用 GhostScript 库将 PDF 文件渲染为服务器上的多个 PNG 图像,然后在我的视图中引用 PNG 文件。

于 2012-12-05T10:54:28.953 回答