[unicode] FPDF utf-8 인코딩 (HOW-TO)

누구든지 FPDF 패키지의 인코딩을 utf-8로 설정하는 방법을 알고 있습니까? 아니면 그리스 문자를 지원하는 ISO-8859-7 (그리스어) 이상?

기본적으로 그리스 문자가 포함 된 pdf 파일을 만들고 싶습니다.

어떤 제안이라도 도움이 될 것입니다. 성 조지



답변

UTF-8 인코딩을 사용하지 마십시오. 표준 FPDF 글꼴은 ISO-8859-1 또는 Windows-1252를 사용합니다. 다음을 사용하여 ISO-8859-1로 변환 할 수 있습니다 utf8_decode().
$str = utf8_decode($str);
그러나 Euro와 같은 일부 문자는 올바르게 번역되지 않습니다. iconv 확장을 사용할 수있는 경우 올바른 방법은 다음과 같습니다.
$str = iconv('UTF-8', 'windows-1252', $str);


답변

tFPDF http://www.fpdf.org/en/script/script92.php 라는 공식 UTF-8 버전의 FPDF도 있습니다 .

원본 FPDF에서 쉽게 전환 할 수 있습니다. 위 링크 또는 내 코드의 예제에 표시된대로 유니 코드 글꼴도 사용하는지 확인하십시오.

<?php

//this is a UTF-8 file, we won't need any encode/decode/iconv workarounds

//define the path to the .ttf files you want to use
define('FPDF_FONTPATH',"../fonts/");
require('tfpdf.php');

$pdf = new tFPDF();
$pdf->AddPage();

// Add Unicode fonts (.ttf files)
$fontName = 'Helvetica';
$pdf->AddFont($fontName,'','HelveticaNeue LightCond.ttf',true);
$pdf->AddFont($fontName,'B','HelveticaNeue MediumCond.ttf',true);

//now use the Unicode font in bold
$pdf->SetFont($fontName,'B',12);

//anything else is identical to the old FPDF, just use Write(),Cell(),MultiCell()...
//without any encoding trouble
$pdf->Cell(100,20, "Some UTF-8 String");

//...
?>

모든 곳에서 utf8_decode ()를 스팸 처리하는 대신 이것을 사용하는 것이 훨씬 더 우아하고 AddFont ()에서 직접 .ttf 파일을 사용하는 기능도 장점이라고 생각합니다.

여기에 다른 대답은 문제를 피하거나 해결하는 방법 일 뿐이며 UTF-8을 피하는 것은 최신 프로젝트의 실제 옵션이 아닙니다.

FPDF를 기반으로하지만 고급 기능을 제공하고 UTF-8 지원을 제공하며 HTML 코드를 해석 할 수있는 mPDF 또는 TCPDF (및 기타)와 같은 대안도 있습니다 (물론 HTML을 PDF로 변환하는 직접적인 방법이 없으므로 제한됨). 대부분의 FPDF 코드는 이러한 라이브러리에서 직접 사용할 수 있으므로 코드를 마이그레이션하기가 매우 쉽습니다.

https://github.com/mpdf/mpdf
http://www.tcpdf.org/


답변

이 문제에 대한 정말 간단한 해결책이 있습니다.

fpdf.php 파일에서 다음과 같은 행으로 이동하십시오.

if($txt!=='')
{

내 버전의 fpdf에서 648 행입니다. 다음 코드 줄을 삽입합니다.

$txt = iconv('utf-8', 'cp1252', $txt);

(코드 줄 위)

if($align=='R')

이것은 모든 독일어 특수 문자에 적용되며 그리스 특수 문자에도 적용됩니다. 그렇지 않으면 cp1252를 필요한 각 알파벳으로 바꾸십시오. 여기에서 지원되는 모든 문자를 볼 수 있습니다. http://en.wikipedia.org/wiki/Windows-1252 .

나는 여기에서 해결책을 보았다 : http://fudforum.org/forum/index.php?t=msg&goto=167345
원래 저자가 UTF과 8 사이에 대시를 삽입하는 것을 잊었다로, 내 위의 예제 코드를 사용하십시오.

위의 내용이 도움이 되었기를 바랍니다.

다안


답변

먼저 글꼴을 생성해야합니다. MakeFontFPDF 패키지에 포함 된 유틸리티 를 사용해야합니다 . Linux에서 데모의 약간 확장 된 스크립트를 사용했습니다.

<?php
// Generation of font definition file for tutorial 7
require('../makefont/makefont.php');

$dir = opendir('/usr/share/fonts/truetype/ttf-dejavu/');
while (($relativeName = readdir($dir)) !== false) {
    if ($relativeName == '..' || $relativeName == '.')
        continue;
    MakeFont("/usr/share/fonts/truetype/ttf-dejavu/$relativeName",'ISO-8859-2');
}
?>

그런 다음 생성 된 파일을 font내 웹 디렉토리에 복사 하고 다음을 사용했습니다.

$pdf->Cell(80,70, iconv('UTF-8', 'ISO-8859-2', 'Buňka jedna'),1);

(나는 테이블에서 작업하고 있었다.) 그것은 내 언어에 효과가 있었다 ( Buňka jednaCell one의 체코 어이다 ). 체코 어는 중앙 유럽 언어에 속하며 ISO-8859-2도 있습니다. 안타깝게도 FPDF 사용자는 UTF-8 인코딩의 장점을 잃게됩니다. PDF에서 얻을 수 없습니다.

Městečko Fruens Bøge

덴마크 문자 øřISO-8859-2가됩니다.

솔루션 제안 : 그리스어 글꼴을 가져 와서 적절한 인코딩 (ISO-8859-7)을 사용 iconv하여 글꼴을 생성하고 글꼴이 생성 된 것과 동일한 대상 인코딩으로 사용해야 합니다.


답변

유니 코드 글꼴을 허용하는 mPDF라는 FPDF 확장이 있습니다.

http://www.mpdf1.com/mpdf/index.php


답변

이 대답은 나를 위해 작동하지 않았으며 문자열에서도 html 디코딩을 실행해야했습니다. 보다

iconv('UTF-8', 'windows-1252', html_entity_decode($str));

소품 은 FPDF의 html_entity_decode에서 emfi로 이동합니다 (tFPDF 확장 사용).


답변

위의 솔루션 중 어느 것도 작동하지 않습니다.

이 시도:

function filter_html($value){
    $value = mb_convert_encoding($value, 'ISO-8859-1', 'UTF-8');
    return $value;
}