web-dev-qa-db-ja.com

FPDF-インラインの太字テキスト

PDF from PHPを作成しようとしていますが、法的な理由により、免責事項の一部をBOLDにする必要があり、免責事項の概要を説明する必要があります。

私の現在のコードは以下を使用しています:

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');
}

現在、ドキュメントの他の部分にWriteHTMLを使用しており、MultiCellの代わりにWriteHTMLを簡単に使用できますが、境界線を作成するにはどうすればよいですか?

したがって、2つのオプションがあります。

ネイティブFPDF関数

長所:境界線のオプションを与える

短所:インラインテキストを太字にする簡単な方法はありません

WriteHTML拡張クラス

長所:太字のテキストを簡単にインラインで追加できます

短所:境界線の作成方法がわからない

提案?

拡張機能の一部を書き直すこともできますが、拡張機能writeHTMLを使用してから、writeHTMLで作成したセルの上に境界線のあるセル(空のテキスト)を描画する方が簡単な場合があります。セルを適切に調整することで、機能するはずです。

SetY then SetXを使用してセルを配置することを忘れないでください。

例:

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');
 } 
8
Venom

Write()&Rect() を使用します。

例:

$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();

Rect()パラメーターの幅と高さをいじくり回す必要があります。この場合、width = 2およびheightを0.1 ser Units に設定します。

5
Timothy Law

私は他の解決策を見つけます。

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

ファイルfpdf.php内にフラグメントコードwrite_tagをコピーして貼り付け、pdfの作成中に関数write_tagを呼び出し、これをPDFのテキストでフォーマットできます。

これが私がそれを解決した方法です:

$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');

基本的に、1つのセルを作成し、フォントを変更してから、太字にしたいテキストの幅を持つ別のセルを変更します。

ただし、HTML/Bladeテンプレートなどを使用するPDFを作成するためのより優れたツールがあるように思われるので、それを使用することを検討することをお勧めします。

1
mkrell

または、 [〜#〜] tcpdf [〜#〜] は、 writeHTMLCell() 、構文 here を介してHTMLを含むCellの書き込みをサポートします。

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

FPDFよりも便利なTCPDF

TCPDFで

マルチセルで$ ishtmlパラメータをtrueに設定すると、htmlプロパティをテキストに適合させることができます。

$text = "It <b>must</b> be like that";

$this->MultiCell($w, $h, $text, $border, $align, $fill, $ln, $x, $y, $reseth, $stretch, true, $autopadding, $maxh);

デフォルトの機能。

MultiCell($w, $h, $txt, $border=0, $align='J', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0)

あなたがする必要がある機能

MultiCell($w, $h, $txt, $border=0, $align='J', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=true, $autopadding=true, $maxh=0)

お役に立てば幸いです。

0