如何使用PHP更改文件的Title属性

问题描述 投票:0回答:2

用户使用我的PHP应用程序上传PDF文件,然后将它们存储在S3上。稍后其他用户查看文件,我在浏览器中显示“内联”。

问题是PDF的“标题”属性显示在浏览器选项卡中,通常会显示网站标题。由于它是由执行原始上传的用户设置的,因此它是任意的,因此我需要更改它。我该怎么做呢?

我认为Title是文件的扩展属性,但是安装了Ubuntu的xattr,当我在文件上运行它时,它什么也没有返回,所以也许我错了。

当我在S3上查看对象元数据时,没有提到Title属性,因此我不知道它在S3上的存储位置和方式。

我的偏好是使用OS调用重写Title属性,而不是安装另一个PHP扩展(例如xattr)。

编辑:这是返回响应的Laravel控制器方法

public function displayFile($id)
{
    $headers = ['Content-Type' => 'application/pdf', 'Content-Disposition' => 'inline'];
    return response(Storage::disk('private')->get("files/{$id}.pdf"), 200, $headers);
}
php ubuntu file-attributes
2个回答
1
投票

当你说'内联'时,你究竟是什么意思?您所描述的内容似乎更像是将它们指向文档URL。在这种情况下,标题将是PDF中包含的标题,只有一些PDF编辑器可以更改。我知道没有一个不会破坏文件(特别是那些具有交互式内容的文件)对于PHP来说很糟糕。如果您有权访问本机应用程序,可以尝试使用exiftool:https://askubuntu.com/questions/27381/how-to-edit-pdf-metadata-from-command-line

您可能想要做的是将文档显示在HTML文件中,如下所示:https://www.w3docs.com/snippets/html/how-to-embed-pdf-in-html.html注意:对各种浏览器进行大量测试,尤其是移动设备; PDF嵌入在移动浏览器中是众所周知的古怪。


0
投票

您应该可以向Content-Disposition 添加任意文件名以进行内联查看,就像您下载时一样。尝试这样的事情:

$headers = ['Content-Type' => 'application/pdf', 'Content-Disposition' => 'inline; filename=\"WhateverYouWantTheUsersToSee\"'];

(实际上不知道是否需要转义那些引号;如果没有,请取出反斜杠。)

© www.soinside.com 2019 - 2024. All rights reserved.