1

我正在使用 MVC3 和 iTextSharp。

首先添加了一个保存和创建PDF 按钮。使用 PDF 按钮,我调用了一个方法,该方法返回给我显示网页的实际 HTML 代码。

到目前为止一切顺利,现在我开始使用 iTextSharp 生成 PDF。我想知道,它在第一次尝试时就起作用了,但是在我使用 iTextSharp 添加一个 MVC 网格表之后仍然会创建一个 PDF,但其中有一条错误消息。

不支持 ERRORURI 格式。

有什么建议可以让它发挥作用吗?

网格是这样构建的

        @Html.DataGridFor(m => m.ConfigurationArticleList, ItemContainerType.tr,
        _S.H<ConfigurationArticle>(
        @<text>         
             <td class="ToDo">
                @item.ValidationMessageFor(m => m.ArtNr, "*")
                @item.TextBoxFor(m => m.ArtNr)
             </td>
             <td class="ToDo">
                @item.ValidationMessageFor(m => m.Bezeichnung, "*")
                @item.TextBoxFor(m => m.Bezeichnung)
             </td>
             <td class="ToDo">
                @item.ValidationMessageFor(m => m.Anzahl, "*")
                @item.TextBoxFor(m => m.Anzahl)
             </td>
        </text>
        ),
         _S.H<ConfigurationArticle>(
        @<text>         
            <td class="ToDo">
                @item.ValidationMessageFor(m => m.ArtNr, "*")
                @item.DisplayField(m => m.ArtNr)
            </td>
            <td class="editor-field">
                @item.ValidationMessageFor(m => m.Bezeichnung, "*")
                @item.DisplayField(m => m.Bezeichnung)
            </td>
            <td class="ToDo">
                @item.ValidationMessageFor(m => m.Anzahl, "*")
                @item.DisplayField(m => m.Anzahl)
            </td>
        </text>

此外,PDF 的 FilePath 仍然是硬编码的,有什么想法可以获得 SaveFile-Dialog 或其他东西吗?

4

2 回答 2

2

ABCpdf - 是做更多事情的好工具。我们确实更喜欢在我们的项目中使用它,并且它可以毫无问题地工作。ABCpdf

于 2012-06-21T09:49:57.320 回答
0

我建议您使用wkhtmltopdf而不是 ITextSharp。它是一个使用 web kit 渲染引擎的开源可执行文件。它产生非常好的pdf输出。如果您想从 mvc 网站使用它,则可以使用以下代码运行它:

var procStartInfo = new ProcessStartInfo("wkhtmltopdf.exe", "input.html output.pdf");
procStartInfo.RedirectStandardOutput = true;
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true;
Process proc = new Process();
proc.StartInfo = procStartInfo;
proc.Start();

它将在您的服务器文件系统上创建输出,但您可以轻松读取它并写入 http 响应。

Response.ContentType = "Application/pdf";
Response.AddHeader("Content-Type", "application/pdf");
Response.AddHeader("Content-Disposition", "attachment; filename=output.pdf");
string filePath = "output.pdf";
Response.WriteFile(filePath);
Response.End();
于 2012-06-21T09:47:27.463 回答