我对Xamarin都很陌生,而且我目前正致力于样本或概念验证"应用程序使用Xamarin.Forms。
我应该从这个应用程序执行打印任务,虽然我现在还不确定要打印什么(屏幕,标签内容,文件等)。
无论哪种方式,从Xamarin.Forms应用程序打印最简单的方法是什么? (目前的目标主要是Android 4.4 +)。
我希望这不是太复杂了:)
修改
好的,让我更新这篇文章,因为原始文本可能有点雄心勃勃/含糊不清。
我有一个Xamarin.Forms项目(+一个Android部分),我在项目的XF部分有一些HTML,我需要进入WebView并打印它。 根据我的理解,WebView必须在项目的Android部分完成,因为这是处理打印的地方。 我希望这可以通过代码完成,因为我不需要显示WebView,只需打印它的内容。 项目的Android部分只有MainActivity,没有布局或XAML文件。 我不知道在哪里添加WebView或如何访问它(除了DependecyService似乎是一个热门话题),所以我有点卡在这里。
我认为这项任务对于那些拥有比我更多Xamarin经验的人来说应该是微不足道的。
答案 0 :(得分:4)
XF支持的每个平台都有自己的打印机制。 XF不以跨平台方式提供任何打印抽象。您需要为每个层编写打印逻辑,并使用DependencyService(或其他一些DI引擎)将其公开给XF。
答案 1 :(得分:3)
这是一个很好的例子,当然,使用依赖服务: https://codemilltech.com/xamarin-forms-e-z-print/
答案 2 :(得分:0)
您可以使用xamarin componentstore中的xfinium pdf组件处理列表/发票的打印。然后你创建你的_pdffile,然后调用以下方法启动adobereader,从那里你可以选择一台打印机(在我的情况下是google cloudprint)
public void printPdfToCloud(string _pdffile)
{
try
{
var saveto = System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.ToString(), "YourApp/"+_pdffile);
string file_path = saveto;
if (System.IO.File.Exists(file_path))
{
Android.Net.Uri pdfFile = Android.Net.Uri.FromFile(new Java.IO.File(file_path));
Intent pdfIntent = new Intent(Intent.ActionView);
pdfIntent.SetPackage("com.adobe.reader");
pdfIntent.SetDataAndType(pdfFile, "application/pdf");
pdfIntent.SetFlags(ActivityFlags.NoHistory);
StartActivity(pdfIntent);
}else
{
// give a note that the file does not exist
}
}
catch (Exception E)
{
// Do some Error dialog
}
}
答案 3 :(得分:0)
我很想这样做,但这太难了。最终将其内置到Forms9Patch-MIT许可的open source project中。
在打印之前,您应该验证设备上是否可以进行打印。为此,请致电:
if (Forms9Patch.PrintService.CanPrint)
{
// do the printing here
}
using Forms9Patch;
...
var myWebView = new Xamarin.Forms.WebView
myWebView.Source = new HtmlWebViewSource
{
Html = "some HTML text here"
};
...
myWebView.Print("my_print_job_name");
请注意,您的WebView不必附加到布局。这样一来,您无需在应用程序的UI中显示WebView即可进行打印。
using Forms9Patch;
...
var myHtmlString = @"
<!DOCTYPE html>
<html>
<body>
<h1>Convert to PNG</h1>
<p>This html will be converted to a PNG, PDF, or print.</p>
</body>
</html>
";
...
myHtmlString.Print("my_print_job_name");
请注意:iOS有时会将分页符放在奇怪的地方。我有一个StackOverflow赏金计划,以了解发生这种情况的原因以及解决方法。
这是我建立的一种实验性功能,发现它很有用。因此,文档很少。它允许您将HTML内容放入应用程序的EmbeddedResources文件夹中的文件夹中,然后将其用作WebView的源。比使用Xamarin提供的特定于平台的方法更好的解决方案。它还支持将所有HTML内容放入一个zip文件中。请查看source code,了解其工作原理。