LoginSignup
0
0

More than 3 years have passed since last update.

TCPDF +FPDIでブラウザから表示するPDFファイルに意図した「タイトル」を表示させてサイトのSEO効果を高める

Last updated at Posted at 2021-04-29

やりたいこと

ブログやホームページなどに掲載しているPDFファイルをブラウザで表示しようとした。
すると、ブラウザでのタブに、そのPDFのファイル名やPDFのプロパティで設定されているタイトルが表示されてしまっている。
PDFファイルの数が少ないなら、それらを更新すれば済む。
しかし、その数が多いのであれば、タイトルを他のページで設定しているHTMLの<title>タグと統一した内容にしたり、適切なものにしたりできるプログラムを組む必要が生じる。
そのように、意図したタイトルを設定すればSEO効果も期待できるそうだ。
よって、PDFファイルをブラウザで表示する際に、タブに意図したタイトルタグの内容を表示できるプログラムを作成していく。

失敗した方法

考案内容: PDFファイルを表示するPHPプログラムを作成して、それに<title>タグを設定する

  • ブラウザのタブで表示される値は、一般的にHTMLの<title>タグで設定する。
    • HTMLは他のページと同じような<title>を記入。
  • PHPではTCPDFFPDIといったライブラリは使用せず、header()関数とreadfile()関数を使用する。
view_pdf.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<title>PDFを表示する方法|PDFを表示したいサイト</title>
</head>
</html>

<?php 
ob_clean();
header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename=sample.pdf');
header('Content-Length:'.filesize('./sample.pdf'));
readfile('./sample.pdf');
?>

結果: 失敗

失敗要因予想

  • PHPでob_clean()関数使用しているから<html>の内容が削除されてる?
  • ob_clean()関数をコメントアウトしてもPDFは表示されませんでしたが。
  • HTML部を削除したらPDFは問題なく表示された。タブではPDFのファイル名かプロパティにおけるタイトルが表示されている状態。
  • HTMLで<head>を指定してもPHPでContent-Type設定しているから共存できないというか、このやり方じゃダメ。

失敗を踏まえて

  • header関数とreadfile()関数を使用しないPDFファイルの読み込み方法を考える必要がある。
    • TCPDFFPDIを使えばできるかも?
  • HTMLの<title>タグを使う必要があるのか?
    • PDFのプロパティにおけるタイトルがブラウザのタブに表示されているのだから、PDFのプロパティを更新すれば良いのでは?

解決した方法

改善点

  • PDFの読み込みと出力にはTCPDFFPDIライブラリを使用する。
  • HTMLの<title>タグは使用しない。
    • PDFのプロパティにおけるタイトルを更新する。

コード

PHPでPDFファイルを編集する – SAT Staff Blogを参考に作成。
TCPDFFPDIの導入方法もここを参考に。

view_pdf.php
<?php

// TCPDFとFPDIライブラリ読み込み
require_once './TCPDF/tcpdf.php';
require_once './FPDI/src/autoload.php';

// 新規PDFを作成
$pdf = new setasign\Fpdi\Tcpdf\Fpdi();

// 新規PDFのプロパティにおけるタイトルを設定
$title = 'PDFを表示する方法|PDFを表示したいサイト';
$pdf->SetTitle($title);

// 新規PDFのページ設定
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pdf->SetMargins(0, 0, 0);
$pdf->SetCellPadding(0);

// 表示したいPDFの総ページ数取得
$pages = $pdf->setSourceFile('./sample.pdf');

// 表示したいPDFを読み込み
$pdf->setSourceFile('./sample.pdf');

// 新規PDFに表示したいPDFを反映
for($i=1; $i<$pages+1; $i++){
    $pdf->AddPage();
    $tpl = $pdf->importPage($i);
    $pdf->useTemplate($tpl,['adjustPageSize' => true]);
}

// ブラウザに出力
ob_clean();
$pdf->Output('sample.pdf', 'I');
?>

コード解説

  • 処理の流れとしては、新規のPDFを作成し、新規PDFのプロパティにおけるタイトルを設定、新規PDFのページを設定、新規作成されたPDFに対して表示させたいPDFの内容をコピーして、ブラウザに出力というもの。
  • TCPDFFPDIを使用すれば $pdf->SetTitle('ブラウザに表示させたいタイトル') で簡単にPDFのプロパティにおけるタイトルを更新できる。
  • この解決法における一番の問題点は、新規のPDFファイルを作成しているため、既存のPDFで設定されているサイズ設定などを反映する 必要がある事。

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0