使用Xamarin Android创建PDF

时间:2015-03-05 19:26:49

标签: c# android pdf xamarin

我正在尝试创建一个可以通过外部应用程序打开的PDF文档。用户正在选择存储在List<byte[]>中的任意数量的图像。忽略这一点,即使创建一个可以打开的空白PDF,我也无法得到以下内容。如果我尝试打开生成的PDF,Adobe Reader会说该文件不受支持或已损坏。我不确定错误发生在哪里,因为似乎生成了PDF。我想在尝试将PDF写入FileStream时会出现问题。以下代码有什么问题?

private void CreatePDFWithImages(List<byte[]> images)
    {
        // create PDF
        PdfDocument pdf = new PdfDocument();

        // create a page description
        PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(612, 792, 0).Create();

        // draw image to pag
        for (int i = 0; i < images.Count; i++)
        {
            // start page
            PdfDocument.Page page = pdf.StartPage(pageInfo);

            // create bitmap from each byte[]
            byte[] currentByteArray = images[i];
            Android.Graphics.BitmapFactory.Options options = new Android.Graphics.BitmapFactory.Options();
            options.InMutable = true;
            Android.Graphics.Bitmap bitmap = Android.Graphics.BitmapFactory.DecodeByteArray(currentByteArray, 0, currentByteArray.Length, options);

            // matrix
            Android.Graphics.Matrix matrix = new Android.Graphics.Matrix();
            matrix.PreTranslate(300, 300);
            matrix.PreScale(2, 2);

            // add image to the page
            page.Canvas.DrawBitmap(bitmap, matrix, null);

            // finish the page
            pdf.FinishPage(page);
        }

        // save PDF
        string path = "/mnt/shared/POC_Documents/temp.pdf";
        FileStream fileStream = new FileStream(path, FileMode.Create);

        pdf.WriteTo(fileStream);

        // close PDF
        pdf.Close();

        // try to open...
        this.OpenPDF(path);
    }

1 个答案:

答案 0 :(得分:0)

在pageInfo中,您必须将页码传递为1而不是0 和

如果你添加

fileStream.flush();

这一行之后

pdf.WriteTo(fileStream);

它将创建pdf