Delphi:在TWebBrowser中显示PDF

我需要将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

iCMS 回答:Delphi:在TWebBrowser中显示PDF

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(因为它是Chrome)允许您通过base64编码的字符串显示PDF文件, 例如,在iframe代码中(请参见此answer):

<iframe src="data:application/pdf;base64,YOUR_BINARY_DATA" height="100%" width="100%"></iframe>
本文链接:https://www.f2er.com/2212567.html

大家都在问