Xamarin Android:无法将 Java.IO.ByteArrayOutputStream 表达式转换为类型 System.IO.Stream

Xamarin Android: Cannot convert Java.IO.ByteArrayOutputStream expression to type System.IO.Stream

我正在使用 Xamarin Android 并且在线 "document.WriteTo(outPut);" 我遇到了编译时错误。等效代码在 Java 中编译,但使用 Xamarin 和 c# 我遇到了某种类型的 casting/conversion 问题。有谁知道如何解决这一问题?我想做的是将我创建的 pdf 转换为字节数组。

 Byte[] MakePDFFromImages(){
        // open a new document
        PrintAttributes printAttributes = new PrintAttributes.Builder().
            SetColorMode(Android.Print.PrintColorMode.Color).
            SetMediaSize(PrintAttributes.MediaSize.IsoA4).
            SetResolution(new PrintAttributes.Resolution("zooey","test", 450, 700)).
            SetMinMargins(PrintAttributes.Margins.NoMargins).
            Build();

        PrintedPdfDocument document = new PrintedPdfDocument (Activity.BaseContext, printAttributes);

        // start a page
        Android.Graphics.Pdf.PdfDocument.Page page = document.StartPage(0);

        ImageView imageView = new ImageView (Activity.BaseContext);
        imageView.SetImageBitmap (_imageArray [0]);

        imageView.Draw(page.Canvas);

        document.FinishPage(page);

        ByteArrayOutputStream outPut = new ByteArrayOutputStream();
        try {
            document.WriteTo(outPut);
            document.Close();
            outPut.Close();
        }
        catch(Exception){

        }

        return outPut.ToByteArray();
    }

PrintedPdfDocument.Write 期望 .NET Stream,而您正在传递它 Java ByteArrayOutputStream。要修复,请使用 .NET MemoryStream:

    Byte[] MakePDFFromImages()
    {
        // open a new document
        PrintAttributes printAttributes = new PrintAttributes.Builder().
            SetColorMode(Android.Print.PrintColorMode.Color).
            SetMediaSize(PrintAttributes.MediaSize.IsoA4).
            SetResolution(new PrintAttributes.Resolution("zooey", "test", 450, 700)).
            SetMinMargins(PrintAttributes.Margins.NoMargins).
            Build();

        PrintedPdfDocument document = new PrintedPdfDocument(Activity.BaseContext, printAttributes);

        // start a page
        Android.Graphics.Pdf.PdfDocument.Page page = document.StartPage(0);

        ImageView imageView = new ImageView(Activity.BaseContext);
        imageView.SetImageBitmap(_imageArray[0]);

        imageView.Draw(page.Canvas);

        document.FinishPage(page);

        var outPut = new MemoryStream();
        try
        {
            document.WriteTo(outPut);
            document.Close();
            outPut.Close();
        }
        catch (Exception)
        {

        }

        return outPut.ToArray();
    }

如果您阅读 Xamarin API 文档,WriteTo() method of PDFDocument 需要 .NET System.IO.Stream,而不是 Java 流。

sample 展示了如何在 Xamarin

中使用 PDFDocument class