如何在FPDF中仅修改PDF特定区域的字体大小而不全局变更?
问题解答:FPDI中局部修改字体大小(不改变全局设置)
当然可以实现这个需求!FPDF/FPDI的字体设置是即时生效的,你完全可以在需要调整的特定区域临时修改字体大小,写完该区域的内容后再恢复原来的全局字体大小即可,不会影响其他部分的文本。
具体到你的代码,只需要在SetXY定位后(或者定位前)临时设置新的字体大小,写入内容后再把字体大小改回全局的9号就好。这里我给你修改后的代码示例,标注了关键修改点:
<?php require_once('../../bus_partners/fpdf/fpdf/fpdf.php'); require_once('../../bus_partners/fpdf/fpdi/fpdi.php'); $pageCount = $pdf->setSourceFile('../../bus_partners/BIR-forms/2316.pdf') ; $tplIdx = $pdf->importPage(1, '/MediaBox'); $pdf->SetAutoPageBreak(false) ; $pdf->addPage('P', 'Legal') ; $pdf->useTemplate($tplIdx, 8, 12, 200, 320) ; // setting the font size for the whole page $pdf->SetFont('Arial'); $pdf->SetFontSize(9); $pdf->SetTextColor(12, 12, 12); // 修改特定区域的字体大小 $pdf->SetXY(17, 80) ; // 临时设置新的字体大小,比如改成12号(你可以按需调整数值) $pdf->SetFontSize(12); $pdf->Write(0, $address_ee) ; // 恢复全局的9号字体大小,确保后续内容不受影响 $pdf->SetFontSize(9); // 后续如果还有其他内容,依然会使用9号字体 // $pdf->SetXY(xx, xx); // $pdf->Write(0, '其他全局字体大小的内容'); ?>
小提示:
- 如果你担心后续忘记恢复字体大小,也可以先把全局字体大小存到变量里,比如
$originalFontSize = 9;,之后恢复时直接用$pdf->SetFontSize($originalFontSize);,这样更灵活。 - 如果你需要同时修改字体类型(比如从Arial改成Times),也可以用同样的逻辑:临时调用
$pdf->SetFont('Times', '', 12);,写完后再切回原来的字体设置。
内容的提问来源于stack exchange,提问作者dan




