O código a seguir é PARCIAL, portanto se executá-lo como está você não obterá sucesso.
// Enquanto existir próximo elemento
while ((element = elementIterator.next()) != null) {
QUEBRA:
{
if (element.getName().equals(HTML.Tag.TD.toString())) {
String conteúdo;
try {
conteúdo = (String) element.getDocument().getText(element.getStartOffset(), element.getEndOffset() - element.getStartOffset());
} catch (BadLocationException exception) {
// Ocultado
}
if (!conteúdo.contains("NÚMERO DE INSCRIÇÃO")) {
break QUEBRA;
}
if (!conteúdo.contains("DATA DE ABERTURA")) {
break QUEBRA;
}
if (!conteúdo.contains("NOME EMPRESARIAL")) {
break QUEBRA;
}
if (!conteúdo.contains("TÍTULO DO ESTABELECIMENTO (NOME DE FANTASIA)")) {
break QUEBRA;
}
// Esses IF's continuam até terminar todos os "Nomes" que quero dentro da página (VEJA o Cartão CNPJ para entender).
// Este é um objeto criado apenas para guardar os dados capturados
ElementoCnpj elementoCnpj = new ElementoCnpj();
// Aqui capturo o CNPJ
int index = 0;
int pos1 = conteúdo.indexOf("NÚMERO DE INSCRIÇÃO", index);
index = pos1;
int pos2 = conteúdo.indexOf("COMPROVANTE DE INSCRIÇÃO E DE SITUAÇÃO CADASTRAL", index);
index = pos2;
elementoCnpj.setCnpj(limparString(conteúdo.substring(pos1 + "NÚMERO DE INSCRIÇÃO".length(), pos2)).substring(0, 18));
// Aqui capturo a Data de Abertura
pos1 = conteúdo.indexOf("DATA DE ABERTURA", index);
index = pos1;
pos2 = conteúdo.indexOf("NOME EMPRESARIAL", index);
index = pos2;
elementoCnpj.setDataAbertura(limparString(conteúdo.substring(pos1 + "DATA DE ABERTURA".length(), pos2)));
// Faço isto para tudo que eu quiser capturar.
return elementoCnpj;
}
}
}
Vamos as explicações.
Veja nos códigos anteriormente postados que ‘elementIterator’ é obtido depois de uma “estruturação” do Html da página.
Feito isto eu simplesmente “rodo” a página elemento a elemento. Então vasculho TAG a TAG Html até identificar um ponto de coleta.
A página do Cartão de CNPJ é estruturada especialmente em “TD” e existe (logo no início) uma “super TD” que contém todos os dados do cartão, então é este “super TD” que procuro em meu código.
Então, eu coleto o conteúdo da TD e faço uma série de verificações assim ‘!conteúdo.contains(“NÚMERO DE INSCRIÇÃO”)’ se o conteúdo não tiver o Número de Inscrição, … e todos os outros campos Literalmente Escritos no Cartão de CNPJ significa que não é esta TD e então salto o código para o próximo passo.
Caso o conteúdo contenha todas essas palavras chaves, significa que estou na tabela com os dados.
Então simplesmente faço uma busca entre um campo chave e outro e obviamente o que está entre as chaves é o conteúdo referente à primeira chave.
Porém como estou trabalhando com o código fonte da página, muito “lixo” pode surgir entre os códigos, então faço uma limpeza especial para a página com este método.
private String limparString(String string) {
// Retirar caracter misterioso da página da Receita Federal :D.
string = string.replace((char) 10, ' ');
// Retirar caracter misterioso da página da Receita Federal :D.
string = string.replace((char) 160, ' ');
// Retirar os preenchimentos com '*' nos cadastros não preenchidos.
string = string.replaceAll("\\*", "");
return string.trim();
}
Faço isto para todos os campos até esgotar a busca.
OBSERVAÇÃO¹: Reforçando, antes que alguém critique o código, este código é PARCIAL, portanto usem-o como exemplo e o completem para as suas necessidades. Para tirar maiores dúvidas consultem também o final do código dos meus últimos posts.
OBSERVAÇÃO²: O código é para Desktop.
Att.