【问题标题】:Can I set the "HTML" Title of a PDF file served by my Apache Web server我可以设置我的 Apache Web 服务器提供的 PDF 文件的“HTML”标题吗
【发布时间】:2011-08-05 18:30:45
【问题描述】:

我的 HTML 页面包含带有指向 PDF 文件的 href 的 标签。我的 Apache Web 服务器很好地为它们提供服务,但标题(如浏览器历史记录中所示)是文件名。我希望能够设置该标题。

也许有一个可以设置的标题?

我不想编写脚本来提供文件,因为服务器可以处理 Content-Encoding 协商(例如,gzip),并进行流控制,我不想重新创建这些。

【问题讨论】:

    标签: apache http-headers


    【解决方案1】:

    这是一个你可以设置的http头。

    Content-Disposition:inline; filename="*File name you want*";
    

    【讨论】:

    • 这会设置下载时的文件名,而不是chrome/firefox中显示的标题。
    【解决方案2】:

    我怀疑您遇到的问题是客户端浏览器将文件名存储在历史记录中,您无法修复。

    上次我查了一下,历史中的标题来自于HTML页面的设置(不是标题),所以标题应该没有HTTP标题字段。

    我不是 HTTP 专家,不知道所有领域,但我不记得在我曾经使用过的任何服务器中设置页面标题(只是状态代码、协议等)

    【讨论】:

    • 对——历史记录中的名称将是页面标题。但是正在获取的链接是针对静态资产(PDF 文件),而不是 HTML 文件,因此无法在(不存在的)Head 部分中设置 TITLE 标记。实际上 - Safari(我使用的)显示在历史“(无标题)”中。
    • 正如我所说,History 中的标题是 HTML head 部分的 子项。通过查看 HTTP 标头,无法设置页面的标题。如果您想让 PDF 标题显示在历史记录中,则需要一个可以查看 PDF 并呈现其标题的浏览器。
    【解决方案3】:

    很老的问题,我知道。 但是我今天遇到了完全相同的问题并找到了解决方案。

    我创建了一个这样的 PHP-Skript(例如 download.php,文件名无关紧要):

    <?php
    header("Content-Type: application/pdf");
    header('Content-Disposition: inline; filename="'.addslashes($_REQUEST['title']).'"'); //filename doesn't set the browser title here, only when page is saved/downloaded
    $content = file_get_contents($_REQUEST['filename']);
    header('Content-Length: '.strlen($content));
    echo $content;
    

    在我的设置(Windows 10;Apache 2.4.37;PHP 7.1.25)中,您现在可以执行如下请求: http://..../download.php/browser_title?filename=test.pdf

    我在 Chrome 和 Firefox 中成功测试了这个。 Internet Explorer 无法显示 PDF 文档内联:-/。 Microsoft Edge 还在标题栏中包含 URL 参数 :-(.

    【讨论】:

      猜你喜欢
      • 2016-08-08
      • 1970-01-01
      • 2023-04-08
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-05
      • 2013-09-02
      相关资源
      最近更新 更多