ユーザーが記入できるWebフォームがあり、そのコンテンツはPDF FPDFとPHPでいっぱいです。ユーザーがアポストロフィでWordを入力すると、PDFの前にスラッシュが表示されます。
同様に、商標記号のような特殊文字は間違ってエンコードされます。
FPDFのよくある質問には、
$str = utf8_decode($str);
しかし、それをPDF全体に適用する方法がわからないだけです。私はそれをあたかもHTMLページであるかのように考えようとしていますが、それは助けにはなりません。
何か案は?
以下を実行して、これを理解しました(pagesubtitleはフォーム内のテキストフィールドの名前です):
$reportSubtitle = stripslashes($_POST['pagesubtitle']);
$reportSubtitle = iconv('UTF-8', 'windows-1252', $reportSubtitle);
次に、それを印刷します。
$pdf->Write (6, $reportSubtitle);
これにより、アポストロフィに続く不要なスラッシュが削除され、「iconv」関数を使用して™などの特殊文字が出力されます。
上記のすべてはうまくいきませんでしたが、うまくいきました。
私はすべての奇妙なキャラクターをそのurl値に変換するだけで「野barな方法」でそれを行うことができました。次に、URLと出来上がりをデコードするだけです!
function em($Word) {
$Word = str_replace("@","%40",$Word);
$Word = str_replace("`","%60",$Word);
$Word = str_replace("¢","%A2",$Word);
$Word = str_replace("£","%A3",$Word);
$Word = str_replace("¥","%A5",$Word);
$Word = str_replace("|","%A6",$Word);
$Word = str_replace("«","%AB",$Word);
$Word = str_replace("¬","%AC",$Word);
$Word = str_replace("¯","%AD",$Word);
$Word = str_replace("º","%B0",$Word);
$Word = str_replace("±","%B1",$Word);
$Word = str_replace("ª","%B2",$Word);
$Word = str_replace("µ","%B5",$Word);
$Word = str_replace("»","%BB",$Word);
$Word = str_replace("¼","%BC",$Word);
$Word = str_replace("½","%BD",$Word);
$Word = str_replace("¿","%BF",$Word);
$Word = str_replace("À","%C0",$Word);
$Word = str_replace("Á","%C1",$Word);
$Word = str_replace("Â","%C2",$Word);
$Word = str_replace("Ã","%C3",$Word);
$Word = str_replace("Ä","%C4",$Word);
$Word = str_replace("Å","%C5",$Word);
$Word = str_replace("Æ","%C6",$Word);
$Word = str_replace("Ç","%C7",$Word);
$Word = str_replace("È","%C8",$Word);
$Word = str_replace("É","%C9",$Word);
$Word = str_replace("Ê","%CA",$Word);
$Word = str_replace("Ë","%CB",$Word);
$Word = str_replace("Ì","%CC",$Word);
$Word = str_replace("Í","%CD",$Word);
$Word = str_replace("Î","%CE",$Word);
$Word = str_replace("Ï","%CF",$Word);
$Word = str_replace("Ð","%D0",$Word);
$Word = str_replace("Ñ","%D1",$Word);
$Word = str_replace("Ò","%D2",$Word);
$Word = str_replace("Ó","%D3",$Word);
$Word = str_replace("Ô","%D4",$Word);
$Word = str_replace("Õ","%D5",$Word);
$Word = str_replace("Ö","%D6",$Word);
$Word = str_replace("Ø","%D8",$Word);
$Word = str_replace("Ù","%D9",$Word);
$Word = str_replace("Ú","%DA",$Word);
$Word = str_replace("Û","%DB",$Word);
$Word = str_replace("Ü","%DC",$Word);
$Word = str_replace("Ý","%DD",$Word);
$Word = str_replace("Þ","%DE",$Word);
$Word = str_replace("ß","%DF",$Word);
$Word = str_replace("à","%E0",$Word);
$Word = str_replace("á","%E1",$Word);
$Word = str_replace("â","%E2",$Word);
$Word = str_replace("ã","%E3",$Word);
$Word = str_replace("ä","%E4",$Word);
$Word = str_replace("å","%E5",$Word);
$Word = str_replace("æ","%E6",$Word);
$Word = str_replace("ç","%E7",$Word);
$Word = str_replace("è","%E8",$Word);
$Word = str_replace("é","%E9",$Word);
$Word = str_replace("ê","%EA",$Word);
$Word = str_replace("ë","%EB",$Word);
$Word = str_replace("ì","%EC",$Word);
$Word = str_replace("í","%ED",$Word);
$Word = str_replace("î","%EE",$Word);
$Word = str_replace("ï","%EF",$Word);
$Word = str_replace("ð","%F0",$Word);
$Word = str_replace("ñ","%F1",$Word);
$Word = str_replace("ò","%F2",$Word);
$Word = str_replace("ó","%F3",$Word);
$Word = str_replace("ô","%F4",$Word);
$Word = str_replace("õ","%F5",$Word);
$Word = str_replace("ö","%F6",$Word);
$Word = str_replace("÷","%F7",$Word);
$Word = str_replace("ø","%F8",$Word);
$Word = str_replace("ù","%F9",$Word);
$Word = str_replace("ú","%FA",$Word);
$Word = str_replace("û","%FB",$Word);
$Word = str_replace("ü","%FC",$Word);
$Word = str_replace("ý","%FD",$Word);
$Word = str_replace("þ","%FE",$Word);
$Word = str_replace("ÿ","%FF",$Word);
return $Word;
}
そしてもちろん、私は関数を呼び出します
$weirdword = "Días, Miércoles, Sábado,miércoles"; //Some spanish days
$weirdword = em($weirdword);
$weirdword = urldecode($weirdword);
echo $weirdword;
出力を与える:
ディアス、ミエルコレス、サバド、ミエルコレス
上記のどれも私の問題を解決しませんでした。次の方法で解決しました。
setlocale(LC_CTYPE, 'en_US');
$value = iconv('UTF-8', 'ASCII//TRANSLIT', $value);
$fpdf->Cell(140, 6, $value, 1);
お役に立てば幸いです。
参照:Link
上記の解決策のどれも私のために機能しなかったので、私はこのような問題を解決しました:
$this->AddFont('Arial','','arial.php');
$this->SetFont('Arial','',12);
$this->Cell(0,5,iconv("UTF-8", "CP1250//TRANSLIT", $string),0,1,'L');
上記の行を試す前に、次を実行します。
C:/Windows/Fonts/Arial.ttfからFPDFの/ tutorialフォルダーにコピーします。
Makefont.phpのコンテンツを編集します
require('../makefont/makefont.php');
MakeFont('arial.ttf','cp1250');
Makefont.phpを実行します
次のファイルをFPDFの/ fontフォルダーにコピーします。arial.php arial.ttf arial.z
最後に、「フォントフォルダ」を定義します。 fpdf.php(メインライブラリファイル)を開き、以下を追加します。
define('FPDF_FONTPATH','font');
PDFはすべての特殊文字で機能します。FPDFが元々使用しているArialフォント自体の問題であると考えています。幸運を!
私のために以下が動作します(FPDFを使用):
function em_jaz($Word) {
$Word = str_replace('+', ' ', $Word);
$Word = str_replace("%C3%A9","%E9",$Word); /* é */
$Word = str_replace("%C3%A8","%E8",$Word); /* è */
$Word = str_replace("%C3%AE","%EE",$Word); /* î */
$Word = str_replace("%26rsquo%3B","%27",$Word); /* ' */
$Word = str_replace("%C3%89","%C9",$Word); /* É */
$Word = str_replace("%C3%8A","%CA",$Word); /* Ê */
$Word = str_replace("%C3%8B","%CB",$Word); /* Ë */
$Word = str_replace("%C3%8C","%CC",$Word); /* Ì */
$Word = str_replace("%C3%8D","%CD",$Word); /* Í */
$Word = str_replace("%C3%8E","%CE",$Word); /* Î */
$Word = str_replace("%C3%8F","%CF",$Word); /* Ï */
$Word = str_replace("%C3%90","%D0",$Word); /* Ð */
$Word = str_replace("%C3%91","%D1",$Word); /* Ñ */
$Word = str_replace("%C3%92","%D2",$Word); /* Ò */
$Word = str_replace("%C3%93","%D3",$Word); /* Ó */
$Word = str_replace("%C3%94","%D4",$Word); /* Ô */
$Word = str_replace("%C3%95","%D5",$Word); /* Õ */
$Word = str_replace("%C3%96","%D6",$Word); /* Ö */
$Word = str_replace("%C3%98","%D8",$Word); /* Ø */
$Word = str_replace("%C3%99","%D9",$Word); /* Ù */
$Word = str_replace("%C3%9A","%DA",$Word); /* Ú */
$Word = str_replace("%C3%9B","%DB",$Word); /* Û */
$Word = str_replace("%C3%9C","%DC",$Word); /* Ü */
$Word = str_replace("%C3%9D","%DD",$Word); /* Ý */
$Word = str_replace("%C3%9E","%DE",$Word); /* Þ */
$Word = str_replace("%C3%9F","%DF",$Word); /* ß */
$Word = str_replace("%C3%A0","%E0",$Word); /* à */
$Word = str_replace("%C3%A1","%E1",$Word); /* á */
$Word = str_replace("%C3%A2","%E2",$Word); /* â */
$Word = str_replace("%C3%A3","%E3",$Word); /* ã */
$Word = str_replace("%C3%A4","%E4",$Word); /* ä */
$Word = str_replace("%C3%A5","%E5",$Word); /* å */
$Word = str_replace("%C3%A6","%E6",$Word); /* æ */
$Word = str_replace("%C3%A7","%E7",$Word); /* ç */
$Word = str_replace("%C3%AA","%EA",$Word); /* ê */
$Word = str_replace("%C3%AB","%EB",$Word); /* ë */
$Word = str_replace("%C3%AC","%EC",$Word); /* ì */
$Word = str_replace("%C3%AD","%ED",$Word); /* í */
$Word = str_replace("%C3%AF","%EF",$Word); /* ï */
$Word = str_replace("%C3%B0","%F0",$Word); /* ð */
$Word = str_replace("%C3%B1","%F1",$Word); /* ñ */
$Word = str_replace("%C3%B2","%F2",$Word); /* ò */
$Word = str_replace("%C3%B3","%F3",$Word); /* ó */
$Word = str_replace("%C3%B4","%F4",$Word); /* ô */
$Word = str_replace("%C3%B5","%F5",$Word); /* õ */
$Word = str_replace("%C3%B6","%F6",$Word); /* ö */
$Word = str_replace("%C3%B7","%F7",$Word); /* ÷ */
$Word = str_replace("%C3%B8","%F8",$Word); /* ø */
$Word = str_replace("%C3%B9","%F9",$Word); /* ù */
$Word = str_replace("%C3%BA","%FA",$Word); /* ú */
$Word = str_replace("%C3%BB","%FB",$Word); /* û */
$Word = str_replace("%C3%BC","%FC",$Word); /* ü */
$Word = str_replace("%C3%BD","%FD",$Word); /* ý */
$Word = str_replace("%C3%BE","%FE",$Word); /* þ */
$Word = str_replace("%C3%BF","%FF",$Word); /* ÿ */
$Word = str_replace("%40","%40",$Word); /* @ */
$Word = str_replace("%60","%60",$Word); /* ` */
$Word = str_replace("%C2%A2","%A2",$Word); /* ¢ */
$Word = str_replace("%C2%A3","%A3",$Word); /* £ */
$Word = str_replace("%C2%A5","%A5",$Word); /* ¥ */
$Word = str_replace("%7C","%A6",$Word); /* | */
$Word = str_replace("%C2%AB","%AB",$Word); /* « */
$Word = str_replace("%C2%AC","%AC",$Word); /* ¬ */
$Word = str_replace("%C2%AF","%AD",$Word); /* ¯ */
$Word = str_replace("%C2%BA","%B0",$Word); /* º */
$Word = str_replace("%C2%B1","%B1",$Word); /* ± */
$Word = str_replace("%C2%AA","%B2",$Word); /* ª */
$Word = str_replace("%C2%B5","%B5",$Word); /* µ */
$Word = str_replace("%C2%BB","%BB",$Word); /* » */
$Word = str_replace("%C2%BC","%BC",$Word); /* ¼ */
$Word = str_replace("%C2%BD","%BD",$Word); /* ½ */
$Word = str_replace("%C2%BF","%BF",$Word); /* ¿ */
$Word = str_replace("%C3%80","%C0",$Word); /* À */
$Word = str_replace("%C3%81","%C1",$Word); /* Á */
$Word = str_replace("%C3%82","%C2",$Word); /* Â */
$Word = str_replace("%C3%83","%C3",$Word); /* Ã */
$Word = str_replace("%C3%84","%C4",$Word); /* Ä */
$Word = str_replace("%C3%85","%C5",$Word); /* Å */
$Word = str_replace("%C3%86","%C6",$Word); /* Æ */
$Word = str_replace("%C3%87","%C7",$Word); /* Ç */
$Word = str_replace("%C3%88","%C8",$Word); `/`* È */
return $Word;
}
$ content = urlencode($ content);
$ content = urldecode($ pdf-> em_jaz($ content));
このクラスは、UTF-8サポートを追加したFPDFの修正バージョンです。さらに、ドキュメントで使用されるフォントの必要な部分のみが埋め込まれるため、フォント全体が埋め込まれている場合よりもファイルサイズがはるかに小さくなります。これらの機能は、もともとmPDFプロジェクト用に開発されました。