【问题标题】:Prevent PDF from automatically downloading防止 PDF 自动下载
【发布时间】:2015-06-26 10:36:59
【问题描述】:

我正在为物业租赁代理(房地产)构建一个 WordPress 网站,该网站链接到他们的物业管理系统 (LetMC)。

LetMC通过URL提供PDF房产小册子,例如(忽略小册子内容,待设计):

https://home.letmc.com/property.brochure?propertybrochure={060a-549c-6de2-8fcf}&Bucket=CubaLive_priestley

我已经建立了一个很好的系统来通过 AJAX 使用灯箱显示房产照片、宣传册和位置,所以我不想自动下载 PDF。目前我正在将 PDF 保存到临时文件夹并直接从站点 Web 服务器打开它,但理想情况下我想避免保存 PDF....

这可能吗??

当前进度:

/**
 * Lightbox Brochure
 *
 * Return property brochure to be viewed in a lightbox
 */
public static function lightbox_brochure() {
    $letmc_brochure_url = $_REQUEST['dataurl'];

    if ( isset( $letmc_brochure_url ) ) {

        $filename = generateRandomString() . '.pdf';
        $upload_dir = wp_upload_dir();

        if ( wp_mkdir_p($upload_dir['basedir']) ) {
            $file = $upload_dir['basedir'] . '/letmc_uploads/temp/' . $filename;
        }

        /**
         * Store in the temp filesystem
         */
        $ch = curl_init($letmc_brochure_url);
        $fp = fopen($file, 'wb');
        curl_setopt($ch, CURLOPT_FILE, $fp);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        $Result = curl_exec($ch);
        curl_close($ch);
        fclose($fp);

        $output = '';
        $output .= '<div class="lightbox"><iframe src="' . $upload_dir['baseurl'] . '/letmc_uploads/temp/' . $filename . '" width="97%" height="550"></iframe><button title="Close (Esc)" type="button" class="controls mod-close mfp-close"><i class="icon icon-close"></i></button></div>';

        echo $output;

    } else {
        echo '<p>Sorry, no brochure available.</p>';
    }

    die();
}

【问题讨论】:

  • 您想在您的网站内在线查看 pdf 吗?
  • @GiancarloColfer 理想情况下在灯箱内,所以我需要 iframe src 的文件名。当前系统有效……但它是最佳做法吗?另外,我不完全确定如何处理临时文件夹....我想在查看 PDF 后删除它,或者设置一个 cron 作业以每天清空一次文件夹

标签: php wordpress pdf


【解决方案1】:

您无需保存文件以便稍后显示。您可以简单地访问 PDF 文件并将其直接吐出到 iframe 中,如下所示:

创建文件getpdf.php

$url = urldecode($_GET['url']);
$pdf_data = file_get_contents($url);
header('Content-type: application/pdf');
echo $pdf_data;

修改你的代码(放在下面$output = '';):

$letmc_brochure_url = urlencode($letmc_brochure_url);

$output .= '&lt;div class="lightbox"&gt;&lt;iframe src="getpdf.php?url=' . $letmc_brochure_url . '" width="97%" height="550"&gt;&lt;/iframe&gt;&lt;button title="Close (Esc)" type="button" class="controls mod-close mfp-close"&gt;&lt;i class="icon icon-close"&gt;&lt;/i&gt;&lt;/button&gt;&lt;/div&gt;';

这里唯一的缺点是每次请求文件时,服务器都需要再次下载它(没有缓存),这可能会给您的服务器资源带来一些压力。

【讨论】:

  • 无法正常工作...尝试了类似的解决方案。我的 AJAX 响应是 PDF 代码。此外,这不适用于我的灯箱解决方案,因为我需要 iframe 源。感谢您的意见
  • 我已经更新了代码。创建一个新文件 getpdf.php 并将我的代码粘贴到其中。然后,您可以这样调用它:&lt;iframe src="getpdf.php?url=https://home.letmc.com/property.brochure?propertybrochure={060a-549c-6de2-8fcf}&amp;Bucket=CubaLive_priestley"&gt;&lt;/iframe&gt; 您可能需要`urlencode() / urldecode()` url 才能使其工作。
  • 你能写出完整的例子吗......我不知道你是怎么想到这个解决方案的,我觉得很奇怪
  • 我已经修改了答案。希望现在有意义。
  • 这给了我一个 iframe,里面有我的 404 页面 :) 抱歉,我认为你的方向不正确
【解决方案2】:

Google 的 Google Docs 有一个漂亮的 iframe 嵌入工具,可让您在线嵌入和查看文档(包括 pdf)!

查看下面的代码。您只需要提供文档的 url。

<iframe id="app-iframe" class="iframe-doc" src="http://docs.google.com/viewer?url=http://www.giancarlocolfer.com/wp-content/uploads/2015/04/pdf-sample.pdf&amp;embedded=true" height="600" width="680" title="PDF Sample" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

您可以在我的专业人士web development and design blog 上查看此PDF and Document Online Reader iframe 嵌入工具的现场演示/示例。

【讨论】:

  • 似乎无法与 LetMC 提供的 URL 一起使用,但恐怕……这将是一个不错的解决方案 :)
  • 您检查过脚本的标题输出吗?确保您发送的是:Content-type: application/pdf 然后再次尝试使用 google docs iframe 嵌入工具。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 2017-08-22
相关资源
最近更新 更多