完全な HTML ドキュメント文字列を引数として取り、新しいタブ/ウィンドウで作成された PDF を開くか、ファイルをダウンロードする PDF ジェネレーターがあります。セミコロンで区切られた名前を取り、それから複数の PDF を生成する証明書を作成できるようにするフォームを作成するように依頼されました。これを行うコードは次のとおりです。
$("#certgensubmit").click(function (event) {
// Get the names to generate certificates for.
var names = $("#presented-to").html().split(';');
$.each(names, function(index, value) {
if(value.length > 0) {
var presentedBy = $("#presented-by").html();
var awardName = $("#award-name").html();
var presentedDate = $("#presented-date").html();
var signerName = $("#signer-name").html();
var html = getCertificateHTML(presentedBy, value, awardName, presentedDate, signerName);
//console.log(html);
$("#HtmlContent").val(html);
$("#pdfform").submit();
}
});
});
これは機能しますが、最初の証明書 PDF のみが作成される点が異なります。ただし、毎回コードを処理しています。「console.log(html)」行のコメントを外すと、Chrome のコンソールに正しい出力が表示されます。ループ内で JavaScript で新しいドキュメントを作成し、各ドキュメント内からフォーム送信を実行することで、ある程度の作業を行うことができました。唯一の問題は、PDF ジェネレーターに送信されたフィールド内にテキストを入れるだけで機能しましたが、ジェネレーターが必要とするフィールドに HTML を送信すると完全に失敗したことです。そのため、問題は PDF の作成中に新しいタブを開くことに関係しているようです。これが発生する必要があるため、ユーザーは PDF の入力を受け入れる UI から離れません。
PDF生成の側面にとらわれすぎないでください.jQueryのループごとに異なる値でフォーム送信を複数回トリガーする方法を知る必要があるだけです。残りは文脈のためだけです。