Un problema "raro, raro". Copiar texto desde documento en PDF.

23/09/2006 - 23:05 por RAlvare | Informe spam
Tengo un documento en formato PDF. La mayor parte del texto se puede
copiar en el portapapeles de Windows con el lector Acrobat Reader, pero hay
partes, las que más me interesan pues contienen trozos de código fuente que
quiero copiar al portapapeles, que no deben estar codificadas en ningún
formato estandar pues me encuentro con que lo que en el texto del pdf es
p.ej. una "a", cuando lo convierto a decimal con el código que vereis
despues, en unas partes del documento es 2, 6, 8, 12 ... cuando lo normal es
que sea "a" = 97.

Con los trozos de texto que se pueden copiar y pegar sin errores me cuadra a
la perfección la
codificación a = 97, b= 98, A = 65, B = 66, etc.

No le veo relación secuencial alguna a los caracteres, en unas zonas del pdf
sucede:
a = 6, b = 38, c = 28, d = 25, e = 8, f = 39, g = 7
en otras: a = 9, b, c= 30...

¿Cual es la explicación a esto? ¿Codificación no estandar en esas zonas?


private void button1_Click(object sender, EventArgs e)

{

string TextoEnPortapapeles = Clipboard.GetText();

char[] ArrayBytes = TextoEnPortapapeles.ToCharArray();

foreach (byte bb in ArrayBytes)

{

//Convierte cada byte del ArrayBytes en su representación decimal

this.richTextBox1.Text += "" + bb.ToString();

}


}

RAlvare.
Lugones.Asturias.
 

Leer las respuestas

#1 Miguel Ortiz Falcón
24/09/2006 - 07:03 | Informe spam
Hola RAlvare,

primero que nada pienso que es un poco aventurado decir que Adobe no siga
estándares, puesto que es un formato de documentos portables que por algo
tiene tanta compatibilidad y se pueden ver en gran parte de diversos
dispositivos. En su caso tendrá sus estándares impuestos o no por ellos.

Cuando tu guardas, un documento desde un editor de palabras, has de saber
que no se guarda solo el texto sino se guarda también diversa información que
describe la apariencia y formato de ese texto, así como otras cosas más. Lo
mismo ocurre en un PDF, si tu abres un PDF con un bloc de notas por ejemplo,
te encontrarás que no solo tienen el texto, sino tienes muchas cosas más:
"caracteres raros", números, códigos, etc, etc. Pues con la misma idea es
información que sirve para que el documento pueda verse correctamente.

Cuando tu copias en el portapapeles una parte de un documento desde un
editor de palabras, se copia todo, tanto texto como información extra, de
modo que cuando pegues eso en otro documento se pegará igual. Lo mismo pasa
con un PDF, cuando copias, se copia todo, no nada más el texto.

Por eso es la razón de que no solo leas códigos de letras como tu esperas
que estén, en su caso te recomiendo que uses ensamblados dedicados para hacer
eso
estos algunos de ellos:

http://www.pdftron.com/net/
http://web6.codeproject.com/showcas...nts.asp?df0&forumid)527&exp=0&select15428

Saludos...!

Miguel Ortiz Falcón



"RAlvare" wrote:

Tengo un documento en formato PDF. La mayor parte del texto se puede
copiar en el portapapeles de Windows con el lector Acrobat Reader, pero hay
partes, las que más me interesan pues contienen trozos de código fuente que
quiero copiar al portapapeles, que no deben estar codificadas en ningún
formato estandar pues me encuentro con que lo que en el texto del pdf es
p.ej. una "a", cuando lo convierto a decimal con el código que vereis
despues, en unas partes del documento es 2, 6, 8, 12 ... cuando lo normal es
que sea "a" = 97.

Con los trozos de texto que se pueden copiar y pegar sin errores me cuadra a
la perfección la
codificación a = 97, b= 98, A = 65, B = 66, etc.

No le veo relación secuencial alguna a los caracteres, en unas zonas del pdf
sucede:
a = 6, b = 38, c = 28, d = 25, e = 8, f = 39, g = 7
en otras: a = 9, b, c= 30...

¿Cual es la explicación a esto? ¿Codificación no estandar en esas zonas?


private void button1_Click(object sender, EventArgs e)

{

string TextoEnPortapapeles = Clipboard.GetText();

char[] ArrayBytes = TextoEnPortapapeles.ToCharArray();

foreach (byte bb in ArrayBytes)

{

//Convierte cada byte del ArrayBytes en su representación decimal

this.richTextBox1.Text += "" + bb.ToString();

}


}

RAlvare.
Lugones.Asturias.





Preguntas similares