如何在Xamarin WebView上打开PDF文件

时间:2017-09-11 07:33:12

标签: xamarin webview xamarin.android

我正在尝试使用webview和Xamarin项目打开一个pdf文件 我能够使用以下方法完成:

protected override void OnCreate(Bundle savedInstanceState)
{
        base.OnCreate(savedInstanceState);
        RequestWindowFeature(WindowFeatures.NoTitle);
        SetContentView(Resource.Layout.ViewReport);

        var mywebview = FindViewById<WebView>(Resource.Id.webView1);

        var myurl= "http://docs.google.com/gview?embedded=true&url=http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_open_parameters.pdf";

        mywebview.Settings.AllowFileAccess = true;
        mywebview.Settings.JavaScriptEnabled = true;
        mywebview.Settings.BuiltInZoomControls = true;
        mywebview.LoadUrl(myurl);

        mywebview.SetWebViewClient(new PodWebViewClient());


}

我的问题是我尝试打开的PDF文件是通过我的MVC项目中的Itextsharp创建的:

public ActionResult Print() 
{

        var document = new iTextSharp.text.Document(PageSize.A4, 50, 50, 25, 25);
        var output = new MemoryStream();
        var writer = PdfWriter.GetInstance(document, output);
        document.Open();
        string contents = System.IO.File.ReadAllText(Server.MapPath("~/Content/HTMTemplate/pdf_template.htm"), Encoding.Unicode);

        //====================
        // do something here...
        //====================

        FontFactory.Register(Server.MapPath("~/fonts/ARIALUNI.TTF"));

        StyleSheet ST = new StyleSheet();
        ST.LoadTagStyle(HtmlTags.BODY, HtmlTags.FACE, "Arial Unicode MS");
        ST.LoadTagStyle(HtmlTags.BODY, HtmlTags.ENCODING, BaseFont.IDENTITY_H);

        var parsedHtmlElements = HTMLWorker.ParseToList(new StringReader(contents), ST);
        foreach (var htmlElement in parsedHtmlElements)
            document.Add(htmlElement as IElement);
        document.Close();

        var cd = new System.Net.Mime.ContentDisposition
        {
            FileName = "samplepdf.pdf",
            Inline = true
        };

        Response.AppendHeader("Content-Disposition", cd.ToString());//open in browser
        return File(output.ToArray(), "application/pdf");
}

但是当我做了以下事情时:

 var myurl= "http://docs.google.com/gview?embedded=true&url=http://www.sample.com/doc/print";

我看到一个带有html标签的文本文件,而不是我的pdf文件。

我该如何解决这个问题?我认为我的问题在于我的pdf文件,但我不知道是什么,因为我能够在浏览器中打开pdf ..希望你能帮助我。感谢。

1 个答案:

答案 0 :(得分:3)

使用pdf.js并将其称为

Control.LoadUrl(string.Format("file:///android_asset/pdfjs/web/viewer.html?file={0}", WebUtility.UrlEncode(pdfWebView.Uri)));

Here您可以找到有关此方法的更多详细信息(用于Xamarin.Forms)。