0

私は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[] の代わりに文字列を使用してみました。同じエラーが発生します。

4

1 に答える 1