1

I made a bot application with the Microsoft Botbuilder. Now I want to create a pdf-file from the user input. The file should be stored in my azure storage. I have a "pdf-template" which should be copied and modified (this file is in the azure storage already). It has some textboxes which should be filled with the user input. I already wrote the code for that with iTextSharp. But I need a filestream for this code. Does anybody know how to get the filestream from the file in my azure storage? Or is there maybe another way to finish my task?

Edit: Here is the code where I need the filestream

string fileNameExisting = Path.Combine(Directory.GetCurrentDirectory(), "Some.pdf");
     string fileNameNew = @"Path/Some2.pdf";
     var inv = new Invention
     {
        Inventor = new Inventor { Firstname = "TEST!", Lastname= "TEST!" },
        Date = DateTime.Now,
        Title = "TEST",
        Slogan = "TEST!",
        Description = "TEST!",
        Advantages = "TEST!s",
        TaskPosition = "TEST!",
        TaskSolution = "TEST!"
     };
     using (var existingFileStream = new FileStream(fileNameExisting, FileMode.Open))
     using (var newFileStream = new FileStream(fileNameNew, FileMode.Create))
     {
        // Open existing PDF
        var pdfReader = new PdfReader(existingFileStream);

        // PdfStamper, which will create
        var stamper = new PdfStamper(pdfReader, newFileStream);

        var form = stamper.AcroFields;
        var fieldKeys = form.Fields.Keys;

        foreach (string fieldKey in fieldKeys)
        {
           var props = fieldKey.Split('.');
           string t = GetProp(props, inv);
           form.SetField(fieldKey, t);
        }
        stamper.Close();
        pdfReader.Close();
     }
  }
  public static string GetProp(string[] classes, object oldObj)
  {
     var obj = oldObj.GetType().GetProperty(classes[0]).GetValue(oldObj, null);
     if(classes.Length>1)
     {
        classes = classes.Skip(1).ToArray();
        return GetProp(classes, obj);
     }
     Console.WriteLine(obj.ToString());
        return obj.ToString();
  }
Detlef D Soost
  • 83
  • 3
  • 11

1 Answers1

0

The PdfReader constructor also takes a byte array. You should be able to create the object using something like:

var pdfTemplateBytes = await new WebClient().DownloadDataTaskAsync("https://myaccount.blob.core.windows.net/templates/mytemplate.pdf");
var pdfReader = new PdfReader(pdfTemplateBytes );
Martin Brandl
  • 56,134
  • 13
  • 133
  • 172