Loafl PDF在Cefsharp 71中未打开

我正在尝试在cefsharp浏览器本身中打开pdf。但是当我打开pdf时什么也没显示。我已将日志设置为错误级别,但是其中没有错误。

这就是我注册CefCustomScheme的方式:

 settings.RegisterScheme(new CefCustomScheme
                {
                    SchemeName = CefSharpSchemeHandlerFactory.SchemeName,SchemeHandlerFactory = new CefSharpSchemeHandlerFactory(),IsCSPBypassing = true,});

这是我的CefSharpSchemeHandlerFactory:

public class CefSharpSchemeHandlerFactory : ISchemeHandlerFactory
    {
        public const string SchemeName = "local";
        public IResourceHandler Create(IBrowser browser,IFrame frame,string schemeName,IRequest request)
        {
            if (schemeName == SchemeName && request.Url.EndsWith("CefSharp.Core.xml",System.StringComparison.OrdinalIgnoreCase))
            {
                //Convenient helper method to lookup the mimeType
                var mimeType = ResourceHandler.GetMimeType(".xml");
                //Load a resource handler for CefSharp.Core.xml
                //mimeType is optional and will default to text/html
                return ResourceHandler.FromFilePath("CefSharp.Core.xml",mimeType);
            }
            return new CefSharpSchemeHandler();
        }
    }

这是我的CefSharpSchemeHandler:

    internal class CefSharpSchemeHandler : IResourceHandler
    {
        private static readonly IDictionary<string,string> ResourceDictionary;

        private string mimeType;
        private MemoryStream stream;

        static CefSharpSchemeHandler()
        {
        } 

        bool IResourceHandler.ProcessRequest(IRequest request,ICallback callback)
        {
            // The 'host' portion is entirely ignored by this scheme handler.
            var uri = new Uri(request.Url);
            var fileName = uri.AbsolutePath;
            string resource;
            if (ResourceDictionary.TryGetvalue(fileName,out resource) && !string.IsnullOrEmpty(resource))
            {
                Task.Run(() =>
                {
                    using (callback)
                    {
                        var bytes = Encoding.UTF8.GetBytes(resource);
                        stream = new MemoryStream(bytes);

                        var fileExtension = Path.GetExtension(fileName);
                        mimeType = ResourceHandler.GetMimeType(fileExtension);

                        callback.Continue();
                    }
                });

                return true;
            }
            else
            {
                callback.Dispose();
            }

            return false;
        }


        void IResourceHandler.GetResponseHeaders(IResponse response,out long responseLength,out string redirectUrl)
        {
            responseLength = stream == null ? 0 : stream.Length;
            redirectUrl = null;

            response.StatusCode = (int)HttpStatusCode.OK;
            response.StatusText = "OK";
            response.MimeType = mimeType;
        }

        bool IResourceHandler.ReadResponse(Stream dataOut,out int bytesRead,ICallback callback)
        {
            callback.Dispose();
            if(stream == null)
            {
                bytesRead = 0;
                return false;
            }
            //Data out represents an underlying buffer (typically 32kb in size).
            var buffer = new byte[dataOut.Length];
            bytesRead = stream.Read(buffer,buffer.Length);

            dataOut.Write(buffer,buffer.Length);

            return bytesRead > 0;
        }

        bool IResourceHandler.Cangetcookie(Cookie cookie)
        {
            return true;
        }

        bool IResourceHandler.CanSetCookie(Cookie cookie)
        {
            return true;
        }

        void IResourceHandler.Cancel()
        {

        }

        void IDisposable.Dispose()
        {

        }
    }

这就是我从其他班级打开pdf文件的方式:

 string pdfPath = @"D:\Magic\10774.pdf";
 var mimeType = ResourceHandler.GetMimeType(".pdf");
 ResourceHandler.FromFilePath(pdfPath,mimeType);

我在CefSharpSchemeHandlerFactory创建方法上没有受到关注。

huimingchaye 回答:Loafl PDF在Cefsharp 71中未打开

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3075684.html

大家都在问