Convert a text file to PDF without saving to a physical location

1

Well I made a method to convert a text file into PDF, however it saves the PDF on the machine. I wanted the method to return a array without having to write the PDF to the machine or have to read the file again.

public byte[] Converte(string path)
{
    FileInfo fl = new FileInfo(path);
    fl.GetAccessControl(); //Dando acesso total ao fileinfo.
    DirectoryInfo pir = new DirectoryInfo(fl.FullName.ToString());
    string[] lines = System.IO.File.ReadAllLines(path);  // Ler todas linhas do documento      
    Document doc = new Document(PageSize.A4);//criando e estipulando o tipo da folha usada
    doc.SetMargins(40, 40, 40, 80);//estibulando o espaçamento das margens que queremos
    doc.AddCreationDate();//adicionando as configuracoes
    string caminho = fl.FullName.Replace(".txt", ".pdf"); // dando replace na extensão
    PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(caminho, FileMode.Create));
    doc.Open(); //Abrindo documento
    string dados = ""; //Criando string de dados para passar dados.

    foreach (string line in lines)
    {
        Paragraph paragrafo = new Paragraph(dados); // Criando paragrafo para receber os valores das linhas.
        paragrafo.Add(line.ToString()); // Passando valor da linha do txt para pdf
        doc.Add(paragrafo); //Adicionando ao pdf 
    }

    doc.Close(); // Fechando e salvando documento    

    //Criando um Array de Bytes para o pdf.
    FileStream stream = System.IO.File.OpenRead(caminho);
    byte[] fileBytes = new byte[stream.Length];
    stream.Read(fileBytes, 0, fileBytes.Length);
    stream.Close();

    return fileBytes;     
}
    
asked by anonymous 26.01.2017 / 14:10

1 answer

1

Replace FileStream with a MemoryStream :

using(MemoryStream memStream = new MemoryStream()) 
{
    PdfWriter writer = PdfWriter.GetInstance(doc, memStream);
    // o seu codigo
    return memStream.ToArray();
}
    
26.01.2017 / 15:02