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

时间:2016-06-06 12:23:58

标签: java c# android xamarin xamarin.android

我正在使用Xamarin Android并在线" document.WriteTo(outPut);"我收到编译时错误。等效代码用Java编译,但是使用Xamarin和c#我有一些类型的转换/转换问题。有谁知道如何解决这一问题?我想要做的是将我创建的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();
    }

2 个答案:

答案 0 :(得分:1)

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();
    }

答案 1 :(得分:0)

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

这个sample显示了如何在Xamarin中使用PDFDocument类