Printing 从Xamarin.Forms应用程序打印

Printing 从Xamarin.Forms应用程序打印,printing,xamarin,xamarin.forms,Printing,Xamarin,Xamarin.forms,我是Xamarin的新手,目前正在使用Xamarin.Forms开发一个示例或“概念验证”应用程序 我应该从这个应用程序执行打印任务,尽管我现在还不确定要打印什么(屏幕、标签内容、文件等) 不管怎样,从Xamarin.Forms应用程序打印最简单的方法是什么? (目前的目标主要是Android 4.4+) 我希望这不会太复杂:) 编辑: 好吧,让我更新一下这篇文章,因为原文可能有点雄心勃勃/含糊不清 我有一个Xamarin.Forms项目(+Android部分),在项目的XF部分有一些HTML,

我是Xamarin的新手,目前正在使用Xamarin.Forms开发一个示例或“概念验证”应用程序

我应该从这个应用程序执行打印任务,尽管我现在还不确定要打印什么(屏幕、标签内容、文件等)

不管怎样,从Xamarin.Forms应用程序打印最简单的方法是什么? (目前的目标主要是Android 4.4+)

我希望这不会太复杂:)

编辑:

好吧,让我更新一下这篇文章,因为原文可能有点雄心勃勃/含糊不清

我有一个Xamarin.Forms项目(+Android部分),在项目的XF部分有一些HTML,我需要进入WebView并打印它。 据我所知,WebView的工作必须在项目的Android部分完成,因为这是处理打印的地方。 我希望这可以通过代码实现,因为我不需要显示WebView,只需要打印它的内容。 项目的Android部分只有MainActivity,没有布局或XAML文件。 我不知道在哪里添加WebView,也不知道如何访问它(除了DependecyService似乎是这里的流行语),所以我有点被困在这里了


我认为,对于比我有更多Xamarin经验的人来说,这项任务应该相当简单。

XF支持的每个平台都有自己的打印机制。XF不提供任何用于跨平台打印的抽象。您需要为每个层编写打印逻辑,并使用(或其他DI引擎)将其公开给XF。

您可以处理列表/发票的打印。。使用xamarin componentstore中的xfinium pdf组件。这样,您就可以创建_pdffile,然后调用以下方法启动adobereader,从中可以选择打印机(在我的例子中是google cloudprint)


当然,下面是一个使用依赖项服务的好例子:
我很想这么做,但太难了。终于把它建成了一个麻省理工学院的许可证

验证是否可以打印 在打印之前,您应该验证设备上是否可以进行打印。为此,请致电:

if (Forms9Patch.PrintService.CanPrint)
{
    // do the printing here
}
打印Xamarin.Forms.WebView的内容 请注意,您的WebView不必附加到布局。这使您无需在应用程序的UI中显示WebView即可打印

打印HTML字符串
使用Forms9Patch;
...
var myHtmlString=@”
转换为PNG
此html将转换为PNG、PDF或打印格式

"; ... myHtmlString.Print(“我的打印工作名称”);
请注意:iOS有时会将分页符放在奇怪的地方。我有一个StackOverflow悬赏关于为什么会发生这种情况以及如何解决它

将EmbeddedResource用作Xamarin.Forms.WebView的源
这是我建立的一种实验性功能,我发现它很有用。因此,文档很少。它允许您将HTML内容放在应用程序的EmbeddedResources文件夹中的文件夹中,然后将其用作Web视图的源。这是一个比使用Xamarin提供的特定于平台的方法更好的解决方案。它还支持将所有HTML内容放入zip文件中。请看一下,看看它是如何工作的。

这个博客可能会帮助你:我已经看过这篇文章,它似乎是关于原生Android应用程序(或Android特定部分)的,而不是从项目的Xamarin.Forms(跨平台)部分完成的。因为我完全是新手,所以我会尽可能多地坚持表单部分。这不能通过表单来完成。最接近的方法是通过抽象一些部分。我敢打赌这是正确的,但由于我对这一点非常陌生,我需要更多的指导,以了解如何以及在何处添加代码。在我的SF项目中,我有我想要打印的HTML,我需要知道如何将它放到项目Android部分的WebView中,然后打印出来。当我想到这一点时,我想对任何比我有更多Xamarin经验的人来说都应该是相当容易的。因为Xamarin中的代码隐藏都是c#,你也可以使用一些本地c#库。这打开了许多可能性。不过,你可能需要花点时间让他们在Ios上工作。也许尝试一下,其中一个em使用依赖服务,这可能会让人望而生畏,但实际上非常容易使用。试试这个:这会生成PDF并打印出来吗?打印时是否有方法抑制某些对话框?-我需要创建的东西将大量打印,因此用户显示的对话框越少越好。我的代码只打印pdf。但是使用xfinium创建pdf非常简单。查看componentstore中的getting startet。在创建pdf期间没有对话框。只有像页面。。。补充。在最终打印开始之前,不需要用户交互。这意味着每个文档有一个交互。如果您希望将打印文档构建为html,您可以使用webview轻松实现这一点,在webview中将html字符串yourHtmlString与yourWebView.LoadData(yourHtmlString,“text/html”,null);然后通过菜单调用:PrintManager PrintManager=(PrintManager)GetSystemService(Context.PrintService);PrintDocumentAdapter PrintDocumentAdapter=yourWebView.CreatePrintDocumentAdapter();printManager.Print(“您的网页”,printDocumentAdapter,null);HTML想法可能足够我需要做的,我也确实考虑过这种方法较早。不过,我在WebView对象上没有看到LoadData方法。好的,我目前正在研究DependencyService,因为它看起来在很多其他东西上也需要它
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");
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");