pdf.js - 显示客户端无法访问的pdf。只能从后端访问

时间:2017-08-16 14:06:40

标签: javascript php html pdf

我想用pdf.js显示pdf。但是这个pdf文件不在我的项目所在的目录中,所以只能通过调用我的后端文件getFile.php来访问它,后端文件将整个文件作为响应返回。

这就是服务器上的树看起来与相关文件的对比(简化):

~
|-- Mediadrop
|   |-- this_is_the_pdf_i_want.pdf
|   |-- ...
|-- Webpage
|   |-- **index.html/js/css files etc.**
|   |-- getFile.php
|   |-- build
|   |   |-- pdf.js
|   |-- web
|   |   |-- viewer.html

要访问this_is_the_pdf_i_want.pdf,请拨打此getFile.php href="file.php?id=16",并运行以下代码。

// getFile.php

$id = htmlspecialchars($_GET["id"]);
$stmt = $mysqli->prepare("SELECT unique_id, container FROM media_files WHERE media_id = ?");

if (!$stmt) {
  error_log("prepare returned false");
  exit;
} else {
  $stmt->bind_param("i", $id);
}

$stmt->execute();
$stmt->bind_result($unique_id, $container);

while ($stmt->fetch()) {

  $filename = "../mediadrop/" . $unique_id; // $unique_id == this_is_the_file_i_want.pdf
  $fp = fopen($filename, "r");

  // send the right headers
  header("Content-Type: application/" . $container);
  header("Content-Length: " . filesize($filename));

  // dump the video and stop the script
  fpassthru($fp);
}

这将返回整个pdf文件的响应。

我无法“合并”pdf.jsgetFile.php来电,它看起来像这样: href="/web/viewer.html?file=file.php?id=16"这是无效的HTML。并且pdf.js希望文件名不是直接内容。我不能href="/web/viewer.html?file=../Mediadrop/this_is_the_pdf_i_want.pdf,因为禁止访问根文件夹之外的数据。

我已尝试过此renderPDF代码。

使用该代码,我可以成功地将我的PDF文件输出到<div>,但我希望完整的查看器(在新窗口中)具有默认viewer.html提供的所有选项。 renderPDF只需将原始pdf输出到div即可。

我这样打电话给renderPDF

renderPDF('file.php?id=16', document.getElementById('pdf_holder'));

也许我可以更改renderPDF代码中的一些代码,以便以某种方式将获取的PDF传递给pdf.js

或者renderPDF也会显示viewer.html

中提供的所有选项

我真的不知道从哪里开始。我尝试的一切都行不通。

任何帮助都将不胜感激。

0 个答案:

没有答案