我想用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.js
和getFile.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
我真的不知道从哪里开始。我尝试的一切都行不通。
任何帮助都将不胜感激。