当前位置: 首页 > 知识库问答 >
问题:

下载pdf文件

傅鸿波
2023-03-14

我可以通过以下服务下载pdf文件:

$app->options('/docDownload',function(){}); // This one just so you can accept OPTIONS
$app->get('/docDownload', function () use ($app){

    $path = "working.pdf";
    $res = $app->response();
    $res['Content-Description'] = 'File Transfer';
    $res['Content-Type'] = 'application/octet-stream';
    $res['Content-Disposition'] ='attachment; filename=' . basename($path);
    $res['Content-Transfer-Encoding'] = 'binary';
    $res['Expires'] = '0';
    $res['Cache-Control'] = 'must-revalidate';
    $res['Pragma'] = 'public';
    $res['Content-Length'] = filesize($path);
    readfile($path);
});

但是,当我运行该服务时,我得到了以下响应:

%PDF-1.5

%���� 10 obj

要打开pdf,我需要用第二个鼠标按钮点击响应链接:

WS网址

然后选择“在新选项卡中打开”以打开pdf文件,看起来您正在运行该服务两次以获得一次pdf文件。

我想自动打开每个请求到WS的pdf文件

这意味着每次您请求WS时,都应该返回直接在屏幕中打开的pdf文件。

有人能帮我修一下吗?

Tks

共有2个答案

曹焱
2023-03-14

一个解决方案可能是不使用AJAX调用下载文件(看起来您是这样使用的)。这是您的页面下载页面的方式:

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
var PDF_DOWNLOAD_URL = "{{ urlFor('PDFDownload') }}";
$(function(){
    //Your old way
    $("button.download-file").click(function(){
        $.ajax({
            method: "GET",
            url: PDF_DOWNLOAD_URL,
            headers: { 'x-my-custom-header': 'some value' },
            success: function(data){
                console.log("Data received:", data);
            }
        });
    });

});
</script>
</head>
<body>

<button type="button" class="download-file">Download the document</button>

</body>
</html>

您的路线应以以下方式定义名称:

$app->get('/docDownload', function () use ($app){
    $path = "working.pdf";
    $res = $app->response();
    $res['Content-Description'] = 'File Transfer';
    $res['Content-Type'] = 'application/json';
    $res['Content-Transfer-Encoding'] = 'binary';
    $res['Expires'] = '0';
    $res['Cache-Control'] = 'must-revalidate';
    $res['Pragma'] = 'public';
    $fileData = file_get_contents($path);
    $base64 = base64_encode($fileData);
    $response = array();
    $response['pdf'] = $base64;
    $response['customKey'] = "My Custom Value";
    echo json_encode($response);
})->name("PDFDownload");
祁乐邦
2023-03-14

也许你需要使用正确的MIME类型,试试这个

$res['Content-Type']='应用程序/pdf';

 类似资料:
  • 我的python3代码: 它将内容保存在metadat.pdf但那不是pdf的真正内容,它是这个html页面: 任何帮助,我如何才能保存文件的真实内容,而不是这个html?它应该是真正的pdf,当我下载它是jsut这个html页面 更新: 当我使用Python会话时,从服务器的一个NSWER:

  • 问题内容: 我正在构建一个应用程序,以从后端服务器下载PDF文件。我写了以下代码: 在后端服务器上,方法如下: 我从我的适配器调用此rest方法为: 通话结束后,我从此服务获得以下响应: 如何解析此响应为PDF文件并将其显示给用户?当我使用以下代码从应用程序中简单地调用此适配器方法时,当我右键单击适配器并选择运行为“调用移动适配器”时,也会收到此响应: 我在浏览器的控制台上得到了相同的响应,但是正

  • 问题内容: 我想下载一个jQueryajax响应的pdf文件。Ajax响应包含pdf文件数据。。我的代码在下面给出,但是我总是得到一个空白的pdf。 问题答案: jQuery使用AJAX请求加载二进制数据时存在一些问题,因为它尚未实现某些HTML5 XHRv2功能 鉴于此,您拥有以下两种解决方案之一: 第一个解决方案是放弃JQuery并使用XMLHTTPRequest 与本地HTMLHTTPReq

  • 问题内容: 我正在尝试使浏览器下载从ajax响应接收到的pdf文件。 受jquery ajax下载pdf文件启发,我模拟了如下单击/下载事件: 不幸的是,这仅适用于Chrome,不适用于Firefox + IE。当我尝试在最后两个浏览器中触发它时,没有任何反应。 由于从CMS继承,脚本和标记被放置在iframe中,但是我不确定这是否有影响。 关于如何针对所有现代浏览器进行优化的想法? 问题答案:

  • 我正在实现一个ASP api来完成所有Docusign api流(获取登录信息,获取令牌,发送要签名的信封,下载信封文档)。现在我试图在浏览器中显示一个下载的文档,该文档是空白的。我正在从docusign接收文档字节内容,并试图将其呈现在iframe中。 docusign发送的PDF内容如下 更新 如果文档超过1页,则可以看到所有页面,全部为空白······

  • 问题内容: 通过XHR请求下载pdf文件是否完全不可能?我知道已经有许多关于此主题的讨论,但可悲的是,我仍然对它们不满意。我正在使用AngularJs并使用其方法发出请求。它不返回任何文件下载弹出窗口。但是,如果在新的“浏览器窗口”中使用相同的URL进行点击,则会弹出一个窗口。我已经尝试了一个工作环境,并且可以正常工作,但是如果执行此操作,那么在下载弹出窗口准备就绪并出现之前,我无法显示等待的图像