Destaque as palavras de pesquisa do PDF, por que o retângulo enquadra o texto em itálico incorretamente?
As fontes em itálico não tornam necessariamente a área do Quad pesquisado menor que o retângulo envolvente. Quando você precisar reter as informações de direção dos quatro cantos, use diretamente o resultado de quads=True para adicionar destaque; não use nenhum limite de diferença de área para determinar se o realce está correto.
Quando a caixa de destaque de pesquisa para texto em itálico está distorcida, muitas vezes não é porque há um problema com a fonte em si, mas porque o objeto geométrico usado para realçar está selecionado incorretamente. Este artigo é destinado a desenvolvedores que usam PyMuPDF para processar posicionamento de texto PDF. Explica por que o retângulo envolvente (Rect) não pode ser usado para determinar se o destaque do texto em itálico ou girado está correto e como lidar com isso em diferentes situações.
Depois de ler este artigo, você pode decidir se deseja usar Quad ou Rect para resultados de pesquisa, saber como lidar com ausência de ocorrências, linhas cruzadas, ocorrências múltiplas e corte CropBox ao pesquisar e entender quais problemas estão além do escopo do posicionamento geométrico.
O texto completo é demonstrado com amostras sintéticas e o código passou nas verificações de amostra em um ambiente isolado, mas isso não representa uma garantia de todos os arquivos reais ou efeitos do produto. Antes de processar documentos importantes, guarde os originais e revise-os de acordo com os limites e itens de aceitação abaixo.
Para destaque de pesquisa de texto em itálico, escolha Quad ou Rect? Conclusão de uma frase
A fonte em itálico não torna necessariamente a área Quad obtida pela pesquisa menor que o retângulo envolvente. Quando for necessário reter as informações de direção dos quatro cantos, use diretamente os resultados de quads=True para adicionar destaques. Não use nenhum limite de diferença de área para determinar se o realce está correto.
| sua situação | Práticas recomendadas | razão |
|---|---|---|
| Texto em itálico ou girado, a orientação dos quatro cantos precisa ser preservada | Use diretamente os resultados de quads=True para adicionar destaques | Quad retém informações de orientação de quatro cantos |
| Quero usar o limite de diferença de área para determinar se o realce está correto. | não faça isso | A fonte em itálico não torna necessariamente a área do Quad menor e o julgamento do limite não é confiável. |
| Os termos de pesquisa abrangem linhas e o mecanismo não os reconhece como a mesma unidade de vocabulário. | Mantenha todos os fragmentos Quad retornados e desenhe destaques individualmente | A fusão forçada em um Rect perderá a semântica do espaço em branco no meio. |
| A página tem recorte CropBox | Verifique se o conteúdo ainda está dentro da área visível após restaurar o CropBox | As coordenadas retornadas por search_for são baseadas no espaço da página original não girado e não podem ser assumidas. get_text ignora a área cortada por padrão |
| Múltiplos acessos | Mantenha os números das páginas item por item e processe-os um por um | Apenas processar o primeiro irá perder as posições restantes |
Por que o texto em itálico aparece incorretamente?
Muitas pessoas presumirão, por padrão, que o retângulo de caracteres em itálico é muito maior que o Quad, portanto, usar Rect para realçar causará o "desvio de quadro". Na verdade, a fonte em itálico não torna necessariamente a área do Quad pesquisado menor que o retângulo envolvente, portanto, não é confiável usar a diferença de área para julgar se o destaque está correto.
O que é realmente necessário é preservar as informações de orientação dos quatro cantos. Acontece que o Quad registra essas informações e usá-lo para adicionar destaques diretamente é mais confiável do que usar um retângulo envolvente para adivinhar a forma.
Exemplo de composição independente
Veja a lista de importação para exemplos de dependências. O código constrói a entrada na memória e não requer arquivos externos para ser executado. Os registros da operação são fornecidos separadamente e não representam garantia de que todos os documentos sejam autênticos.
import pymupdf
with pymupdf.open() as source:
page = source.new_page(width=300, height=300)
page.insert_text((100, 250), "Searchable", fontsize=14, rotate=90)
hits = page.search_for("Searchable", quads=True)
assert len(hits) == 1
assert isinstance(hits[0], pymupdf.Quad)
page.add_highlight_annot(hits)
assert page.search_for("Missing", quads=True) == []
raw = source.tobytes()
with pymupdf.open(stream=raw, filetype="pdf") as doc:
page = doc[0] # Keep the owning page alive while using annotations.
annotations = list(page.annots())
assert len(annotations) == 1
assert len(annotations[0].vertices) == 4
Processamento correto de saída e entrada de limite
O exemplo sintético acima gera um PDF na memória que é usado para verificar o comportamento do Quad. Abaixo estão várias entradas de limite comuns.
1. As palavras de pesquisa abrangem linhas
Se o termo de pesquisa abranger novas linhas e o mecanismo não o reconhecer como a mesma unidade de vocabulário, search_for poderá retornar uma lista vazia ou corresponder apenas a fragmentos parciais.
- Não mescle à força vários Quads não adjacentes em um Rect, caso contrário, a semântica do espaço em branco no meio será perdida.
- Mantenha todos os fragmentos Quad retornados e desenhe os destaques separadamente.
2. O termo de pesquisa contém caracteres especiais regulares
Se um termo de pesquisa contiver caracteres especiais regulares sem escape deles, os resultados poderão não ser os esperados. A string de entrada deve ser processada com segurança antes da chamada.
3. Recorte CropBox
Se a página tiver corte CropBox, as coordenadas retornadas por search_for ainda serão baseadas no espaço da página original não girado. Após restaurar o CropBox, você precisa verificar se o conteúdo ainda está dentro da área visível. Você não pode presumir que get_text ignora a área de corte por padrão.
Critérios de aceitação e limites de revisão manual
Esta solução resolve apenas o problema de posicionamento geométrico. As seguintes situações não são uma questão de escolha entre Quad e Rect:
- A camada de texto do próprio PDF está danificada;
- Incorporação anormal de fontes;
- Existem camadas ocultas.
Nestes casos, os resultados do search_for podem não ser credíveis e devem ser submetidos a revisão manual ou re-OCR. O código de amostra verifica apenas as propriedades geométricas e o efeito ponta a ponta ainda precisa ser avaliado com base em tipos de documentos específicos.
Decisões específicas de tratamento de exceções
| observar | o que fazer | não deve ser inferido |
|---|---|---|
| Não há resultados de pesquisa | Verifique a camada de texto e palavras-chave | Não crie destaques vazios |
| Girar texto | Mantenha os cantos Quad | Adivinhando a precisão sem diferença de área |
| Múltiplos acessos | Mantenha os números das páginas item por item | Não lide apenas com o primeiro |
📊 Comparação principal
| objeto | Informações que podem ser retidas | Cenários aplicáveis | Coisas a serem observadas |
|---|---|---|---|
| Quad | Quatro cantos | Itálico, texto girado, requer realce preciso | Use os resultados de quads=True diretamente |
| Retângulo (retângulo envolvente) | faixa externa | Seleção simples de moldura para texto horizontal | O texto em itálico ou girado pode estar fora do quadro e não é adequado para avaliar a correção. |
| Reto mesclado | escopo geral | Não recomendado para pesquisas cruzadas | A semântica do espaço em branco no meio será perdida |
🎯 Qual método é adequado para você?
se você……
- As direções dos quatro cantos do texto precisam ser preservadas: use diretamente os resultados de
quads=Truepara adicionar destaques. - Se você quiser usar o limite de diferença de área para determinar se o realce está correto: Não faça isso. A fonte em itálico não torna necessariamente a área Quad menor.
- Linhas cruzadas do termo de pesquisa encontradas: Mantenha todos os fragmentos Quad, desenhe destaques separadamente, não mescle em um Rect.
- Tratamento de páginas com corte CropBox: Após restaurar o CropBox, verifique se o conteúdo ainda está dentro da área visível.
Use esta lista de verificação para tradução de documentos
Primeiro verifique a ordem das páginas, a localização da fonte e a integridade do texto e, em seguida, envie a mesma amostra dessensibilizada para o processo de tradução. Após a tradução, você ainda precisa verificar se o título, o texto e as ilustrações correspondem corretamente. Você não pode simplesmente verificar se o texto está suave.
OmniDoc (portal de produtos) fornece um portal de tradução de documentos multiformato, e o site oficial apresenta funções de OCR, glossário e comparação bilíngue. Para equipes que desejam trabalhar diretamente a partir dos arquivos, vale a pena avaliar esse caminho com exemplos da vida real. Use arquivos dessensibilizados que você tem permissão para carregar e use os itens de verificação neste artigo para revisar os resultados. Não há nenhuma afirmação aqui de que o OmniDoc use as bibliotecas de código aberto ou algoritmos internos mencionados neste artigo, e os exemplos não substituem os testes de desempenho do produto.
Referências
❓ Perguntas frequentes (FAQ)
1. O texto em itálico definitivamente tornará a área do Quad menor?
incerto. A fonte em itálico não torna necessariamente a área do Quad pesquisado menor que o retângulo envolvente, portanto, você não pode confiar na diferença de área para determinar se o destaque está correto.
2. Quando as informações dos cantos quádruplos devem ser retidas?
Quando precisar reter as informações de direção dos quatro cantos, você deve usar diretamente os resultados de quads=True para adicionar destaques.
3. O termo de pesquisa ultrapassa as linhas e nenhum resultado é encontrado. O que devo fazer?
Não crie destaques vazios, verifique primeiro a camada de texto e as palavras-chave. Se apenas alguns fragmentos forem retornados, todos os fragmentos Quad retornados deverão ser retidos e os destaques desenhados separadamente, em vez de serem forçados em um único Rect.
4. O que você deve prestar atenção ao cortar a página com CropBox?
As coordenadas retornadas por search_for ainda são baseadas no espaço da página original não girado. Após restaurar o CropBox, você precisa verificar se o conteúdo ainda está dentro da área visível. Você não pode presumir que get_text ignora a área de corte por padrão.
📝 Resumo
O destaque do texto em itálico e rotacionado deve ser baseado em Quad, e os números das páginas e as informações dos quatro cantos devem ser retidos item por item. Problemas como danos à camada de texto e incorporação anormal de fontes ainda exigem revisão manual ou re-OCR.
Baixe OmniDoc Desktop grátis: documentos, planilhas, apresentações e PDFs em um só lugar


