2017-01-23 119 views
0

我嘗試將一些數據從MYSQLi保存爲pdf。文件是通過瀏覽器下載的,但是當我嘗試打開它時,Adobe喊我「已損壞」。這裏是我的代碼:PHP,fpdf,損壞的文件下載

ob_start(); 
require('fpdf.php'); 
$pdf = new FPDF(); 
$pdf->AddPage('A4'); 
$pdf->SetFont('Arial','',16); 
$line="Użytkownik: ".$login." Miesiąc: ".$miesiac." Dzień: ".$dzien; 
$pdf->Cell(0,5,$line); 
$query="select * from ".$prefix."_Przychody where Login='$login'"; 
$start=mysqli_query($link, $query); 
while($dane=mysqli_fetch_assoc($start)) 
{ 
    $data=date("Y-m-").$dzien; 
    if($dane['Data']==$data) 
    { 
     $line="Opis: ".$dane['Opis']." Kategoria: ".$dane['Kategoria_przychodu']." Kwota: ".$dane['Kwota']."."; 
     $pdf->Cell(0,5,$line); 
     $y = $pdf->GetY(); 
     $pdf->SetXY(0,$y+10); 
    } 
} 

$query="select * from ".$prefix."_Wydatki where Login='$login'"; 
$start=mysqli_query($link, $query); 
while($dane=mysqli_fetch_assoc($start)) 
{ 
    $data=date("Y-m-").$dzien; 
    if($dane['Data']==$data) 
    { 
     $line="Opis: ".$dane['Opis']." Kategoria: ".$dane['Kategoria_przychodu']." Kwota: ".$dane['Kwota']."."; 
     $pdf->Cell(0,5,$line); 
     $y = $pdf->GetY(); 
     $pdf->SetXY(0,$y+10); 

    } 
} 
$name=$login.".pdf"; 
$pdf->Output('D',$name,true); 
ob_end_flush(); 

順便說一句。我嘗試保存某些日期的數據,併爲使用波蘭名稱感到遺憾,但它不是我的數據庫:D

+0

如果您保存PDF到磁盤的服務器上,你可以打開生成的PDF,然後,在服務器上,或者如果你FTP到你的系統? – RiggsFolly

+0

PS:你不需要'ob_start()'和'ob_flush()',也許這就是造成問題的原因 – RiggsFolly

+0

Ya當我將它保存在服務器上時,我可以打開它,但我需要將它保存在本地計算機上 –

回答

0

現在我創建PDF文件並將其保存到我的服務器。這個文件是可以的,我可以打開它並在Adobe中讀取,但是當我嘗試將它保存在本地計算機上並打開時,Adobe再次將它的損壞喊出來。在後以上是我的代碼來創建PDF文件,這裏是我的代碼從服務器下載到本地計算機:

if($zapis==1) 
{ 
$file = $login.".pdf"; 
if(!$file){ 
header('Location: index.php?w=laczne_podsumowanie'); 
} 
else 
{ 
header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header("Content-Disposition: attachment; filename=$file"); 
header("Content-Type: application/pdf"); 
header("Content-Transfer-Encoding: binary"); 
readfile($file); 
} 
} 

現在怎麼我可以編輯代碼下載沒有損壞的PDF文件。 我將不勝感激任何答案。 和平:)

編輯:我使用修復此:

flush(); 
ob_clean(); 

前:

readfile($file);