私はmPDFライブラリを使用してPDFファイルを生成しています。Firefoxではうまく機能していますが、表示されませんPDF内のファイルchromeブラウザ。
ChromeでPDFを生成しているときに次のエラーが発生します。
以下は、Generate PDF mPDFを使用するための私のコードです。
ob_clean();
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $yourFileName . '"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
$mpdf = new PDF( 'c','A4','','',15, 15,10,14,0,0);
$mpdf->useOnlyCoreFonts = false;
$mpdf->SetDisplayMode('real');
$mpdf->list_indent_first_level = 0; // 1 or 0 - whether to indent the first level of a list
$stylesheet = file_get_contents(APPPATH . 'third_party/mpdf/style.css');
$mpdf->WriteHTML($stylesheet,1);
$mpdf->WriteHTML($html);
$mpdf->Output();
これは、はるかに古いバージョンのChromeで遭遇していた問題です。この問題が引き続き発生する場合は、次の操作を行います
Google Chromeでは、表示する2つのオプションPDFファイルです。Chrome pdfビューア(デフォルト)を使用するか、Adobe Readerを使用できます。
Chrome:// pluginsを確認できますか(アドレスバーに入力してください)?有効にするだけで、他のPDFビューア(Chrome/Adobe)に切り替えます!
これは、生成されたpdfの問題である可能性があります。 Firefoxで動作する場合は、ファイルをダウンロードして開こうとします。 PCのPDFビューアが出力する場合破損したPDFの場合、コードを微調整する必要があるかもしれません。私も同じ問題に直面しています。 Chromeは、PDFが破損しているため、開けません。
私の答えがあなたがデバッグの旅に行くことを願っています。乾杯。 :D
これは、HTMLをPDF mPDFなどのライブラリに使用していて、ファイルを送信する前にブラウザにHTMLを送信している場合にも発生します。多くの読者は、HTMLを無視してから読み取ります= PDFマークアップ-Chromeはしません。
たとえば、PHPでは、データをmPDFに送信する前に出力バッファーをクリアします:ob_clean()
。
次のコードブロックは、C#でChromeブラウザのPDFをMemoryStreamで開いている場合に機能します。
MemoryStream ms;
ms = new MemoryStream(result.ResponseData[0].Report);
HttpContext context = HttpContext.Current;
HttpContext context = HttpContext.Current;
context.Response.Clear();
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.ContentType = "application/pdf";
context.Response.AddHeader("Content-Disposition", "inline;filename=" + Guid.NewGuid().ToString() + "." + _exportType);
context.Response.AddHeader("Content-Length", ms.Length.ToString());
context.Response.BinaryWrite(ms.ToArray());
context.Response.Flush();
context.Response.Close();
context.Response.End();
Chromeの名前のヘッダーに問題があることがわかります:Content-Type
値:charset=utf-8
。応答ヘッダー値を削除すると、修正されました。 (元の 投稿 )
Asp.net Core 2.10では、これは私にとってはうまく機能しています。
MemoryStream ms1;
ms1 = new MemoryStream(res);
HttpContext context = _httpContextAccessor.HttpContext;
context.Response.Clear();
context.Response.ContentType = "application/pdf";
context.Response.Headers.Add("Content-Disposition", "inline;filename=" + Guid.NewGuid().ToString() + "." + "pdf");
context.Response.Headers.Add("Content-Length", ms1.Length.ToString());
context.Response.Body.Write(ms1.ToArray());
context.Response.Body.Flush();
context.Response.Body.Close();
これがお役に立てば幸いです。
@SébastienGicquelに同意します。ただし、私の場合、flush + ob_cleanをヘッダーの直後かつ@readfileの前に配置する必要があります。
FYI、my Chrome=バージョンは9.0.3945.79であり、コードは、FirefoxとIEでob_cleanとフラッシュなしでうまく機能します。
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' .$file. '"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
ob_clean();
flush();
@readfile($file);