【问题标题】:Output PDF from database via PHP and display it via Javascript通过 PHP 从数据库输出 PDF 并通过 Javascript 显示
【发布时间】:2017-08-03 08:34:38
【问题描述】:

我正在尝试将存储在数据库中的 PDF 文件显示为 BLOB 文件。虽然我已经尝试了几种方法,但我似乎仍然无法做到正确。

这是我(尝试)从我的数据库中下载 PDF 文件的方法:

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 次。 (我在 PHP 主文件中调用 createTable()):

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 文件的代码底部。网站上的输出是这样的:

语言是斯洛文尼亚语,它说 PDF 文件已损坏。

【问题讨论】:

  • @timclutton 不起作用.. 但是现在的错误是不同的,它说:流必须有数据。
  • 抱歉,刚刚删除了该评论,因为我看到您致电 file_get_contents。也删除它!从文件位置读取,但您说数据是 BLOB。
  • @timclutton 我删除了 chunk_split 和 file_get_contents 现在它说“无效的 pdf 结构”

标签: javascript php arrays pdf


【解决方案1】:

json_encode 数据服务器端,但不要在客户端调用 JSON.parse。这意味着您将 JSON 编码的数据直接输出到 &lt;script src=""&gt; 属性中。

更改 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>';
}

【讨论】:

  • @GašperBožič 这解决了您的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
  • 2011-07-03
相关资源
最近更新 更多