Отчеты в XamarinForms (Visual Studio) - PullRequest
0 голосов
/ 27 июня 2018

Поскольку я работаю над своей степенью бакалавра, одно из требований заключается в том, чтобы иметь возможность просматривать некоторые отчеты (например, SSRS или Crystal Reports) в приложении. Как следует из названия, я делаю это в кроссплатформенной XamarinForms (на данный момент, если я смогу просматривать их в Android и wpf будет здорово).

Я искал и не нашел что-то конкретное, и я не знаю, что делать.

Я получаю свои данные из API RESTful в .NET Core 2.1, который публикуется в облаке Azure, а также с моей базой данных. Я попытался сделать PDF-файл в API и просто вернуть его, чтобы я мог просмотреть его в XamarinForms, но у меня есть некоторые сомнения по поводу этого метода.

Я должен указать, что учетная запись Azure Cloud не моя, и я не знаю, как использовать все параметры, перечисленные в их службе.

Есть ли способ сделать это чисто и красиво? Если да, можете ли вы кратко объяснить рабочий процесс и как это сделать?

Спасибо!

1 Ответ

0 голосов
/ 27 июня 2018

Создание PDF-файла - лучший вариант, он отлично работает на xamarin, используйте PDFSharp или IO Stream Class

 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...