Xamarin.Forms 未能使用 EvoHtmlToPdfclient 将 html 字符串转换为 pdf 文件

Posted

技术标签:

【中文标题】Xamarin.Forms 未能使用 EvoHtmlToPdfclient 将 html 字符串转换为 pdf 文件【英文标题】:Xamarin.Forms failing to use EvoHtmlToPdfclient in order to convert html string to a pdf file 【发布时间】:2019-05-10 10:59:08 【问题描述】:

我正在使用 Xamarin.Forms,我正在尝试使用 EvoPdfConverter 将 html 字符串转换为 pdf 文件,但问题是当我尝试这样做时,代码 sn-p 中的 htmlToPdfConverter.ConvertHtmlToFile(htmlData, "", myDir.ToString()); 行下面,该应用程序只是冻结并且什么都不做,似乎它想连接到给定的 IP,但它不能,但是我没有收到任何错误或异常!连抓都抓不到!!有人知道我应该怎么做才能解决这个问题吗?这是我的代码:

public  void ConvertHtmlToPfd(string htmlData)

 ServerSocket s = new ServerSocket(0);
 HtmlToPdfConverter htmlToPdfConverter = new 
 HtmlToPdfConverter(GetLocalIPAddress(),(uint)s.LocalPort);
 htmlToPdfConverter.TriggeringMode = TriggeringMode.Auto;
 htmlToPdfConverter.PdfDocumentOptions.CompressCrossReference = true;
 htmlToPdfConverter.PdfDocumentOptions.PdfCompressionLevel = PdfCompressionLevel.Best;

  if (ContextCompat.CheckSelfPermission(android.App.Application.Context, Manifest.Permission.WriteExternalStorage) != Permission.Granted)
   
      ActivityCompat.RequestPermissions((Android.App.Activity)Android.App.Application.Context, new String[]  Manifest.Permission.WriteExternalStorage , 1);
   
  if (ContextCompat.CheckSelfPermission(Android.App.Application.Context, Manifest.Permission.ReadExternalStorage) != Permission.Granted)
   
      ActivityCompat.RequestPermissions((Android.App.Activity)Android.App.Application.Context, new String[]  Manifest.Permission.ReadExternalStorage , 1);
   

    try
        

          // create the HTML to PDF converter object
          if (Android.OS.Environment.IsExternalStorageEmulated)
            
              root = Android.OS.Environment.ExternalStorageDirectory.ToString();
            
                htmlToPdfConverter.LicenseKey = "4W9+bn19bn5ue2B+bn1/YH98YHd3d3c=";
                htmlToPdfConverter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4;
                htmlToPdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait;
                Java.IO.File myDir = new Java.IO.File(root + "/Reports");
                try
                
                    myDir.Mkdir();
                
                catch (Exception e)
                
                    string message = e.Message;
                
                Java.IO.File file = new Java.IO.File(myDir, filename);

                if (file.Exists()) file.Delete();

               htmlToPdfConverter.ConvertHtmlToFile(htmlData, "", myDir.ToString());

            
            catch (Exception ex)
            
                string message = ex.Message;                
            

【问题讨论】:

你参考这个文档吗(evopdf.com/xamarin-html-to-pdf-converter.aspx)? 是的,但是没有指导,我的意思是有一个示例,但是该示例正在使用 ConvertIrl() 方法转换 URL,但我想转换一个 HTML 字符串 uisng ConvertHtmlToFile() 方法,即一个 void 方法并且不返回任何东西,除了我在我的设备上运行了示例之外,这也不起作用! 好了,不介意的话可以试试pdftron(pdftron.com/documentation/xamarin/guides/basics/html-to-pdf/…)。 谢谢,我试试,看看有没有效果 【参考方案1】:

您能否尝试将基本 URL 设置为 ConvertHtmlToFile 调用的第二个参数?您传递了一个空字符串。这有助于将 HTML 中的相对 URL 解析为完整 URL。转换器在尝试从无效资源 URL 检索内容时可能会出现延迟。

【讨论】:

以上是关于Xamarin.Forms 未能使用 EvoHtmlToPdfclient 将 html 字符串转换为 pdf 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Xamarin.Forms.Maps(无 Xamarin.Forms.GoogleMaps)在地图中应用样式或更改颜色

如果调用方未使用 Xamarin.Forms,Xamarin 依赖项服务能否正常工作?

如何使用 Xamarin.Forms 创建抽屉/滑块菜单?

在 Xamarin.Forms 中使用 Android 绑定

Xamarin.Forms:Forms.Context 已过时

Xamarin.Forms 手势密码实现