Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Polskie czcionki w FPDF - ciąg dalszy
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
luv
Witam,

Wracam do moich problemów z uzyskaniem polskich czcionek w FPDF-ie.
Wciąż - robiąc tak jak jest napisane w tutorialu nie wychodzą mi polskie czcionki. :cry:
Postaram się opisać kroki w jaki sposób to robię:
1) Generuję plik .afm:
ttf2pt1 -a c:windowsfontsarial.ttf arial
2) Generuję plik .php tworząc skrypt i uruchamiając funkcję:
[php:1:dd3909ed92]<?
require('makefont.php');
MakeFont('arial.ttf','arial.afm','cp1250');
?>[/php:1:dd3909ed92]
3) Deklaruję w skrypcie
[php:1:dd3909ed92]<?
define('FPDF_FONTPATH','font/');
require('fpdf.php');

$pdf=new FPDF();
$pdf->Open();
$pdf->AddPage();
$pdf->SetFont('arial','',16);
$pdf->Cell(0,10,'ąęśćżźółń frrggtrgtr');
$pdf->Output();
?>[/php:1:dd3909ed92]
Uzyskany winik to zamiast polskich znaków "krzaki"!!!

PROSZĘ O POMOC sad.gif
kasztan
Hej,
Wszystko robisz dobrze, generujesz czcionke, o.k., plik .php tez o.k.
Mam nadzieję, że nie masz przy tym żadnych błędów.

Ale... Patrząc na ten Twój skrypt tu masz błąd. Przed ustawieniem czcionki musisz ja najpierw dodać (a pisałeś, że robisz tak jak w tutorialu...).
Czyli (poprawny skrypt wygląda tak):
[php:1:222401b05f]
<?php
define('FPDF_FONTPATH','font/');
require('fpdf.php');

$pdf=new FPDF();
$pdf->Open();
$pdf->AddPage();
//$pdf->SetFont('arial','',16); //TWOJA LINIJKA
$pdf->AddFont('Arialmt', '','arial.php'); //TA BRAKUJĄCA
$pdf->SetFont('Arialmt', '', 16); //NO I USTAWIENIE WŁAŚCIWEJ CZCIONKI
$pdf->Cell(0,10,'ąęśćżźółń frrggtrgtr');
$pdf->Output();
?>
[/php:1:222401b05f]
Zauważ, że nazwa czcionki to nie arial, tylko Arialmt; jak sobie wyedytujesz wygerowany przez MakeFont(...) plik arial.php, to na początku zobaczysz, że taka jest właśnie nazwa.
No i jeszcze jedno: w katalogu font oprócz pliku arial.php musi się jeszcze znajdować plik arial.z (tworzony razem z arial.php po generacji przez MakeFont(...) )

Mam nadzieję, że Ci zadziała.

Jedyny problem, którego nie umiem rozwiązać, to dlaczego po wygenerowaniu pdf'a zajmuje on tyle miejsca? Na dzień dobry ponad 150 KB.
Oczywiście zrobiłem jak w tutorialu radzili i wywaliłem wszystkie znaki z pliku *.map, oprócz tych z "polskimi ogonkami". I co? I nic->nadal cała czcionka jest "upchana" w pdf'ie i zajmuje on tyle miejsca.
dragossani
Pradopodobnie wyłączona jest kompresja LZW. Nie wiem jak to wygląda w FPDF, używam PdfLIB.
domm
Generacją dokumentów w FPDF-ie zajmowałem się dość dawno, ale z tego co pamiętam to duży rozmiar mógł być spowodowany zagnieżdżaniem w nich czcionek. Tutorial FPDF opisuje funkcję MakeFont() następująco:

Cytat
MakeFont(string fontfile, string afmfile [, string enc [, array patch [, string type]]])  

fontfile  
Path to the .ttf or .pfb file.  
afmfile  
Path to the .afm file.  
enc  
Name of the encoding to use. Default value: cp1252.  
patch  
Optional modification of the encoding. Empty by default.  
type  
Type of the font (TrueType or Type1). Default value: TrueType.  

The first parameter is the name of the font file. The extension must be either .ttf or .pfb and determines the font type. If you own a Type1 font in ASCII format (.pfa), you can convert it to binary format with t1utils.  
If you don't want to embed the font, pass an empty string. In this case, type is given by the type parameter.
Note: in the...


Może o to chodzi? Spróbuj (o ile tak nie próbowałeś) wywołać funkcję w stylu: MakeFont('','arial.afm','cp1250'), czyli pozostawić pierwszy parametr pusty, tak jak sugerują w tutorialu. Arial jest czcionką systemową którą każdy powinien mieć i chyba nie trzeba jej umieszczać w dokumencie. Moje pliki generowane w FPDF-ie mają średnio po 25 kB (3 strony A4).
kasztan
Niestety.
Jak zrobiłem tak, jak pisałeś, to wówczas rozmiar pdf'a jest oczywiście dużo mniejszy, jednak w miejscu polskich literek są spacje sad.gif

Te rzeczy które radzą w tutorialu już wszystkie przerobiłem.
Nadal pdf, który ma 1 (jedną) linijkę tekstu ma 163KB.
A co dopiero będzie, jak będę chciał w jednym dokumencie użyć wielu rodzajów czcionek?

Może są jakieś inne rady :?: :?: :?:
Przecież na pewno wielu z Was musiało korzystać z FPDF'a (w końcu jest to jedna z nielicznych darmowych bibliotek do generowania pdf'ów w locie).
domm
Tak, :wink: ja korzystałem z FPDF-a. System oparty właśnie między innymi na FPDF-ie robiłem grubo ponad pół roku temu i działa on do dziś z powodzeniem biggrin.gif
Niesetety nie pamiętam szczegółów każdego kroku, mogę jedynie powiedzieć, że nie miałem większych problemów z czcionkami i wszystko przebiegło bez zakłóceń. Tak jak pisałem, dokument na 3 strony A4 z kilkoma bitmapami w gray-u i z 4-ma czcionkami (z polskimi znaczkami :wink: ) zajmuje średnio 25 kB.
Co do dużego rozmiaru dokumentu, to według mnie chodziło o to, czyli o zagnieżdżanie czcionek. Dlaczego nie masz polskich literek? Zakładam że stronę kodową w MakeFont(...) podałeś poprawnie, może błąd wystąpił podczas generacji pliku afm? W sumie jeżeli jednak przy zagnieżdżaniu polskie znaczki były, to i powinny być bez zagnieżdżania. Mogę podesłać Ci na priva wygenerowane przeze mnie czcionki ArialNarrow, ArialNarrowItalic, ArialNarrowBold, ArialNarrowBoldItalic bo z takich korzystałem. Jak chcesz to możesz spróbować czy będzie działało, przynajmniej rozświetli to trochę sytuację.
Nasuwa się jeszcze jedno: nie wiem jak wygląda sprawa z czcionkami OpenType i czy mogą być z nimi problemy. Opisując funkcję MakeFont(...) tutorial FPDF podaje:
Cytat
type
Type of the font (TrueType or Type1). Default value: TrueType.

nic nie mówiąc o OpenType. Czcionką OpenType np. pod Win2k jest m.in. rodzina Timesa i Ariala (nie Narrow). Jakiej czcionki używasz?
kasztan
W sumie próbowałem tylko z Arialem (zwykłym-"Normalny", plik Arial.ttf), no ale ta czcionka jest przecież TrueType.

Jak możesz, to podeślij mi te wygenerowane przez Ciebie, zobaczę czy to coś zmieni.
domm
To że font ma rozszerzenie *.ttf nie świadczy że jest TrueType. Możesz poczytać o tym na:
http://fonty.pl/fonty.php?str=porady&pid=story09

Być może przyczyna braku polskich znaków leży gdzie indziej, ale warto to sprawdzić. FPDF-owe czcionki ArialNarrow oczywiści chętnie Ci prześlę, podaj tylko adres maila :wink:
kasztan
Cytat
To że font ma rozszerzenie *.ttf nie świadczy że jest TrueType.


To wiem, ale po otwarciu tego pliku widzę, że jest to TrueType.

Cytat
FPDF-owe czcionki ArialNarrow oczywiści chętnie Ci prześlę, podaj tylko adres maila :wink:


Mojego mejla wysłałem Ci przez PW.
luv
Witam,

Zrobiłem tak jak pisałeś kasztan, ale dalej nie wychodzą mi polskie czcioki. Ale zauważyłem pewien błąd. A mianowicie:
Pisałeś, że w katalogu font oprócz pliku arial.php musi się jeszcze znajdować plik arial.z (tworzony z arial.php po generacji przez MakeFont(...)).
No właśnie i ten plik nie jest generowany. Nie wiem do czego ten plik jest potrzebny, ale jeżeli napisałeś , że musi być to widocznie jest ważny smile.gif
Po uruchomieniu funkcji MakeFont otrzymuję następujący komunikat:
Notice: font file could not be compressed (gzcompress not available)
Font definition file generated (arial.php)

Jak rozwiązać ten problem?
kasztan
Witam,
domm nie wiem, jak Ty to zrobiłeś, ale dzisiaj użyłem tych czcionek, które mi podesłałeś i one po prostu działają normalnie - tzn. są polskie znaki i wygenerowany pdf ma sensowny rozmiar.
Gdy użyłem w jednym pdf'ie wszystkich czterech czcionek, które od Ciebie dostałem, wówczas pdf miał niecałe 7KB!

Teraz kolejna prośba do Ciebie - przypomnij sobie JAK generowałeś te swoje czcionki. (rzeczywiście plik *.z nie był przy nich potrzebny).

Chodzi o to, że przydałoby mi się to na przyszłość; poza tym zauważyłem, że użyłeś w tych czcionkach kodowania windows-1250, a ja we wszystkich moich stronkach i skryptach php używam iso-8859-2 (bez sensu, żebym wszystko zmieniał).

Wielkie dzięki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.