2017-08-03 59 views
1

我試圖顯示一個PDF文件,該文件作爲BLOB文件存儲在我的數據庫中。儘管我嘗試了幾種方法,但我似乎仍然無法做到。通過PHP從數據庫輸出PDF並通過Javascript顯示它

這裏是我(試圖)從我的數據庫下載一個PDF文件:「這LINE」

function fillArrays(){ 
$idArray = array(); 
    $sql = "SELECT oglas_id,slika,prioriteta FROM deska WHERE deska.datumz <= CURRENT_DATE AND deska.datumk >= CURRENT_DATE;"; 
    $result = mysqli_query($GLOBALS['conn'],$sql); 
    $resultCheck = mysqli_num_rows($result); 
    if($resultCheck>0){ 
     while($row = mysqli_fetch_assoc($result)){ 
      array_push($GLOBALS['idArray'],$row['oglas_id']); 
      $b64Doc = chunk_split(base64_encode(file_get_contents($row['slika']))); // THIS LINE! 
      $file = "data:application/pdf;base64,".$b64Doc; // THIS LINE! 
      array_push($GLOBALS['imgArray'],$file); // THIS LINE! 
      array_push($GLOBALS['prArray'],$row['prioriteta']); 
     } 
    }else{ 
     die("Oops there seems to be an error(arr)"); 
    } 
} 

我已標記的代碼應該把我的所有PDF文件從數據庫放入一個名爲$imgArray的PDF文件數組中。然後我json_encode的陣列,它在JavaScript中分配給imgArray變量:

var imgArray = <?php echo json_encode($imgArray) ?>; 

最後,我嘗試通過JavaScript創建一個表來顯示相同​​的PDF文件的4倍。 (我稱之爲createTable()在主PHP文件):

var idArray = window.idArray; 
var imgArray = window.imgArray; 
var prArray = window.prArray; 

var screenH = screen.height/2.1; 
var screenW = screen.width/2.1; 

var tdW; 
var tdH; 

function createTables(){ 

    if(idArray.length>2){ 
     rows=2; 
     cols=2; 
     tdW='100%'; 
     tdH='100%'; 
    }else if(idArray.length==2){ 
     rows=1; 
     cols=2; 
     tdW='100%'; 
     tdH='100%'; 
    }else if(idArray.length==1){ 
     tdW='100%'; 
     tdH='100%'; 
    } 

    var table = ''; 
    for(var r=0;r<rows;r++){ 
     table += '<tr>'; 
     for(var c=0;c<cols;c++){ 
      table += '<td style="max-width:'+tdW+';max-height:'+tdH+';" id="c'+c+r+'">'; 
      table += '<embed src="'+imgArray[1]+'" type="application/pdf" style="max-height:'+screenH+';max-width:'+screenW+';">'; 
      table += '</td>'; 
     } 
     table += '</tr>'; 
    } 
    document.write("<table>"+table+"</table>"); 
} 

看到,我嘗試嵌入PDF文件中的代碼的底部。網站上的輸出是這樣的:

enter image description here

語言是斯洛文尼亞和它說,該PDF文件已損壞。

+0

@timclutton不起作用..但現在的錯誤是不同的它說:流必須有數據。 –

+0

對不起,只是刪除了那條評論,因爲我看到你調用'file_get_contents'。也刪除它!從文件位置讀取,但是您說數據是BLOB。 – timclutton

+0

@timclutton我刪除了chunk_split和file_get_contents,現在它說「無效的pdf結構」 –

回答

0

json_encode數據服務器端,但不在客戶端調用JSON.parse。這意味着您正在將JSON編碼數據直接輸出到<script src="">屬性中。

更改PHP編碼過程中去除不必要的函數調用:

$b64Doc = base64_encode($row['slika']); 

然後,你需要修改你的JavaScript才能正確解析JSON。例如:

var imgArray = JSON.parse('<?= json_encode($imgArray); ?>'); 

for (var i = 0; i < imgArray.length; i++) { 
    table += '<embed src="' + imgArray[i] + '"></embed>'; 
} 
+0

@GašperBožič這是否解決了您的問題? – timclutton