none
Como ler um pdf salvo em SQL Server? RRS feed

  • Pergunta

  • Olá

    Salvo alguns arquivos em SQL Server, onde pode-se ler quando imagem ou *.pdf. Uso o código a baixo:

     Dim connstring As String = SQLFile()
            Dim Sql As String = "select * from Anexos where C='" & txtIDAnexo.Text & "'"
            Dim conn As New SqlConnection(connstring)
            Dim cmd As New SqlCommand(Sql, conn)
            Dim dr As SqlDataReader = Nothing
            conn.Open()
            dr = cmd.ExecuteReader()
            dr.Read()
            Dim imagebytes As Byte() = dr("Arquivo")
    
            Using ms As New MemoryStream(imagebytes)
    
                If dr("Extensao") = ".pdf" Then
                    Try
                        AxAcroPDF1.LoadFile(??????????)
                    Catch ex As Exception
                    End Try
                Else
                    PictureBox1.Image = Image.FromStream(ms)
                End If
            End Using
            conn.Close()

    A questão é o seguinte, como posso ler o pdf usando "AxAcroPDF1.LoadFile()"?

    Desde já agradeço.

    segunda-feira, 4 de abril de 2016 17:05

Respostas

  • entao vai abaixo tudo prontinho maninho, tamo aqui pra ajudar hehe abaixo como voce carrega do banco, convert  e depois um metodo pra visualizar, testa ae e diz aqui pra gnt se funfou....abraçao
     private void Carregar()
            {
                List<Anexo> Lista = new List<Anexo>();
    
                try
                {
    
                    SqlConnection conexao = new SqlConnection(Properties.Settings.Default.CS_Banco);
    
                    SqlCommand comando = new SqlCommand("SELECT * FROM TABELAPDF Where NumeroProcesso=@numero ", conexao);
    
                    comando.Parameters.Add(new SqlParameter("@numero", txtNumero.Text));
    
                    SqlDataReader dr;
                    conexao.Open();
                    dr = comando.ExecuteReader();
                    if (dr.HasRows)
                    {
                        while (dr.Read())
                        {
                            Anexo anex = new Anexo();
    
                            anex.Idpdf = dr.GetString(dr.GetOrdinal("Numero"));
    
                            anex.PDF = (byte[])dr.GetValue(dr.GetOrdinal("PDF"));
    
                            Lista.Add(anex);
                        }
                        dataGridView1.AutoGenerateColumns = false;
                        dataGridView1.DataSource = Lista;
                    }
                    conexao.Close();
                    comando.Dispose();
                }
                catch (Exception exc)
                {
                    MessageBox.Show("Erro: " + exc.Message);
                }
    
            }
    
            private void btnVisualizar_Click(object sender, EventArgs e) //visualizar o PDF
            {
                Anexo obj = new Anexo();
                if (obj != null)
                {
    
                    obj.PDF = (byte[])dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["pdf"].Value;
    
                    string nome = obj.NomeDoArquivo + ".pdf";
                    FileStream FSCriacaminho = new FileStream(@"C:\SUAPASTA\" + nome, FileMode.Create);
                    FSCriacaminho.Write(obj.PDF, 0, obj.PDF.Length);
                    Process.Start(@"C:\SUAPASTA\" + nome);
    
                    FSCriacaminho.Close(); 
                }
            }


    • Sugerido como Resposta TiagoJesusTJS quarta-feira, 6 de abril de 2016 01:20
    • Marcado como Resposta Eliseu5 quarta-feira, 6 de abril de 2016 17:36
    quarta-feira, 6 de abril de 2016 00:27

Todas as Respostas

  • Gente alguém?
    terça-feira, 5 de abril de 2016 11:09
  • Bom dia Amigo.

    aqui
    https://social.msdn.microsoft.com/Forums/pt-BR/5680bbab-215d-43a7-b840-a42e0052bf75/como-visualizo-um-pdf-salvo-como-binario?forum=vscsharppt
    tem tudo que voce precisa e mais um pouco.
    Se ajudar marque.

    Abraços
    terça-feira, 5 de abril de 2016 11:50
  • Olá Tiago

    Agradeço pela ajuda, mas não consegui aplicar nenhum dos exemplos ao meu código. AxAcroPDF1.LoadFile() carrega o pdf a partir do endereço (C:\arquivo.pdf), enquanto que no sql está em binário.

    terça-feira, 5 de abril de 2016 12:35
  • Olá Sammuel

    Não deu certo. Estou usando a dll do Acrobat Reader que é gratuita e muito leve, só não consigo encontrar uma solução. :?

    terça-feira, 5 de abril de 2016 12:48
  • entao vai abaixo tudo prontinho maninho, tamo aqui pra ajudar hehe abaixo como voce carrega do banco, convert  e depois um metodo pra visualizar, testa ae e diz aqui pra gnt se funfou....abraçao
     private void Carregar()
            {
                List<Anexo> Lista = new List<Anexo>();
    
                try
                {
    
                    SqlConnection conexao = new SqlConnection(Properties.Settings.Default.CS_Banco);
    
                    SqlCommand comando = new SqlCommand("SELECT * FROM TABELAPDF Where NumeroProcesso=@numero ", conexao);
    
                    comando.Parameters.Add(new SqlParameter("@numero", txtNumero.Text));
    
                    SqlDataReader dr;
                    conexao.Open();
                    dr = comando.ExecuteReader();
                    if (dr.HasRows)
                    {
                        while (dr.Read())
                        {
                            Anexo anex = new Anexo();
    
                            anex.Idpdf = dr.GetString(dr.GetOrdinal("Numero"));
    
                            anex.PDF = (byte[])dr.GetValue(dr.GetOrdinal("PDF"));
    
                            Lista.Add(anex);
                        }
                        dataGridView1.AutoGenerateColumns = false;
                        dataGridView1.DataSource = Lista;
                    }
                    conexao.Close();
                    comando.Dispose();
                }
                catch (Exception exc)
                {
                    MessageBox.Show("Erro: " + exc.Message);
                }
    
            }
    
            private void btnVisualizar_Click(object sender, EventArgs e) //visualizar o PDF
            {
                Anexo obj = new Anexo();
                if (obj != null)
                {
    
                    obj.PDF = (byte[])dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["pdf"].Value;
    
                    string nome = obj.NomeDoArquivo + ".pdf";
                    FileStream FSCriacaminho = new FileStream(@"C:\SUAPASTA\" + nome, FileMode.Create);
                    FSCriacaminho.Write(obj.PDF, 0, obj.PDF.Length);
                    Process.Start(@"C:\SUAPASTA\" + nome);
    
                    FSCriacaminho.Close(); 
                }
            }


    • Sugerido como Resposta TiagoJesusTJS quarta-feira, 6 de abril de 2016 01:20
    • Marcado como Resposta Eliseu5 quarta-feira, 6 de abril de 2016 17:36
    quarta-feira, 6 de abril de 2016 00:27
  • Então Eliseu, o código do Tiago deve funcionar para o que você quer.

    Pelo que li na documentação da AcroPdfLib (veja o link), o objeto só tem "LoadFile(string)" para carregar o PDF, e não tem outro método para carregar da memória por exemplo. Então a solução é obter o byte array do banco de dados e escreve-lo em um arquivo (talvez numa pasta TEMP qualquer) e então fazer o load.

    quarta-feira, 6 de abril de 2016 11:41
  • Olá Sammuel,

    Pois é, já que não tem outro modo o jeito é extrair temporariamente mesmo.

    Vlw pelo interesse em me ajudar.

    quarta-feira, 6 de abril de 2016 17:37
  • Olá Tiago,

    Não era bem isso que procurava (extrair) mas serve.

    Obrigado por seu interesse em me ajudar.

    quarta-feira, 6 de abril de 2016 17:38