【发布时间】:2020-09-22 05:28:52
【问题描述】:
我需要在 TWebBrowser 对象中显示一个 pdf 文件。
WebBrowser1.navigate(PDFFileName) 工作正常。
但我想从 TMemoryStream 加载 pdf 文件。
我有一个 base64 编码的 PDF 文件内容作为我的程序的输入,并在谷歌上搜索我写了这样的内容:
procedure WriteOnWB(EncodedPDFString: WideString);
var
Bytes: TBytes;
MS: TMemoryStream;
begin
Bytes := TNetEncoding.Base64.DecodeStringToBytes(EncodedPDFString);
MS := TMemoryStream.Create;
MS.WriteBuffer(Bytes, Length(Bytes));
MS.Seek(0, 0);
WebBrowser1.Navigate('about:blank');
(WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(MS));
end;
结果如下:
TWebBrowserResult
twebbrowser 无法识别文档的内容是 pdf 文件。
我想我忘了设置页面的内容类型之类的东西,比如SetContentType('Application/pdf')
我做错了什么?这甚至可能吗?
PS:我正在使用 Delphi XE7
【问题讨论】:
-
是的,你肯定需要将 content-type 设置为
application/pdf。 -
好的,但我该怎么做呢?
-
不知道,但其实用IE来显示PDF并不是一个好主意,因为它没有原生支持(需要安装Acrobat插件,现在是已弃用)。我建议改为嵌入 Chromium(请参阅 here)。
-
更正:从 IE 8 开始,Adobe 插件会自动安装,因此您无需再安装插件即可获得 PDF 支持。但是我仍然认为使用 Chromium 是一种更好(更强大)的解决方案。
-
好的@Olivier 我今天会看看。谢谢。
标签: delphi pdf delphi-xe7 twebbrowser