Я пытаюсь установить ширину букв для определенного «блока» текста в fpdf. Я искал и нашел только один способ установить ширину букв для всего документа, и даже это не сработало. Текст отправляется в генератор php fpdf.
$pdf->SetFont('Arial','b',85, LetterSpacing Here?);
Любая помощь?
К сожалению, вы не можете сделать это напрямую только с функциями FPDF. Здесь вам нужно закодировать новую функцию, которая воссоздает Cell()
с некоторыми новыми параметрами …
Но подождите … кто-то уже это сделал!
Он находится здесь: FPDF Add-On by Patrick Benny
Это такая отличная работа, что вам даже не нужно что-то еще! 🙂
Основываясь на других предоставленных ответах, я расширил класс FPDF, который мы используем, чтобы подчеркивание учитывало пользовательский интервал между буквами.
<?php class Custom_FPDF extends FPDF { protected $FontSpacingPt; // current font spacing in points protected $FontSpacing; // current font spacing in user units function SetFontSpacing($size) { if($this->FontSpacingPt==$size) return; $this->FontSpacingPt = $size; $this->FontSpacing = $size/$this->k; if ($this->page>0) $this->_out(sprintf('BT %.3f Tc ET', $size)); } protected function _dounderline($x, $y, $txt) { // Underline text $up = $this->CurrentFont['up']; $ut = $this->CurrentFont['ut']; $w = $this->GetStringWidth($txt)+$this->ws*substr_count($txt,' ')+(strlen($txt)-1)*$this->FontSpacing; return sprintf('%.2F %.2F %.2F %.2F re f',$x*$this->k,($this->h-($y-$up/1000*$this->FontSize))*$this->k,$w*$this->k,-$ut/1000*$this->FontSizePt); } }
Пример использования теста:
$pdf = new Custom_FPDF(); $pdf->AddPage(); $pdf->SetFont('Arial', 'BU', 11); $pdf->SetFontSpacing(3); $pdf->Cell(0, 10, 'Test of letter spacing with underline', 0, 1); $pdf->SetFontSpacing(0); $pdf->Cell(0, 10, 'Test of letter spacing with underline'); $pdf->Output();
Протестировано расширение FPDF версии 1.81
Это действительно позволит вам выполнить интервал между буквами:
// letter-spacing (0 for normal, 0.3 = 33%, 1 = 100%) function SetCharSpacing($cs) { $this->_out(sprintf('BT %.3F Tc ET',$cs*$this->k)); }
Поместите его в свой класс phpdf php.
function SetFontSpacing( $size ) { if ( $this->FontSpacingPt == $size ) return; $this->FontSpacingPt = $size; $this->FontSpacing = $size / $this->k; if ( $this->page > 0 ) $this->_out( sprintf( 'BT %.3f Tc ET', $size ) ); }
перед этим добавьте глобальную переменную в класс fpdf; var $ FontSpacingPt;
Надеюсь, что это поможет с лучшим классом fpdf.