web-dev-qa-db-ja.com

PDFドキュメントをchromeブラウザで)読み込めませんでした

私はmPDFライブラリを使用してPDFファイルを生成しています。Firefoxではうまく機能していますが、表示されませんPDF内のファイルchromeブラウザ。

ChromeでPDFを生成しているときに次のエラーが発生します。

Getting error in chrome browser while generating 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();
9
Ketav Chotaliya

これは、はるかに古いバージョンのChromeで遭遇していた問題です。この問題が引き続き発生する場合は、次の操作を行います

Google Chromeでは、表示する2つのオプションPDFファイルです。Chrome pdfビューア(デフォルト)を使用するか、Adobe Readerを使用できます。

Chrome:// pluginsを確認できますか(アドレスバーに入力してください)?有効にするだけで、他のPDFビューア(Chrome/Adob​​e)に切り替えます!

0
Parthiban K

これは、生成されたpdfの問題である可能性があります。 Firefoxで動作する場合は、ファイルをダウンロードして開こうとします。 PCのPDFビューアが出力する場合破損したPDFの場合、コードを微調整する必要があるかもしれません。私も同じ問題に直面しています。 Chromeは、PDFが破損しているため、開けません。

私の答えがあなたがデバッグの旅に行くことを願っています。乾杯。 :D

6
Hamad Rakshani

私の場合、現在のページのhtmlはpdfで送信されました(単純なテキストエディターでpdfを開くと表示されます)。

私のためのソリューション flush + ob_clean ヘッダーを送信する前に

ob_clean();
flush();
header("Content-type:application/pdf");
header("Content-Disposition:attachment;filename='downloaded.pdf'"); 
echo $result; 
exit;
4

これは、HTMLをPDF mPDFなどのライブラリに使用していて、ファイルを送信する前にブラウザにHTMLを送信している場合にも発生します。多くの読者は、HTMLを無視してから読み取ります= PDFマークアップ-Chromeはしません。

たとえば、PHPでは、データをmPDFに送信する前に出力バッファーをクリアします:ob_clean()

2
jorisw

次のコードブロックは、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();
0
Askeroglu

Chromeの名前のヘッダーに問題があることがわかります:Content-Type値:charset=utf-8。応答ヘッダー値を削除すると、修正されました。 (元の 投稿

0
MeSo2

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();

これがお役に立てば幸いです。

0
Raju Paladiya

@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);
0
Shiyu Fang