gpt4 book ai didi

php - 我想使用 fpdf 增加特定的列宽

转载 作者:行者123 更新时间:2023-11-29 17:03:05 25 4
gpt4 key购买 nike

我的查询中有三列,如果过度扩展,则第一列。所以我想修改函数 Calcwidths 以使第二列宽度减小。或者修改整个表格,使其根据单元格内容进行调整。

请告诉我具体该怎么做,因为我不太了解 fpdf。谢谢。

<?php
require('fpdf.php');

class PDF_MySQL_Table extends FPDF
{
protected $ProcessingTable=false;
protected $aCols=array();
protected $TableX;
protected $HeaderColor;
protected $RowColors;
protected $ColorIndex;

function Header()
{
// Print the table header if necessary
if($this->ProcessingTable)
$this->TableHeader();
}

function TableHeader()
{
$this->SetFont('Arial','B',12);
$this->SetX($this->TableX);
$fill=!empty($this->HeaderColor);
if($fill)
$this->SetFillColor($this->HeaderColor[0],$this->HeaderColor[1],$thisHeaderColor[2]);
foreach($this->aCols as $col)
$this->Cell($col['w'],6,$col['c'],1,0,'C',$fill);
$this->Ln();
}

function Row($data)
{
$this->SetX($this->TableX);
$ci=$this->ColorIndex;
$fill=!empty($this->RowColors[$ci]);
if($fill)
$this->SetFillColor($this->RowColors[$ci][0],$this->RowColors[$ci][1],$this->RowColors[$ci][2]);
foreach($this->aCols as $col)
$this->Cell($col['w'],5,$data[$col['f']],1,0,$col['a'],$fill);
$this->Ln();
$this->ColorIndex=1-$ci;
}

function CalcWidths($width, $align)
{
// Compute the widths of the columns
$TableWidth=0;
foreach($this->aCols as $i=>$col)
{
$w=$col['w'];
if($w==-1)
$w=$width/count($this->aCols);
elseif(substr($w,-1)=='%')
$w=$w/100*$width;
$this->aCols[$i]['w']=$w;
$TableWidth+=$w;
}
// Compute the abscissa of the table
if($align=='C')
$this->TableX=max(($this->w-$TableWidth)/2,0);
elseif($align=='R')
$this->TableX=max($this->w-$this->rMargin-$TableWidth,0);
else
$this->TableX=$this->lMargin;
}

function AddCol($field=-1, $width=-1, $caption='', $align='L')
{
// Add a column to the table
if($field==-1)
$field=count($this->aCols);
$this->aCols[]=array('f'=>$field,'c'=>$caption,'w'=>$width,'a'=>$align);
}

function Table($con, $query, $prop=array())
{
// Execute query
$res=mysqli_query($con,$query) or die('Error: '.mysqli_error($con)." <br>Query: $query");
// Add all columns if none was specified
if(count($this->aCols)==0)
{
$nb=mysqli_num_fields($res);
for($i=0;$i<$nb;$i++)
$this->AddCol();
}
// Retrieve column names when not specified
foreach($this->aCols as $i=>$col)
{
if($col['c']=='')
{
if(is_string($col['f']))
$this->aCols[$i]['c']=ucfirst($col['f']);
else
$this->aCols[$i]['c']=ucfirst(mysqli_fetch_field_direct($res,$col['f'])->name);
}
}
// Handle properties
if(!isset($prop['width']))
$prop['width']=0;
if($prop['width']==0)
$prop['width']=$this->w-$this->lMargin-$this->rMargin;
if(!isset($prop['align']))
$prop['align']='C';
if(!isset($prop['padding']))
$prop['padding']=$this->cMargin;
$cMargin=$this->cMargin;
$this->cMargin=$prop['padding'];
if(!isset($prop['HeaderColor']))
$prop['HeaderColor']=array();
$this->HeaderColor=$prop['HeaderColor'];
if(!isset($prop['color1']))
$prop['color1']=array();
if(!isset($prop['color2']))
$prop['color2']=array();
$this->RowColors=array($prop['color1'],$prop['color2']);
// Compute column widths
$this->CalcWidths($prop['width'],$prop['align']);
// Print header
$this->TableHeader();
// Print rows
$this->SetFont('Arial','',11);
$this->ColorIndex=0;
$this->ProcessingTable=true;
while($row=mysqli_fetch_array($res))
$this->Row($row);
$this->ProcessingTable=false;
$this->cMargin=$cMargin;
$this->aCols=array();
}
}
?>

<?php
session_start();

class PDF extends PDF_MySQL_Table
{
function Header()
{
// Title
$this->SetFont('Arial','',18);
$this->Cell(0,6,'Server/URL Details',0,1,'C');
$this->Ln(10);
// Ensure table header is printed
parent::Header();
}
}


$pdf = new PDF();
$pdf->AddPage();

$query = "SELECT DISTINCT Server_Name,Server_Status,Server_Type FROM server where ENV_NAME='{$_SESSION['envt_name']}' && ENV_TYPE = '{$_SESSION['envt_type']}'";

$pdf->Table($con,$query);
$pdf->AddPage();
$querytwo = "SELECT DISTINCT URL_Name,URL_Status,URL_Type FROM url where ENV_NAME='{$_SESSION['envt_name']}' && ENV_TYPE = '{$_SESSION['envt_type']}'";
$pdf->Table($con,$querytwo);
$pdf->Output();
?>

最佳答案

试试这个;)我设置第二列宽度为50,你可以改变它。

function CalcWidths($width, $align)
{
// Compute the widths of the columns
$TableWidth=0;
foreach($this->aCols as $i=>$col)
{
$w=$col['w'];
if ($i != 1) {
if($w==-1)
$w=$width/count($this->aCols);
elseif(substr($w,-1)=='%')
$w=$w/100*$width;
} else {
**//Your custom width for second column**
$w = 50;
}
$this->aCols[$i]['w']=$w;
$TableWidth+=$w;
}
// Compute the abscissa of the table
if($align=='C')
$this->TableX=max(($this->w-$TableWidth)/2,0);
elseif($align=='R')
$this->TableX=max($this->w-$this->rMargin-$TableWidth,0);
else
$this->TableX=$this->lMargin;
}

关于php - 我想使用 fpdf 增加特定的列宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52161320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com