Pesquisar Páginas Específicas de Código de Barras em Documentos Usando Java
Introdução
Já passou horas verificando assinaturas manualmente em centenas de documentos? Você não está sozinho. Seja construindo um sistema de gerenciamento de contratos, automatizando o processamento de faturas ou protegendo registros de saúde, rastrear e validar assinaturas de código de barras manualmente é tedioso e propenso a erros. Neste tutorial você aprenderá como pesquisar páginas de código de barras java com GroupDocs.Signature, para que possa direcionar programaticamente apenas as páginas que importam, monitorar o progresso em tempo real e lidar com uma variedade de formatos de código de barras com apenas algumas linhas de código Java.
O que você aprenderá
- Configurar o GroupDocs.Signature em um projeto Java (≈5 minutos)
- Inscrever-se em eventos de pesquisa para monitoramento de progresso em tempo real
- Configurar opções de pesquisa inteligentes para direcionar páginas específicas
- Executar a pesquisa e processar os resultados de forma eficiente
Respostas Rápidas
- Qual biblioteca ajuda a pesquisar páginas específicas de código de barras? GroupDocs.Signature for Java
- Tempo típico de configuração? Cerca de 5 minutos para adicionar a dependência Maven/Gradle e uma licença
- Posso limitar a pesquisa às primeiras e últimas páginas? Sim – use
PagesSetuppara especificar páginas exatas - Quais formatos de código de barras são suportados? QR Code, Code128, Code39, DataMatrix, EAN/UPC, e mais
- Preciso de uma licença paga para produção? É necessária uma licença completa para produção; uma versão de avaliação funciona para testes
O que é “pesquisar páginas específicas de código de barras”?
Pesquisar páginas específicas de código de barras significa instruir o mecanismo de assinatura a procurar assinaturas de código de barras apenas nas páginas que interessam — por exemplo, a primeira página, a última página ou qualquer intervalo personalizado. Essa abordagem focada acelera o processamento, reduz o uso de memória e permite criar feedback de UI responsivo.
Por que usar o GroupDocs.Signature para esta tarefa?
GroupDocs.Signature fornece uma API de alto nível que abstrai a decodificação de código de barras de baixo nível, a renderização de páginas e o tratamento de formatos de documento. Ele suporta mais de 20 formatos de código de barras e pode processar documentos com centenas de páginas sem carregar o arquivo inteiro na memória, permitindo que você se concentre na lógica de negócios em vez de analisar arquivos.
Pré-requisitos
- JDK 8+ instalado
- Maven ou Gradle para gerenciamento de dependências
- Familiaridade básica com classes, métodos e tratamento de exceções em Java
- Acesso a uma licença do GroupDocs.Signature (teste ou completa)
Configurando o GroupDocs.Signature para Java
Configuração Maven
Add the dependency to your pom.xml:
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Configuração Gradle
Or include it in build.gradle:
implementation 'com.groupdocs:groupdocs-signature:23.12'
Prefer manual downloads? Você pode obter a versão mais recente diretamente da página de download do GroupDocs.
Obtendo Sua Licença
- Free Trial – inicie imediatamente, sem compromisso
- Temporary License – acesso total a recursos para avaliação
- Full License – pronta para produção, uso ilimitado
Verify the installation with a quick initialization snippet:
import com.groupdocs.signature.Signature;
public class SignatureSetup {
public static void main(String[] args) {
// Initialize the Signature instance with the document path
Signature signature = new Signature("YOUR_DOCUMENT_PATH");
System.out.println("GroupDocs.Signature for Java initialized successfully.");
}
}
Dica profissional: Substitua
"YOUR_DOCUMENT_PATH"por um arquivo PDF, DOCX ou XLSX real. Se o console imprimir a mensagem de sucesso, você está pronto para prosseguir.
Entendendo os Tipos de Assinatura de Código de Barras
Códigos de barras incorporam dados legíveis por máquina dentro de um documento. Ao contrário de assinaturas manuscritas, eles podem armazenar IDs, timestamps, URLs ou payloads JSON, tornando-os ideais para verificação automatizada.
| Tipo de Código de Barras | Melhor Uso Para | Comprimento Típico de Dados |
|---|---|---|
| QR Code | Dados de alta densidade, URLs, texto multilinha | Até 4.296 caracteres |
| Code128 | Números de rastreamento alfanuméricos | Variável |
| Code39 | Códigos legados simples | Até 43 caracteres |
| DataMatrix | Etiquetas pequenas, registros de saúde | Até 2.335 caracteres |
| EAN/UPC | Identificação de produtos, varejo | 8‑13 dígitos |
Você usará códigos de barras frequentemente quando precisar de leitura rápida por máquina, dados estruturados ou assinatura à prova de adulteração.
Como pesquisar páginas de código de barras java?
Signature é a classe principal que representa um documento a ser processado. Carregue seu documento com new Signature("file.pdf"), BarcodeSearchOptions define os parâmetros para pesquisar assinaturas de código de barras, configure-a para direcionar as páginas desejadas e chame signature.search(options). O método search executa a operação de pesquisa usando as opções fornecidas. O mecanismo retorna uma lista de objetos BarcodeSignature que contêm números de página, texto decodificado e coordenadas geométricas — tudo em uma única chamada. Esse padrão de um passo elimina a necessidade de extração de imagem separada ou lógica de decodificação personalizada.
Agora que você entende o fluxo geral, vamos mergulhar nas três funcionalidades principais que você implementará.
Recurso 1: Inscrevendo-se em Eventos de Pesquisa de Documento
Por que isso importa
Ao processar grandes lotes, o feedback em tempo real (por exemplo, barras de progresso) melhora a experiência do usuário e ajuda a detectar interrupções cedo.
Âncora de definição
Signature representa o documento e fornece capacidades de assinatura de eventos.
Implementation
Signature signature = new Signature("YOUR_DOCUMENT_PATH");
signature.SearchStarted.add(new ProcessStartEventHandler() {
public void invoke(Signature sender, ProcessStartEventArgs args) {
System.out.println("Search process started at " + args.getStarted()
+ " with " + args.getTotalSignatures() + " total signatures to be put in document");
}
});
signature.SearchProgress.add(new ProcessProgressEventHandler() {
public void invoke(Signature sender, ProcessProgressEventArgs args) {
System.out.println("Search progress. Processed " + args.getProcessedSignatures()
+ " signatures. Time spent " + args.getTicks() + " mlsec");
}
});
signature.SearchCompleted.add(new ProcessCompleteEventHandler() {
public void invoke(Signature sender, ProcessCompleteEventArgs args) {
System.out.println("Search process completed at " + args.getCompleted()
+ " with " + args.getTotalSignatures() + " total signatures. Process took "
+ args.getTicks() + " mlsec");
}
});
Esses três manipuladores fornecem o horário de início, progresso ao vivo e estatísticas finais — perfeitos para registro ou atualizações de UI.
Recurso 2: Configurando Opções de Pesquisa de Código de Barras para Páginas Específicas
Por que o controle granular importa
Escanear cada página de um contrato de 200 páginas desperdiça ciclos de CPU. Direcionar apenas a primeira e a última página pode reduzir o tempo de execução em até 80 %.
Âncora de definição
PagesSetup especifica quais páginas são incluídas na operação de pesquisa.
Implementation
import com.groupdocs.signature.domain.enums.TextMatchType;
import com.groupdocs.signature.options.search.BarcodeSearchOptions;
BarcodeSearchOptions options = new BarcodeSearchOptions();
options.setAllPages(false); // Opt‑in selective page searching
options.setPageNumber(1); // Starting page (optional)
import com.groupdocs.signature.options.PagesSetup;
PagesSetup pagesSetup = new PagesSetup();
pagesSetup.setFirstPage(true); // Include first page
pagesSetup.setLastPage(true); // Include last page
pagesSetup.setOddPages(false); // Skip odd pages
pagesSetup.setEvenPages(false); // Skip even pages
options.setPagesSetup(pagesSetup);
options.setMatchType(TextMatchType.Contains);
options.setText("12345");
- Tipos de correspondência permitem ajustar finamente a pesquisa de texto (
Contains,Exact,StartsWith,EndsWith). - Ajuste
setAllPagesePagesSetuppara pesquisar apenas páginas específicas de código de barras.
Recurso 3: Executando a Pesquisa e Processando Resultados
Por que esta etapa importa
Encontrar códigos de barras é apenas metade da história — você precisa agir sobre os dados (por exemplo, validar, armazenar ou acionar fluxos de trabalho).
Âncora de definição
BarcodeSignature representa um código de barras detectado e contém suas propriedades, como número da página e texto decodificado.
Implementation
import java.util.List;
import com.groupdocs.signature.domain.signatures.BarcodeSignature;
try {
List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, options);
System.out.println("Source document contains following signatures.");
for (BarcodeSignature barcodeSignature : signatures) {
System.out.println("Barcode signature found at page " + barcodeSignature.getPageNumber()
+ " with type " + barcodeSignature.getEncodeType() + " and text " + barcodeSignature.getText());
}
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
Agora você tem uma lista de objetos BarcodeSignature, cada um expondo:
getPageNumber()– onde o código de barras está localizadogetEncodeType()– QR, Code128, etc.getText()– payload decodificado- Posição (
getLeft(),getTop()) e tamanho (getWidth(),getHeight())
Exemplo: Processar apenas códigos QR na última página
for (BarcodeSignature barcodeSignature : signatures) {
if (barcodeSignature.getPageNumber() == lastPageNumber
&& barcodeSignature.getEncodeType().equals("QRCode")) {
// Process only QR codes from the final page
processApprovalCode(barcodeSignature.getText());
}
}
Aplicações do Mundo Real
| Cenário | Como a pesquisa de páginas específicas de código de barras ajuda |
|---|---|
| Verificação de contrato legal | Validar automaticamente hashes de certificados codificados em QR na página de assinatura |
| Rastreamento da cadeia de suprimentos | Localizar IDs de remessa Code128 nas primeiras/últimas páginas de manifestos |
| Formulários de consentimento de saúde | Extrair IDs de pacientes DataMatrix da página final de consentimento |
| Automação de faturas | Encontrar códigos de barras com prefixo “APPR‑” em qualquer parte da fatura e, em seguida, encaminhar |
Problemas Comuns e Soluções
Problema 1 – Nenhum resultado apesar de códigos de barras visíveis
// Ensure you are not limiting pages too aggressively
options.setAllPages(true);
Se o código de barras estiver incorporado como uma imagem raster, considere usar o GroupDocs.Image para detecção baseada em imagem.
Problema 2 – Desempenho lento em arquivos grandes
PagesSetup pagesSetup = new PagesSetup();
pagesSetup.setLastPage(true); // Most signatures are on the last page
pagesSetup.setFirstPage(true);
options.setPagesSetup(pagesSetup);
Páginas direcionadas reduzem drasticamente o tempo de processamento; um PDF de 150 páginas cai de ~4 segundos para <1 segundo ao limitar a pesquisa a duas páginas.
Problema 3 – TextMatchType não encontra os códigos de barras esperados
String searchText = "12345".trim().toLowerCase();
options.setText(searchText);
options.setMatchType(TextMatchType.StartsWith); // Try a more permissive mode
Problema 4 – Vazamentos de memória em loops de longa duração
try (Signature signature = new Signature("document.pdf")) {
List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, options);
// Process signatures
}
O bloco try‑with‑resources descarta a instância Signature automaticamente.
Melhores Práticas para Produção
Manipulação robusta de erros
try {
List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, options);
} catch (com.groupdocs.signature.exception.GroupDocsSignatureException e) {
logger.error("GroupDocs error: " + e.getMessage());
} catch (Exception e) {
logger.error("Unexpected error: " + e.getMessage(), e);
}
Cache de resultados quando documentos são imutáveis
Map<String, List<BarcodeSignature>> cache = new ConcurrentHashMap<>();
public List<BarcodeSignature> getCachedSignatures(String docId) {
return cache.computeIfAbsent(docId, id -> performSearch(id));
}
Use eventos de progresso para feedback de UI
signature.SearchProgress.add(new ProcessProgressEventHandler() {
public void invoke(Signature sender, ProcessProgressEventArgs args) {
int percent = (args.getProcessedSignatures() * 100) / args.getTotalSignatures();
updateProgressBar(percent);
}
});
Validar payloads de código de barras
for (BarcodeSignature barcodeSignature : signatures) {
String text = barcodeSignature.getText();
if (!text.matches("APPR-\\d{4}-\\d{3}")) {
logger.warn("Invalid format: " + text);
continue;
}
if (!validateChecksum(text)) {
logger.error("Checksum failed for: " + text);
flagForManualReview(document);
}
}
Otimizar a seleção de páginas por tipo de documento
PagesSetup contractsSetup = new PagesSetup();
contractsSetup.setLastPage(true); // Contracts usually signed on last page
options.setPagesSetup(contractsSetup);
Filtrar por tipo de código de barras após a pesquisa (se precisar apenas de códigos QR)
for (BarcodeSignature sig : signatures) {
if ("QRCode".equals(sig.getEncodeType())) {
// Process QR code
}
}
Extrair dimensões da imagem do código de barras (se necessário para renderização)
for (BarcodeSignature sig : signatures) {
int width = sig.getWidth();
int height = sig.getHeight();
// Use dimensions for overlay or thumbnail generation
}
Perguntas Frequentes
Q: Posso pesquisar múltiplos formatos de código de barras em uma única chamada?
A: Sim. BarcodeSearchOptions pesquisa todos os formatos suportados por padrão. Filtre os resultados por getEncodeType() se precisar apenas de tipos específicos.
Q: Como lidar com documentos que contêm assinaturas de código de barras e de imagem?
A: Execute pesquisas separadas — use BarcodeSignature.class para códigos de barras e ImageSignature.class para assinaturas de imagem, então combine os resultados conforme necessário.
Q: Qual é o impacto de desempenho ao pesquisar todas as páginas versus páginas específicas?
A: Escanear cada página de um PDF de 50 páginas pode levar 3–5 segundos. Limitar às primeiras + últimas páginas geralmente termina em menos de 1 segundo.
Q: Isso funciona com PDFs escaneados (imagens raster)?
A: Apenas se o código de barras foi adicionado como um objeto de assinatura digital. Para códigos de barras apenas raster, será necessário um reconhecedor de código de barras baseado em imagem (por exemplo, GroupDocs.Barcode).
Q: Como posso verificar se uma assinatura de código de barras não foi adulterada?
A: Incorpore um hash ou assinatura digital dentro do payload do código de barras, então recalcule o hash nos dados originais e compare. Isso requer a chave de assinatura original ou certificado.
Última atualização: 2026-06-21
Testado com: GroupDocs.Signature 23.12 for Java
Autor: GroupDocs