web-dev-qa-db-fra.com

FPDF - Texte gras intégré

J'essaie de créer un PDF de PHP et, pour des raisons juridiques, nous devons inclure une partie de notre clause de non-responsabilité BOLD et cette dernière doit être décrite.

Mon code actuel utilise:

if(isset($_POST['optout']) && $_POST['optout'] == "yes"){
    $pdf->Ln(5);
    $pdf->SetFont('Arial','I',12);
    $pdf->SetTextColor(128);
    $pdf->MultiCell(0,4,'This is my disclaimer. THESE WORDS NEED TO BE BOLD. These words do not need to be bold.',1,'C');
}

J'utilise actuellement WriteHTML pour d'autres parties du document et je pourrais facilement l'utiliser à la place de MultiCell, mais comment puis-je créer la bordure?

Donc j'ai 2 options ..

Fonctions FPDF natives

Avantages: Donne une option pour une bordure

CONS: Pas de moyen facile de mettre du texte en gras en gras

Classe d'extension WriteHTML

PROS: me permet d'ajouter facilement du texte en gras en ligne

CONS: Pas sûr de savoir comment créer la bordure

Suggestions?

9
iwrestledabearonce

Vous pouvez réécrire une partie de l'extension, mais il peut être plus facile d'utiliser l'extension writeHTML, puis dessinez une cellule (texte vide) avec une bordure sur la cellule créée avec writeHTML. En ajustant correctement vos cellules, cela devrait fonctionner.

N'oubliez pas d'utiliser SetY then SetX pour positionner vos cellules.

Exemple:

if(isset($_POST['optout']) && $_POST['optout'] == "yes"){
   $pdf->Ln(5);
   $pdf->SetFont('Arial','I',12);
   $pdf->SetTextColor(128);

   //Your text cell
   $pdf->SetY($pos_Y);
   $pdf->SetX($pos_X);
   $pdf->writeHTML('This is my disclaimer. <b>THESE WORDS NEED TO BE BOLD.</b> These words do not need to be bold.');

   //Your bordered cell
   $pdf->SetY($pos_Y);
   $pdf->SetX($pos_X);
   $pdf->Cell($width, $height, '', 1, 0, 'C');
 } 
7
Venom

Utilisez Write () & Rect () .

Exemple:

$pdf->Rect($pdf->GetX(),$pdf->GetY(),2,0.1);
$pdf->SetFont('Arial','',8);
$pdf->Write(0.1,"this is not bold, but this ");
$pdf->SetFont('Arial','B',8);
$pdf->Write(0.1,"is bold.");
$pdf->SetFont('Arial','',8);
$pdf->Ln();

Vous devez jouer avec la largeur et la hauteur des paramètres Rect (). Dans ce cas, je règle width = 2 et height à 0.1 User Units .

4
Timothy Law

Je trouve une autre soluction.

http://fpdf.de/downloads/add-ons/tag-based-formatting.html

copier et coller le code de fragment write_tag dans le fichier fpdf.php, appelez la fonction write_tag lors de la création du fichier pdf;.

1

Voici comment je l'ai résolu:

$pdf->SetFont('Arial','',10);
$cell = 'This is my disclaimer.';
$pdf->Cell($pdf->GetStringWidth($cell),3,$cell, 0, 'L');
$pdf->SetFont('Arial','B',10);
$boldCell = "THESE WORDS NEED TO BE BOLD.";
$pdf->Cell($pdf->GetStringWidth($boldCell),3,$boldCell, 0, 'L');
$pdf->SetFont('Arial','',10);
$cell = 'These words do not need to be bold.';
$pdf->Cell($pdf->GetStringWidth($cell),3,$cell, 0, 'L');

Essentiellement, créez une cellule, changez la police, puis une autre cellule avec la largeur du texte que vous souhaitez mettre en gras, etc.

Il semble exister de meilleurs outils pour créer des PDF utilisant des modèles HTML/Blade, par exemple. Vous voudrez peut-être envisager de l'utiliser. 

1
mkrell

Sinon, TCPDF prend en charge l'écriture d'une cellule contenant du code HTML via writeHTMLCell () , syntaxe ici .

$pdf->writeHTMLCell($width, $height, $x, $y, "<b>bold</b> and <u>underlined</u> text.");
0
lubosdz