Кажется, что Chrome pdf Viewer прочитает файл pdf и использует Title
документа pdf в качестве заголовка вашей страницы .
Воспроизведение
В целях тестирования давайте сначала загрузим стандарт протокола MQTT .Свойство Title
находится в 7184-й строке
<</Title(MQTT Version 3.1.1) /Author(OASIS Message Queuing Telemetry Transport \(MQTT\) TC) /Creator .... >>
В строке указано заголовок этого PDF-документа: MQTT Version 3.1.1
.
Теперь давайте проверим этот PDF-файл с помощью Chrome.Отправьте HTTP-запрос на /home/getattachment/123.pdf
:
GET /home/getattachment/123.pdf HTTP/1.1
Host: localhost:5001
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
и HTTP-ответ с сервера:
HTTP/1.1 200 OK
Content-Type: application/pdf
Server: Kestrel
Transfer-Encoding: chunked
Content-Disposition: inline; filename=wont_work_mqtt-v3.1.1-os.pdf; filename*=UTF-8''wont_work_mqtt-v3.1.1-os.pdf
Примечание последний сегмент URL равен 123.pdf
, а мы указываем имя файла как wont_work_mqtt-v3.1.1-os.pdf
в Content-Disposition
и на скриншоте нижепоказывает, что заголовок Tab и заголовок просмотра PDF оба являются оригинальными Title
документа PDF:
Walkaround
Если я изменю свойство Title
документа pdf на (itminus_MQTT Version 3.1.1)
, как показано ниже:
<<
/Title (itminus_MQTT Version 3.1.1)
/CreationDate (D:20141105132636-05'00')
/ModDate (D:20141105132636-05'00')
/Author (OASIS Message Queuing Telemetry Transport \(MQTT\) TC)
/Producer (Select.Pdf for .NET v2018.4.0)
/Creator (Microsoft� Word 2010)
>>
ответ будет:
Таким образом, обходной путь заключается в изменении свойства Title
документа PDF.Вы можете выбрать свою любимую библиотеку, чтобы сделать это, как вам нравится.Здесь я использую SelectPdf
для целей тестирования:
var cdhv= new ContentDispositionHeaderValue("inline");
cdhv.SetHttpFileName( attachmentFileName);
Response.Headers["Content-Disposition"] = cdhv.ToString();
if(mimeType == "application/pdf"){
SelectPdf.PdfDocument doc = null;
try{
doc = new SelectPdf.PdfDocument(fullPath);
var docinfo = doc.DocumentInformation;
docinfo.Title = attachmentFileName;
doc.Save(Response.Body);
}finally{
doc?.Close();
}
}else{
Response.Body.Write(content);
}
return ;
Это работает для меня.