Escrito em March 8th, 2009 as 3:01 am por Pablo Roveroni

3 Comentários

Pois é, este é meu primeiro post, primeiro de muitos espero (hehe); e vou logo tratar de um carinha chamado iTextSharp. Confesso que até alguns dias atrás nada sabia deste poderoso amigo. Na verdade foi ele quem me motivou a criar este blog. Mas vamos ao que interessa.

Dia desses surgiu uma daquelas idéias que servem pra resolver um montão de problemas, mas que também servem para nos colocar numa enorme enrascada. Numa enrascada porque caberia a mim, autor da idéia, encontrar a solução. O básico da idéia é o seguinte: transformar um arquivo PDF em HTML. Mas aí veio a primeira pergunta, isso seria possível? Sim, verifiquei no sapientíssimo Google que isso era possível sim! Aí parti pra encontrar um componente .Net para que eu pudesse utilizar no projeto e fazer uso das “maravilhas da tecnologia moderna”. Achei que ia ser “coisa linda de Deus”, mas vi que não era tão simples assim. Vendo minha dificuldade em encontrar o já maldito componente, meu mestre Jedi Bill, decidiu ajudar este pequeno padauã; e não encontramos nada que achássemos realmente bom. Foi então que o Bill encontrou esse tal iTextSharp. Acabei encontrando alguma documentação sobre ele, pescando aqui e ali pude observar algumas coisas sobre ele que me chamaram a atenção, dentre elas a possibilidade de ler um arquivo pdf de maneira mais tranqüila fazendo uso de seus métodos. É bem verdade que muitos deles estão bem escondidos e são meio complicados de usar ao primeiro contato, mas depois conforme vamos nos familiarizando com ele, começamos a compreender sua lógica, pois ele serve tanto para gerar, alterar e ler arquivos pdf.

Enfim, após algum tempo fuçando no “trocinho” consegui extrair o conteúdo do arquivo pdf, mas olha só que legal, vinha tudo num tipo de código que só o pessoal da Matrix consegue ler; cheio de códigos, números, mas prestando um pouco mais de atenção, percebi que dentro daquele bando de coisas, dentro de parênteses “( )“, havia o texto que eu desejava extrair; só me faltava agora entender este maldito código.

Bom, como sempre e como todo bom ser humano, recorri orando ao grande Pai Google, o sapientíssimo ser onisciente, onipresente e onipotente. Eis que ele me trouxe muitos resultados, afinal de contas experimente colocar “BT” no Google e mandar ele buscar. Procurei por tudo quanto é raio de expressão e nada. Eis que quando já estava dando esta guerra por vencida, encontrei uns indianos malucos que falavam sobre o assunto e com a ajuda deles, acabei encontrando o caminho da luz novamente (só espero que não seja um trem(hehe)).

Por tudo isso, a partir de hoje, irei postar um pouco do que tenho aprendido deste carinha chamado iTextSharp, que não posso furtar-me em dizer que é free! Isso mesmo esse tiozinho é totalmente grátis!!! Legal né!?

Só não prometo que será simples desvendar os mistérios do PDF, pois to lendo um guia de referência de quase 1000 páginas pra tentar entender esse tal de Glyph e como ele é renderizado.

Mas afinal de contas o que é esse tal de Glyph agora?

Segundo o Wikipedia:

Glifo em tipografia, é uma figura que dá um tipo de característica particular a um símbolo específico. Um glifo é um elemento da escrita. Dois ou mais glifos que correspondam ao mesmo símbolo (i.e. carácter, se permutáveis ou dependentes de contexto, são chamados alógrafos; um glifo é uma manifestação da unidade mais abstracta carácter. Glifos também podem ser ligaduras tipográficas que são caracteres compostos ou diacríticos.

Tipos de Glifo

Os glifos agrupam-se em colecções que se designam por tipos (fontes):

  • Código de Glifo: Um código numérico que indica um glifo. Freqüentemente, os glifos de uma fonte são indicados por uma código de glifo. Códigos de glifo são específicos para cada fonte, ou seja, cada fonte, mesmo que contenham os mesmos glifos, podem indicá-los com códigos distintos.
  • Identificador de Glifo: Um código literal que indica um glifo em uma fonte. Do mesmo modo que os códigos de glifo, os indicadores são específicos para cada fonte.
  • Imagem de Glifo: A imagem de um glifo impressa numa superfície.
  • Métrica de Glifo: Um conjunto de propriedades que especificam o tamanho e a posição relativa a outros glifos entre outras propriedades de um glifo.

Primeiro é preciso que entendamos o glifo (gliph) pra depois entendermos o pdf. Felizmente ou infelizmente tem que ser assim.

[]s e até mais

, ,

3 Respostas to “iTextSharp e o Gliph da morte”


  1. Giovana

    1 year ago

    Dúvida!
    Tem como ler um arquivo PDF e transformá-lo em HTML?

    Obrigada


  2. Guilherme Bacellar

    1 year ago

    Giovana,
    queria poder te responder isso fácil, hehehe.

    Aqui aonde trabalho, estamos lutando com isso a algum tempo, pois não é fácil.

    Estamos considerando a compra a compra de um componente, mas, não é bem a solução que queriamos.


  3. Pablo Roveroni

    1 year ago

    Giovana, na verdade há sim; porém é como o Guilherme lhe disse, estamos lutando com isso há algum tempo. Na verdade foi isso que me motivou a começar a escrever sobre este tema, que com certeza deve tirar muita gente do sério.
    O que ocorre é o seguinte: se você olhar o post Lendo um Arquivo Pdf com iTextSharp – Parte I (http://www.dotnetmax.org/2009/03/11/17/), e criar um projeto onde você imprima o resultado daquele código, você poderá verificar que o código que ele retorna é bem confuso, na verdade você terá que assim como eu, ir descobrindo do que se trata cada sigla, como por exemplo BT significa que o conteúdo a seguir é um objeto texto que será encerrado no comando ET. Mas não é simples assim, hehehehe, dentro do bloco de texto será necessário extrair o que está dentro dos () parenteses, o que estiver dentro deles será realmente o texto. Mas não é só isso, você ainda terá que saber qual o tamanho das fontes, o espaçamento entre os caracteres. Enfim, é uma tortura, mas eu tenho como meu desafio e sempre que tenho tempo, vou lá e perco algumas horas descobrindo o significado das TAGs e em como colocá-las no objeto texto. Estou tentando criar um componente que fará este tipo de parse. Contudo vale ressaltar uma coisa, como os caracteres tem as vezes distâncias diferentes entre eles, pra criar um documento html que seja 99% fiel ao pdf, vai dar um trabalhão, pois serão necessárias diversas tags de div por exemplo, cada uma com o espaçamento que existe entre os caracteres definidos lá no pdf.
    Esta é uma longa jornada, caso você queira se enveredar por ela, aqui vai uma recomendação: Muita persistência e paciência. hehehehehehe
    ufa, acho que é isso. Mas caso haja alguma outra dúvida, por favor entre em contato com a gente.

    Abs

Deixa uma Resposta

znjdb32s6g