pdf - 支持在 Xamarin Forms 中将 HTML 转换为 PDF
问题描述
参考以下StackOverflow建议,
我尝试使用将HTML文件转换为 PDFHtmlRenderer.PdfSharp
,但不幸的是它显示了如下兼容错误,
HtmlRendererCore.PdfSharpCore 1.0.1 与 netstandard2.0 (.NETStandard,Version=v2.0) 不兼容。包 HtmlRendererCore.PdfSharpCore 1.0.1 支持:netcoreapp2.0 (.NETCoreApp,Version=v2.0)
HtmlRenderer.Core 1.5.0.5 is not compatible with monoandroid90 (MonoAndroid,Version=v9.0). Package HtmlRenderer.Core 1.5.0.5 supports:
- net20 (.NETFramework,Version=v2.0)
- net30 (.NETFramework,Version=v3.0)
- net35-client (.NETFramework,Version=v3.5,Profile=Client)
- net40-client (.NETFramework,Version=v4.0,Profile=Client)
- net45 (.NETFramework,Version=v4.5)
HtmlRendererCore.PdfSharpCore 1.0.1 is not compatible with monoandroid90 (MonoAndroid,Version=v9.0). Package HtmlRendererCore.PdfSharpCore 1.0.1 supports: netcoreapp2.0 (.NETCoreApp,Version=v2.0)
我也尝试wkhtmltopdf
过,但它在 android 和其他平台项目中引发了类似的错误。
我的要求是仅将HTML 文件转换为 PDF 文件(无需查看 PDF 文件,只需将其保存在本地路径中)。
任何人都可以提供建议吗?
注意:需要开源建议:)
期待你的建议!!!
支持在 Xamarin Forms 中将 HTML 转换为 PDF
解决方案
您可以将 HTML 作为流读取并将其存储到本地,如下所示,
public static class FileManager
{
public static async Task<MemoryStream> DownloadFileAsStreamAsync(string url)
{
try
{
var stream = new MemoryStream();
using (var httpClient = new HttpClient())
{
var downloadStream = await httpClient.GetStreamAsync(new Uri(url));
if (downloadStream != null)
{
await downloadStream.CopyToAsync(stream);
}
}
return stream;
}
catch (Exception exception)
{
return null;
}
}
public static async Task<bool> DownloadAndWriteIntoNewFile(string url, string fileName)
{
var stream = await DownloadFileAsStreamAsync(url);
if (stream == null || stream.Length == 0)
return false;
var filePath = GetFilePath(fileName);
if (!File.Exists(filePath))
return false;
File.Delete(filePath);
// Create file.
using (var createdFile = File.Create(filePath))
{
}
// Open and write into file.
using (var openFile = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite))
{
stream.WriteTo(openFile);
}
return true;
}
public static string GetFilePath(string fileName)
{
var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), fileName);
return filePath;
}
public static void WriteAsText(string filePath, string contents)
{
File.WriteAllText(filePath, contents);
}
public static string ReadAsText(string filePath)
{
return File.ReadAllText(filePath);
}
}
您可以读取存储的 pdf 文件并使用 webview 显示,如下所示,
private async void HtmlToPDF()
{
await FileManager.DownloadAndWriteIntoNewFile("https://www.google.co.in/?gws_rd=ssl", "SavePDF.pdf");
var filePath = FileManager.GetFilePath("SavePDF.pdf");
var pdfString = FileManager.ReadAsText(filePath);
var webView = new WebView
{
Source = new HtmlWebViewSource
{
Html = pdfString
}
};
this.Content = webView;
}
下面的输出,
同样,您可以将 HTML 保存为 PDF 并做您想做的事情。
推荐阅读
- security - Trivy 和 Dependency-Check 报告不同的漏洞
- windows - 我已经尝试了几乎所有可以从网上找到的东西。没有。有没有办法合并一个字符串和一个变量,批量打开一个程序?
- elasticsearch - NEST 7X ElasticSearch 库的多用户连接
- python - 如何在存储在 json 中的变量上使用 <=、>=、< 和 > - python,discord.py
- python - Python 可执行文件花费了太多时间
- tomcat - 在 Apache Tomcat 8.5.64 中获得 java.lang.NullPointerException 的原因是什么?
- shellcode - dll劫持创建线程shellcode注入问题
- java - 列出面临的问题
- database - 我如何确定一个理想的 MongoDB 托管包
- pdf - 打开 pdf 文档时收到错误消息