XamarinForms(Visual Studio)中的报表

时间:2018-06-26 22:03:46

标签: c# azure xamarin.forms

在我攻读学士学位的过程中,要求之一是能够在应用程序中查看某些报告(如SSRS或Crystal Reports)。如标题所述,我正在XamarinForms跨平台中执行此操作(目前,如果我能够在android和wpf中查看它们,将会很棒)。

我进行了搜索,但没有找到具体的内容,也不知道该怎么办。

我正在从.NET Core 2.1中的RESTful API获取数据,该数据发布在Azure云以及数据库中。我试图在API中制作一个pdf文件,然后将其返回,以便可以在XamarinForms中查看它,但对此方法我有一些疑问。

我必须指定Azure Cloud帐户不是我的帐户,并且我不知道如何使用其服务中列出的所有选项。

有没有一种使它整洁又漂亮的方法?如果可以,您能否解释一下简短的工作流程以及如何做?

谢谢!

1 个答案:

答案 0 :(得分:0)

创建Pdf是最好的选择,这在使用PDFSharp或使用IO流类的xamarin表单上非常有效

 public string SaveFiles(PDFFormatModel pd)
    {

        PdfPTable table = new PdfPTable(2);
        PdfPCell cell = new PdfPCell(new Phrase("Cell Name"));
        cell.Colspan = 2;
        cell.HorizontalAlignment = iTextSharp.text.Element.ALIGN_CENTER;
        table.AddCell(cell);
        table.AddCell("Cell 1 ");
        table.AddCell("Cell 1 Value");
        table.AddCell("Cell 2 ");
        table.AddCell("Cell 2 Value");


        var pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
        string root = null;
        if (Android.OS.Environment.IsExternalStorageEmulated)
        {
            root = Android.OS.Environment.ExternalStorageDirectory.ToString();
        }
        else
            root = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        Java.IO.File myDir = new Java.IO.File(root + "/MAMN");
        myDir.Mkdir();

        Java.IO.File file = new Java.IO.File(myDir, pd.FileName);
        if (file.Exists()) file.Delete();
        using (var memoryStream = new System.IO.MemoryStream())
        {
            FileOutputStream outs = new FileOutputStream(file);
            var writer = PdfWriter.GetInstance(pdfDoc, memoryStream);
            pdfDoc.Open();
            pdfDoc.Add(table);

            pdfDoc.Close();
            byte[] bytes = memoryStream.ToArray();
            var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);
            var filePath = Path.Combine(root, pd.FileName);            
            outs.Write(bytes);
            outs.Flush();
            outs.Close();
            if (file.Exists())
            {
                Android.Net.Uri path = Android.Net.Uri.FromFile(file);
                string extension = Android.Webkit.MimeTypeMap.GetFileExtensionFromUrl(Android.Net.Uri.FromFile(file).ToString());
                string mimeType = Android.Webkit.MimeTypeMap.Singleton.GetMimeTypeFromExtension(extension);
                Intent intent = new Intent(Intent.ActionView);
                intent.SetDataAndType(path, mimeType);
                Forms.Context.StartActivity(Intent.CreateChooser(intent, "Choose App"));
            }             
                return filePath;

        }       
    }

如果您需要用图表或图形表示数据,请使用MicroCharts或Syncfusion