[PHP] PDF maken met eigen font

Pagina: 1
Acties:
  • 150 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • robg1984
  • Registratie: December 2002
  • Laatst online: 17-09 11:18
hallo
momenteel ben ik aan het proberen om via PHP online PDF-files te genereren met tekst in een eigen lettertype. ik heb het volgende script:

PHP:
1
2
3
4
pdf_set_parameter($pdf,"resourcefile","d:/www/admin/pdf/pdflib.upr");
$font_bold=pdf_findfont($pdf,"OfficinaSans-Bold","winansi",1);
pdf_set_font($pdf, $font_bold, 14,"winansi");
pdf_show_xy($pdf, $b->naam,246.6, 245.9);


hetvolgende staat in pdflib.upr:

PS-Resources-1.0

Searchpath
FontAFM
FontPFM
FontOutline
.

Searchpath
d:/www/admin/pdf
.

FontAFM
OfficinaSans-Book=OWBK____.AFM
OfficinaSans-Bold=OWB_____.AFM
.

FontPFM
OfficinaSans-Book=OWBK____.PFM
OfficinaSans-Bold=OWB_____.PFM
.

FontOutline
OfficinaSans-Book=OWBK____.PFB
OfficinaSans-Bold=OWB_____.PFB
.

De fonts OWB_____.PFM, OWB_____.AFM etc. staan indiezelfde map als de UPR-file, ook het script staat indezelfde map.

Op deze manier krijg ik de volgende foutmelding:
Fatal error: PDFlib error: Couldn't open font file 'OWB_____.PFB' for TrueType font in d:\www\admin\pdf\envelop.php on line 32

ik heb geprobeerd om de regel om inte stellen waar de upr-file staat weg te halen en het script te veranderen in:

PHP:
1
2
3
4
5
6
pdf_set_parameter($pdf,"FontAFM","OfficinaSans-Bold=OWB_____.AFM");
pdf_set_parameter($pdf,"FontPFM","OfficinaSans-Bold=OWB_____.PFM");
pdf_set_parameter($pdf,"FontOutline","OfficinaSans-Bold=OWB_____.PFB");
$font_bold=pdf_findfont($pdf,"OfficinaSans-Bold","winansi",1);
pdf_set_font($pdf, $font_bold, 14,"winansi");
pdf_show_xy($pdf, $b->naam,246.6, 245.9);


dit mocht echter niet baten, ik heb gezocht hier op het forum, in de pdflib-manual en op google maar ik kon geen bevredigend antwoord vinden. misschien dat iemand hier mij kan helpen? b.v.d

[ Voor 7% gewijzigd door robg1984 op 02-04-2004 12:07 ]


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Heb je simpelweg Example 1. op php.net al geprobeerd? Heb je de versies van PHP en PDFlib gecheckt?

Zelf maak ik overigens gebruik van R&OS pdf class. Werkt goed, maar er is (nog) geen (goede) ondersteuning voor TrueType fonts.

Acties:
  • 0 Henk 'm!

  • robg1984
  • Registratie: December 2002
  • Laatst online: 17-09 11:18
x-lars, over die versies hoef je het neit te hebben, ik heb het namelijk gewoon werkend met de standaardlettertypes, het begint alleen te klooien op het moment dat ik een ander lettertype wil, daar gaat het dus alleen om, vandaar dat ik ook alleen dit stukje code gepost heb.

ik heb ook al gekeken naar die class, maar moet je daarvoor neit iets doen op de server zelf? ik host namelijk bij vevida...

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

robg1984 schreef op 23 maart 2004 @ 14:10:
[...] ik heb ook al gekeken naar die class, maar moet je daarvoor neit iets doen op de server zelf? ik host namelijk bij vevida...
Nee, je hoeft alleen maar een class te includen. Verder werkt het ongeveer net zoals de code die jij laat zien. Maar let zoals gezegd even op de font-ondersteuning.

Acties:
  • 0 Henk 'm!

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 25-10-2022

Banpei

Hachiroku on this touge?

Ik heb zelf truetype fonts embed in de pdf, en dat doe ik door het absolute pad op te geven. Het werkte wel als ik de font-alias van Windows opgaf, maar dan haalde deze ze op een windowsmachine uit de fontdir van windows en op een unix-machine kon pdflib deze opeens niet meer vinden.

AE86 gevonden! | So what I thought I'd do was, I'd pretend to be one of those deaf-mutes.


Acties:
  • 0 Henk 'm!

  • robg1984
  • Registratie: December 2002
  • Laatst online: 17-09 11:18
ok, heb die class nog eens gedownload en de readme gevolgd, als ik nu een eigenlettertype wil gebruiken en ik doe die uploaden enzo krijg ik deze melding:

"Het font 'oficina' bevat een ongeldige /BBox"

met deze code:

PHP:
1
2
3
4
5
6
7
8
9
10
include ('inc/class.ezpdf.php');
$pdf =& new Cezpdf();
$pdf->selectFont('./fonts/oficinabold.afm','none');
$pdf->addText(246.6,245.9,14,$b->naam);
$pdf->selectFont('./fonts/oficinabook.afm','none');
$pdf->addText(246.6,231.9,12,$tav);
$pdf->addText(246.6,217.9,12,$b->postadres);
$pdf->addText(246.6,203.9,12,$b->postpostcode." ".$b->postplaats);
$pdf->addText(246.6,189.9,12,$b->land); 
$pdf->ezStream();


deze fout geeft hij als hij in acrobat geopend word

[ Voor 16% gewijzigd door robg1984 op 23-03-2004 15:11 ]


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

offtopic:
lol, ik kon niet eerder reageren, omdat myn keyboard verzopen was.. (u raadt wel welke letter het tydelyk? niet doet..)


Zet error_reporting eens op E_ALL, dat moeten vast variabelen zyn IMO (naam > $naam, etc.)

Acties:
  • 0 Henk 'm!

  • robg1984
  • Registratie: December 2002
  • Laatst online: 17-09 11:18
x-lars: die variabelen zijn wel goed, hij zet namelijk wel tekst in de PDF maar in Helvetica,.
Ik krijg namelijk ook de melding dat "het lettertype 'officinabold' niet voorkomt in het woordenboek /Resources daarom wordt het standaard lettertype 'Helvetica' gebruikt." (dat zegt Acrobat Reader)

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Gebruik eens "../fonts" i.p.v. "./fonts" :)

Acties:
  • 0 Henk 'm!

  • robg1984
  • Registratie: December 2002
  • Laatst online: 17-09 11:18
nee kan niet want het mapje fonts zit in dezelfde map als het script dus met ./ zeg ik dat hij in deze map moet blijven, als ik dat weghaal maakt het geen verschil uit

Acties:
  • 0 Henk 'm!

  • robg1984
  • Registratie: December 2002
  • Laatst online: 17-09 11:18
mag ik neit eens een stukje code van jou zien?

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Snippet:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
error_reporting(E_ALL);
include ('../pdf/class.ezpdf.php');

$pdf =& new Cezpdf();
$pdf->addInfo('Title', 'Blaat');
$pdf->addInfo('Author', 'Blaat');
$pdf->addInfo('Subject', 'Blaat');
$pdf->selectFont('../pdf/fonts/Helvetica.afm');
$pdf->addPngFromFile('../pdf/logo.png', 50, 740, 150, 72);
$pdf->ezSetMargins(40,40,40,40);
$pdf->ezText("Blaat",10,array('justification' => 'right'));
$pdf->setLineStyle(1);
$pdf->line(40,740,555.38,740);

$pdfcode = $pdf->ezOutput();
$handle = fopen($filename,'wb');
fwrite($handle, $pdfcode);
fclose($handle);

// Maak mail met Mime Mail Class etc.

Het script staat dus in een andere map dan de pdf classes & fonts.
code:
1
2
3
4
5
6
|
\-- map met bovenstaand script
|
\-- pdf
      |
      \-- fonts


Edit: met stream stuur je het direct naar je browser, met output kun je het wegschrijven.

[ Voor 19% gewijzigd door X-Lars op 24-03-2004 10:01 ]


Acties:
  • 0 Henk 'm!

  • robg1984
  • Registratie: December 2002
  • Laatst online: 17-09 11:18
zoals ik het zie heb ik hetzelfde als jou, het script zelf geeft ook geen foutmeldingen, die komen pas als Acrobat Reader wordt geopend, deze herkend dat lettertype blijkbaar neit, heb jij geen ervaring met vreemde lettertypes?

Acties:
  • 0 Henk 'm!

  • robg1984
  • Registratie: December 2002
  • Laatst online: 17-09 11:18
het werkt al, vraag me niet hoe het lutke maar het werkt :)

Acties:
  • 0 Henk 'm!

  • robg1984
  • Registratie: December 2002
  • Laatst online: 17-09 11:18
bedankt

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Mooi :) ik loop hier heel hard te schreeuwen omdat ik nog steeds op zoek ben naar het font Verdana om in dit verband te gebruiken. Dus misschien dat ik van de gelegenheid gebruik kan maken en hier hetzelfde te vragen? :)

Edit: je hoeft niet 3x achter ekaar te posten, daar is de edit-knop voor :)

[ Voor 12% gewijzigd door X-Lars op 24-03-2004 10:31 ]


Acties:
  • 0 Henk 'm!

  • robg1984
  • Registratie: December 2002
  • Laatst online: 17-09 11:18
x-lars, ik zie dat jij ezSetmargin hebt gedaan en vervolgens ezText oim rechts uit te kunnen lijnen, helaas is het volgens mij neit mogelijk om die setmargin vaker te gebruiken, weet jij hoe ik dit op kan lossen? ik wil namelijk een paar cm lager ook rechts uitlijnen? of weet je een manier hoe ik de functie addText rechts kan uitlijnen?

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

RTFM :+

Weet het zo niet uit mijn hoofd, maar je kunt in ieder geval wel
PHP:
1
$pdf->ezSetY(60);
gebruiken om de text die je dan neerzet 60 punten van de onderkant te droppen. ezSetX() bestaat vast ook wel ;)

[ Voor 4% gewijzigd door X-Lars op 25-03-2004 10:58 ]

Pagina: 1