2013-08-21 5 views
4

FPDF 라이브러리를 사용하여 일부 문서 파일을 PDF로 내 보냅니다. 한 문서에는 길이가 다른 문자열 목록이 포함되어 있습니다. 모든 문자열을 $pdf->MultiCell()으로 인쇄합니다. 이제는 한 줄 이상의 줄이있을 경우 동일한 줄 간격을 갖도록 MultiCell의 현재 높이를 갖고 싶습니다.MultiCell 요소의 FPDF 높이

코드 예 :

//MySQL Query 
while($row = mysql_fetch_array($res) { 
    $pdf->SetXY(18, $x); 
    $pdf->MultiCell(80, 5, $rowr['text']); //text has one or more lines 
    $x = $x + 10; // Here I would prefer a solution to say: $x = $x + 2 + height of the MultiCell() 
} 
+0

정확히 무엇을하고 싶습니까? 당신은 높이가 필요하다고 말하지만 x 좌표를 동적으로 설정하고 폭을 얻고 싶습니까? 셀의 높이를 얻으려면'MultiCell()'의 앞뒤에'getY()'를 호출하십시오. –

답변

13

나는 똑같은 문제를 겪고; FPDF를 사용하여 송장을 생성하고 첫 번째 셀이 높이가 다른 MultiCell 인 행당 네 개의 셀이 있습니다 (기본 높이는 5이지만 순서 이름이 너무 길면 총 높이가 10이되는 다른 행이 추가됩니다) . 문제는 나머지 3 셀의 높이가 고정되어 있다는 것입니다.

해결책을 찾은 후에는 복잡한 기능을 작성하거나 제 3 자 도구를 사용하는 것이 유일한 방법 인 것 같습니다. 내 앱이 가능한 한 가벼운 것을 원하기 때문에 다음과 같은 접근 방식을 사용하여 내 의견으로는 외부 플러그인보다 간단합니다.

$pdf->SetXY(10,$Y); 
$pdf->MultiCell(60,5,$row['Name'],1,1,'L'); 
  • I을 다음과 같이 Y의 송장 시작에 대한 자세한 내용과

    1. 행 = 95 그래서 난 내 while 루프
    2. 내 첫 번째 셀 (다중 셀) 전 $Y=95; 를 사용하는 것입니다 FPDF의 GetY() 함수를 사용하여 현재 높이를 가져 와서 H로 저장합니다.

      $H = $pdf->GetY(); 
      

      MultiCell의 높이가 5 인 경우 GetY()는 100을 반환하고, 높이가 10이면 GetY()는 105를 반환합니다.

      $height= $H-$Y; 
      

      결과로 나에게 멀티 셀의 정확한 높이를 제공합니다

    3. 나는 새로운 변수 $ 높이를 추가합니다.

    4. 나는 현재 위치와 칼럼 높이 설정 $ Y 및 $ 높이 사용

      $Y=$H; 
      
    : while 루프 세트를 완료하기 전에

    $pdf->SetXY(130,$Y); 
    $pdf->Cell(40,$height,$row['RowName'],1,1,'L'); 
    
  • 을 Y $ H의 값을 $ 수득

    전체 루프는 다음과 같이 보이며 완벽하게 작동합니다.

    $Y= 95; 
    
    $query = mysqli_query($con,"SELECT * FROM table"); 
    
    while($row = mysqli_fetch_array($query)) { 
        $pdf->SetXY(10,$Y); 
        $pdf->MultiCell(60,5,$row['ROW1'],1,1,'L'); 
    
        $H = $pdf->GetY(); 
        $height= $H-$Y; 
    
        $pdf->SetXY(70,$Y); 
        $pdf->Cell(60,$height,$row['ROW2'],1,1,'L'); 
        $pdf->SetXY(130,$Y); 
        $pdf->Cell(40,$height,$row['ROW3'],1,1,'L'); 
        $pdf->SetXY(170,$Y); 
        $pdf->Cell(30,$height,$row['ROW4'],1,1,'L'); 
    
        $Y=$H; 
    } 
    

    각 행에 2 개 이상의 MultiCell 열이있는 경우 까다 롭긴하지만 비슷한 방식으로 해결할 수 있습니다.