Delphi: 在 TWebBrowser 中显示 PDF
Delphi: Display a PDF in a TWebBrowser
我需要将 pdf 文件显示到 TWebBrowser 对象中。
WebBrowser1.navigate(PDFFileName)
工作正常。
但我想从 TMemoryStream 加载 pdf 文件。
我有一个 base64 编码的 PDF 文件内容作为我的程序的输入并在 google 上搜索我写了这样的东西:
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
TWebBrowser 是一个嵌入式 IE 实例,如果您不将其保存为物理文件,IE 将不允许您显示 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);
MS.SaveToFile('FileName.pdf');
// Now you can navigate to 'FileName.pdf'
WebBrowser1.Navigate('FileName.pdf');
end;
另一种解决方案是使用 Chromium(正如 Olivier 所建议的)。
Chromium(因为它是 Chrome)允许您通过 base64 编码的字符串显示 PDF 文件,
例如,在 iframe 标记内(参见 answer):
<iframe src="data:application/pdf;base64,YOUR_BINARY_DATA" height="100%" width="100%"></iframe>
我需要将 pdf 文件显示到 TWebBrowser 对象中。
WebBrowser1.navigate(PDFFileName)
工作正常。
但我想从 TMemoryStream 加载 pdf 文件。
我有一个 base64 编码的 PDF 文件内容作为我的程序的输入并在 google 上搜索我写了这样的东西:
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
TWebBrowser 是一个嵌入式 IE 实例,如果您不将其保存为物理文件,IE 将不允许您显示 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);
MS.SaveToFile('FileName.pdf');
// Now you can navigate to 'FileName.pdf'
WebBrowser1.Navigate('FileName.pdf');
end;
另一种解决方案是使用 Chromium(正如 Olivier 所建议的)。 Chromium(因为它是 Chrome)允许您通过 base64 编码的字符串显示 PDF 文件, 例如,在 iframe 标记内(参见 answer):
<iframe src="data:application/pdf;base64,YOUR_BINARY_DATA" height="100%" width="100%"></iframe>