Pular para o conteúdo principal

Do Browser para Impressora - Parte 2

Ao invés de utilizar o browser para enviar um documento HTML para a impressora, podemos fazer uso de técnicas mais indiretas. Para isso, devemos utilizar um padrão que facilite manipulação de seu conteúdo. O padrão apropriado é o XHTML. Antes de explicar como o XHTML pode ser usado para transformação de um documentos em comandos de impressão, consideremos outros benefícios de se utilizar o XHTML no lugar do HTML.

XHTML

Uma das interessantes convergências tecnológicas é o padrão XML. O XML é uma especificação de texto com marcações derivado do SGML, que utiliza uma gramática mais restrita.

Por uma especificação de texto com marcações eu quero dizer que o XML possui marcadores que definem uma certa propriedade do texto: por exemplo que um certo fragmento é um paragrafo (

Isso é um parágrafo

), ou o nome de diretor de cinema(Tim Burton, etc. Por uma gramática mais restrita eu quero dizer que a definição do que pode e o que não pode no XML é mais simples. Para maiores informações veja: diferenças entre o HTML e o XML.

Essas características tornam mais fácil a construção de analisadores sintáticos. Por esse motivo, o XML é utilizado como base para uma gama de atividades relacionadas com troca de informações por arquivo texto. O XHTML foi criado para agregar, ao HTML, esses valores.

O XHTML é basicamente o padrão HTML como algumas adaptações para contemplar as restrições do XML. Nada muito complicado. E esse rigor trouxe algumas vantagens adicionais:
Adaptabilidade – o conteúdo é facilmente convertido para outros formatos;
Previsibilidade – enquanto existe um padrão definido para renderizar um documento HTML o mesmo não acontece para um documento mal-formatado. Um navegador ao renderizar um documento desse tipo entra no modo chamado quirks. Não existe um padrão para o modo quirks de tal sorte que o resultado pode variar em cada navegador. A fácil verificação que um documento é aderente a especificação do XHTML torna supérfluo a renderização por modo quirks. Também, os criadores de parser são guiados por uma especificação mais simples o que os leva a cometer menos erros;
Legibilidade – o documento é mais legível para máquinas e seres humanos devido a simplicidade da gramática;

Vejamos esse primeiro quesito. O XHTML permite o uso de uma família de linguagens de transformação chamado XSL (Extensible Stylesheet Language). O XSL é a definição da W3C que trata transformações no XML. Essa tecnologia define como um XML pode ser transformado para um XHTML, um arquivo texto qualquer ou num XSL-FO. É possível inclusive delegar aos navegadores essa tarefa de transformação. Muitos navegadores modernos, inclusive o Internet Explorer 5.0 suportam o uso do XSL para realizar transformações nos documentos.

XML-FO

XML-FO é um padrão de descrição para impressão. O XML-FO não possui todos os detalhes da impressão, mas é suficientemente rico para conter grande parte das descrições utilizadas na impressão. Note que o XML-FO é também um documento que segue a especificação XML. Basicamente, seu uso consiste de uma transformação subseqüente em que o documento é finalmente convertido para um de impressão: tipicamente o PDF.

No site da Antenna House é possível encontrar scripts de transformação do XHTML para fo ( xhtml2fo.xsl). Agora, com o uso de bibliotecas de manipulação do XML como o Xalan, é possível com um comando converter o XHTML para XSL-FO.

java -classpath $CLASSPATH org.apache.xalan.xslt.Process -IN -XSL xhtml2fo.xsl -OUT -tt

Docbook

Para exemplificar o mecanismo de transformação de um XML para PDF, vou utilizar um script Ant que utilizo para converter meus arquivos docbook para PDF. Para o XHTML o mecanismo é o mesmo, o que muda é o arquivo XSL responsável pela transformação.

Docbook que é uma linguagem própria para documentação cujo enfoque é a semântica. A filosofia básica por trás do Docbook é discriminar o valor semântico de cada parte de um texto. Por exemplo: para um computador o fragmento

título

não significa necessariamente o começo de uma seção ou capítulo; No Docbook é possível especificar exatamente esse tipo de informação (começo ou fim de uma seção, capítulos, ênfase, etc)... mas o padrão não fala nada sobre a formatação. Fica a cargo de outros mecanismos cuidarem para que elementos sejam corretamente formatados.

Um projeto para converter o docbook poderia conter os seguintes elementos:

Ambiente de desenvolvimento com Java 1.4, Apache Ant e Apache Fop (já inclui o Xalan e o Xerces) instalados.
Diretório src incluindo os fontes em docbook.
Diretório output onde serão gerados os arquivos em pdf.

Na raiz do projeto, poderia ser criado o script do Ant (build.xml) responsável por invocar as classes responsáveis pelo processamento. O Ant dispõe de mecanismos para invocar a máquina virtual do Java para executar um comando específico. Felizmente, nem mesmo isso é necessário, porque essas bibliotecas já dispõe de tags para que realizam a transformação do documentos:


xslt classpathref="xalan.classpath" style="${fo.stylesheet}" extension=".fo" basedir="${source.dir}" destdir="${fo.dir}"
include name="${target.name}.xml" /
/xslt

fop format="application/pdf" fofile="${fo.dir}/${target.name}.fo" outfile="${fo.dir}/${target.name}.pdf" /



Comentários

Postagens mais visitadas deste blog

Pequeno manual do ócio em terras alemãs

  Pequeno manual do ócio em terras alemãs Como Lei alemã favorece aproveitadoras (e alguns aproveitadores que nunca tive o desprazer de conhecer)   Há algumas vias pelas quais pessoas de países em desenvolvimento migram para países como a Alemanha.   Por exemplo, é sabido que países desenvolvidos sofrem de escassez de mão-de-obra qualificada. Por esse motivo, países como a Alemanha dispõe vistos "especiais" para profissionais em demanda. Esse é o conceito do Blaukart (Blue Card) que na Alemanha se destina a profissionais salário anual seja superior a 55 mil euros ou 43 mil no caso de profissionais de áreas em alta demanda. Não há como recrutar essa mão-de-obra sem que a família desses profissionais também possa ser relocada. Então esses profissionais e seus familiares são relocados.   Além de se qualificar para essas vagas em demanda, ou ser parte direta da família qualificada, outra via possível para a imigração para o território alemão é através do matrimôni

The escape of blue eyed vampires (answer)

The island of blue eyed vampires (answer) An initial idea Each one needs to figure out if him/herself is blue eyed. They assume having blue eyes and see how the others react. A technical details There are some variations to formalize this problem using different type of logic: modal logic, temporal logic, Public Announcement Logic and so on. I believe that those kind of prove are tedious to write and read. For now, I will write a sketch to a prove but I belive the best way to prove is using an algorimthm what basically, it would be an adaptation of DPLL algorithm (Davis–Putnam–Logemann–Loveland) that uses dedutive reasoning and prove by contraction. Legend \[\begin{matrix} BlueEyed(X) :X \text{ is blue eyed.} \\ Leave(X) :X \text{ leaves.} \\ O(y) :y \text{ holds at the next (temporal) state.} \end{matrix}\] In this temporal simplified logic, we have a set of state that holds the in- formation of days, \(W = \{d_0, d_1, d_2, d3 \ldots , d_n\}\) and transition \(S : W \rightarrow

Answering: top reasons I hate living in Brazil

Yes, some guys shared a teasing topic about “Top reasons why I hate living in Brazil”: http://www.gringoes.com/forum/forum_posts.asp?TID=17615&PN=1&title=top-reasons-i-hate-living-in-brazil What is the point here? The whole text is loaded of cliclés, people that you will hardly find, etc most of time just pissing people off.   I don’t think Brazil is the best country in the world. Also, I don’t think Brazilians don’t make mistakes. Actually we do all the time but most of us really care about our mistakes specially those were pointed out. Some feel like an expatriate, alien in own country. Others reflect about how we could improve. Others  simply don’t accept teases from John Does. So, I’m actually truly bothered with people believing in a bunch of false statements (specially Brazilians) or supporting some cynical arguments disguised “sincere” criticisms . Yes, I make mistakes all the time, and as most of Brazilians, I don’t speak English. However, I will