私はJSPDFを使用して、アプリケーションのクライアント側で IE 8 を超えるすべてのブラウザーの PDF ファイルを生成し、オフラインで互換性を持たせています。JSPDF は IE8 では動作しないため (IE8 は HTTP GET のサイズを制限します)、解決策は、ファイルをサーバーに保存し、ホストされているクライアントへのリンクを返す API アクションへの投稿を行うことでした。 (IE8 サポートはオフライン対応である必要はありません)。
JSPDF によって出力された raw バイトをサーバーに投稿しています。PDF に画像がない限り、PDF を問題なく保存できます。画像があるとデータが壊れ、ファイルを開こうとするとメモリオーバーフローが発生します。
画像が正しく暗号化されないのはなぜですか? 私の最初の推測では、raw バイトに不正な文字が含まれていたのですが、PDF ファイル ソースを簡単に確認したところ、おそらくそうではないことがわかりました。
コントローラーのアクション:
public struct PdfBytesContainer
{
public byte[] RawPdfBytes { get; set; }
}
[HttpPost]
public string Post(PdfBytesContainer container)
{
var fileName = "test";
File.WriteAllBytes(@"PathToFile\File.pdf", container.RawPdfBytes);
return fileName;
}
AJAX 投稿:
var pdfData = {
rawPdfBytes: doc.output()//.substring(0, 100)
};
$.ajax({
url: pdfApiUrl,
type: "POST",
data: pdfData,
success: function(response) {
var url = "/Content/Pdfs/" + response + ".pdf";
window.open(url,'_blank');
},
failure: function(response) {
alert("failed " + response);
}
});
注: PdfBytesContainer 構造体で byte[] の代わりに文字列を使用してみました。同じエラーが発生します。