1

MVC3 と iTextSharp を使用しています。

最初に、Save and CreatePDF ボタンを追加しました。PDF ボタンを使用して、表示された Web ページの実際の HTML コードを返すメソッドを呼び出します。

これまでのところ、iTextSharp を使用して PDF の生成を開始しました。私は疑問に思っていましたが、最初の試行では機能しましたが、MVC グリッドテーブルを iTextSharp に追加した後も 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

ITextSharpの代わりにwkhtmltopdfを使用することをお勧めします。これは、Webキットレンダリングエンジンを使用しているオープンソースの実行可能ファイルです。それは非常に良いpdf出力を生成します。mvc Webサイトから使用する場合は、次のコードで実行できます。

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 に答える