Usuário com melhor resposta
String Hexadecimal para PDF

Pergunta
-
Pessoal, depois de esgotar o que sei, estou pedindo ajuda para a seguinte situação:
Eu vou receber um xml com um campo CLOB, que representa um , e vou precisar fazer como o código abaixo:
private string HexString2Ascii(string hexString)
{ StringBuilder sb = new StringBuilder(); for (int i = 0; i <= hexString.Length - 2; i += 2) { sb.Append(Convert.ToString(Convert.ToChar(Int32.Parse(hexString.Substring(i, 2), System.Globalization.NumberStyles.HexNumber)))); } return sb.ToString(); }
private void GetPDF() { string result = HexString2Ascii(File.ReadAllText(@"c:\pdf.txt").Replace("\r", "5C5C72")).Replace("\n", "5C5C6E"); byte[] bytes = GetBytes(result); Response.Clear(); Response.Buffer = false; Response.AppendHeader("Content-Type", "PDF"); Response.AppendHeader("Content-Transfer-Encoding", "binary"); Response.AppendHeader("Content-Disposition", String.Format("attachment; filename={0}", "TESTE.pdf")); Response.BinaryWrite(bytes); Response.End(); bytes = null; }
Os pontos são:
1) 'pdf.txt' representa o conteúdo da tag que vou receber. Tal como está. Um conjunto de caracteres hexadecimais;
2) Ja tentei o ReadAllText com e sem encoding, mas sem sucesso. Dá erro com o '\r' e '\n'. Daí o Replace;
O grande caso é que o PDF vem com erro. Onde estou errando?
Desde já agradeço a ajuda.
- Editado Otto Batista quinta-feira, 18 de junho de 2015 00:03
Respostas
-
Pessoal,
Aos que estiverem com a mesma dificuldade, segue a solução que no meu caso funcionou:
http://www.codeproject.com/Articles/4086/Converting-Hexadecimal-String-to-from-Byte-Array-i
Esse artigo tem uma classe que converte de hex para byte array e vice versa. Nesse caso funcionou. Abaixo o exemplo do código:
private void GetPDF() { string hexString = File.ReadAllText(@"c:\pdf.txt"); int discarded; byte[] buffer = Utility.HexEncoding.GetBytes(hexString, out discarded); Response.Clear(); Response.Buffer = false; Response.AppendHeader("Content-Type", "application/octet-stream"); Response.AppendHeader("Content-Transfer-Encoding", "binary"); Response.AppendHeader("Content-Disposition", String.Format("attachment; filename={0}", "TesteTracking.pdf")); Response.BinaryWrite(buffer); Response.End(); buffer = null; }
Esse código lê uma string hex e converte em byte[]. No meu caso, ainda faço download desse arquivo.
Espero ajudar como a moçada que se esforçou em ajudar. Obrigado.
- Marcado como Resposta Otto Batista sexta-feira, 3 de julho de 2015 01:03
Todas as Respostas
-
-
Boa tarde,
Eu é que agradeço o retorno. Bem, eu consigo gerar um arquivo .pdf, mas está sempre corrompido. Eu edito este no bloco de notas e vem ASCII, mas ao executar tomo erro.
Este pdf.txt do exemplo tem uma cadeia de caracteres do tipo '255044462D312E330D0A25E2E3CFD30D0A255253', só que muito maior, representando um arquivo pdf salvo em banco em um campo CLOB.
Na verdade, eu aceito até uma outra abordagem, pois eu não sei mais como avançar.- Editado Otto Batista quinta-feira, 18 de junho de 2015 18:56
-
Ola Otto,
Para converter uma sequencia binaria em uma string, eu prefiro usar a Base64... dessa forma não importa o Encoding ja que so usa caracters simples....
public string PdfBytesToString(string filename) { var bytes = File.ReadAllBytes(filename); return Convert.ToBase64String(bytes); } public byte[] StringToPdfBytes(string data) { return Convert.FromBase64String(data); }
Microsoft Community Contributor
- Marcado como Resposta Cristopher C I_ segunda-feira, 22 de junho de 2015 13:47
- Não Marcado como Resposta Otto Batista terça-feira, 30 de junho de 2015 22:18
-
Pessoal, desculpe a demora em responder, mas voltando ao assunto:
Caros Rui e colegas, não funcionou - ele escreveu o mesmo hexadecimal no arquivo pdf! Meu problema, além de não saber como fazer, claro (sem orgulho disso..rs), está no fato de que preciso converter a string hexa em um valor ASCii, que (pelo menos), é o que aparece quando edito um arquivo pdf qualquer em um bloco de notas. Eu preciso chegar nesse código que é o que acontece quando salvo um clob no PL/SQL, por exemplo.
Mas agradeço muito a ajuda, galera.
- Editado Otto Batista quarta-feira, 24 de junho de 2015 19:03
-
Pessoal,
Aos que estiverem com a mesma dificuldade, segue a solução que no meu caso funcionou:
http://www.codeproject.com/Articles/4086/Converting-Hexadecimal-String-to-from-Byte-Array-i
Esse artigo tem uma classe que converte de hex para byte array e vice versa. Nesse caso funcionou. Abaixo o exemplo do código:
private void GetPDF() { string hexString = File.ReadAllText(@"c:\pdf.txt"); int discarded; byte[] buffer = Utility.HexEncoding.GetBytes(hexString, out discarded); Response.Clear(); Response.Buffer = false; Response.AppendHeader("Content-Type", "application/octet-stream"); Response.AppendHeader("Content-Transfer-Encoding", "binary"); Response.AppendHeader("Content-Disposition", String.Format("attachment; filename={0}", "TesteTracking.pdf")); Response.BinaryWrite(buffer); Response.End(); buffer = null; }
Esse código lê uma string hex e converte em byte[]. No meu caso, ainda faço download desse arquivo.
Espero ajudar como a moçada que se esforçou em ajudar. Obrigado.
- Marcado como Resposta Otto Batista sexta-feira, 3 de julho de 2015 01:03