2015-03-05 6 views
2

Я пытаюсь создать PDF-документ, который затем можно открыть с помощью внешнего приложения. Пользователь выбирает произвольное количество изображений, которые хранятся в List<byte[]>. Невзирая на это, я не могу получить следующее, чтобы создать пустой PDF-файл, который можно открыть. Если я попытаюсь открыть сгенерированный PDF-документ, Adobe Reader сообщит, что файл не поддерживается или был поврежден. Я не уверен, где ошибка возникает, поскольку PDF создается. Я предполагаю, что проблема возникает при попытке записать PDF в FileStream. В чем проблема со следующим кодом?Создание PDF с использованием Xamarin Android

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); 
    } 
+0

H предлагая эту же проблему здесь, есть какие-то решения? –

ответ

0

В pageInfo вы должны пройти номер страницы, как 1 вместо 0 и

Если добавить

fileStream.flush(); 

после этой линии

pdf.WriteTo(fileStream); 

Это создаст pdf

Смежные вопросы