从blob嵌入pdf到html / php页面

时间:2014-02-27 17:26:48

标签: php mysql pdf embed blob

我将PDF文档作为LONGBLOB存储在数据库中。有没有解决方案将这些PDF嵌入到网页中?我找到了JavaScript的PDFObject,但它只适用于存储在文件夹中的PDF文件。或者,我可以将blob中的PDF转换为足够长的时间来读取它吗?

目前,我使用以下脚本打开PDF:

require_once 'init.php';

$sql = "SELECT data FROM dms_files WHERE id=42";

// the result of the query
$result = mysql_query("$sql") or die("Invalid query: " . mysql_error());

// set the header for the image
header( "Pragma: private");
header( "Cache-Control: max-age=0");
header("Content-type: application/pdf");
header('Content-Transfer-Encoding: binary');
header('Content-Description: File Transfer');
header('Content-Transfer-Encoding: binary');

echo $pdf;

它将PDF作为文件打开,但不会将其嵌入页面中。

上传PDF:

$docData = addslashes(file_get_contents($_FILES['document']['tmp_name']));
$docProperties = filesize($_FILES['document']['tmp_name']);
$sqldoc = "INSERT INTO dms_files(mime ,data) VALUES('{$docProperties}', '{$docData}')";
$current_id = mysql_query($sqldoc) or die("<b>Error:</b> Problem on Doc. Insert<br/>" . mysql_error());
$docId = mysql_insert_id();

我试着用这个:

<?php
require_once 'init.php';

$sql = "SELECT * FROM dms_files WHERE id = 42 ";

// the result of the query
$result = mysql_query("$sql") or die("Invalid query: " . mysql_error());
$row = mysql_fetch_row($result);

$basedir = 'LIB/';
$pdfname = strtolower(preg_replace('/([^\w\d\-_]+)/', '-', $row->nazov_rd));
$filename = $basedir . $pdfname . '_' . $row->id. '.pdf';
$file_content = base64_decode($row->data);
file_put_contents('filename.pdf', $row->data);

?>

但是,它显示以下错误:

  

注意:尝试在第11行的/Applications/XAMPP/xamppfiles/htdocs/D/PDFSHOW/pdfshow.php中获取非对象的属性

     

注意:尝试在第12行的/Applications/XAMPP/xamppfiles/htdocs/D/PDFSHOW/pdfshow.php中获取非对象的属性

     

注意:尝试在第13行的/Applications/XAMPP/xamppfiles/htdocs/D/PDFSHOW/pdfshow.php中获取非对象的属性

     

注意:尝试在第14行的/Applications/XAMPP/xamppfiles/htdocs/D/PDFSHOW/pdfshow.php中获取非对象的属性

有什么问题?当我打开filename.pdf时,预览显示“文件无法打开,因为它是空的”


我能够解决它;这个缺失了:

while($row = mysql_fetch_object($rs)){

2 个答案:

答案 0 :(得分:0)

使用javascript pdfobject创建一个不同的页面,在其中嵌入此元素。

答案 1 :(得分:0)

这在Laravel 5.7中对我有用,它从数据库中获取了一个安排

 foreach ($documento as $obj) 
  { 
    // $file = substr($obj->Nombre,0,strlen($obj->Nombre)-3).'pdf';
    $filenombre = $Nombre.'.pdf';

    $bytes = base64_decode($obj->file);

    //header('Content-type: "'.$tipo.'"; charset=utf-8');
    header("Content-type: application/pdf"); 
    header('Content-Transfer-Encoding: binary'); 
    header('Content-disposition: attachment; filename='.basename($filenombre));    
    //header('Content-Length: ' . filesize($filenombre));   
    print $bytes; 
    //header('Content-Length: ' . filesize($filenombre));   
    //readfile($filenombre);    
    exit(0); 

  }