Usuário com melhor resposta
Como ler um pdf salvo em SQL Server?

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.
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
Todas as 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
-
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.
-
-