Antes de entregar a tarefa de tradução de PDF, verifique primeiro a fonte, em vez de se apressar para alterá-la.
A lista de fontes padrão tem um comprimento diferente da tupla retornada por full=True. A seguir, leia os primeiros seis itens e verifique se os bytes de fonte retornados por extract_font estão vazios. Uma referência de fonte Base14 não significa que a fonte esteja incorporada no programa; nem as fontes de subconjunto devem ser consideradas um erro.
Quando muitas pessoas conseguem traduzir um PDF, a primeira coisa que pensam é alterá-lo diretamente para Siyuan Heibo ou Arial. Isto muitas vezes causa problemas durante a entrega: os símbolos matemáticos tornam-se quadrados, os números das tabelas ficam desalinhados ou a tradução não pode ser aberta em determinados leitores. Este artigo foi escrito para desenvolvedores e proprietários de documentos que precisam assumir a tarefa de tradução de PDF. Após a leitura, você saberá como usar PyMuPDF para inventariar fontes, como interpretar os resultados retornados e quais conclusões não podem ser tiradas com base apenas na saída do código.
O objetivo do inventário de fontes é confirmar a editabilidade técnica e a estabilidade da renderização, e não conduzir uma auditoria de conformidade legal. A lista de fontes padrão é diferente do comprimento da tupla retornado por full=True. Na leitura, deve-se pegar os seis primeiros itens e depois verificar se os bytes da fonte retornados por extract_font estão vazios. As referências de fonte Base14 não significam que a fonte esteja incorporada no programa, e a subconjunto de fontes nem sempre deve ser tratada como um erro.
Conclusão de uma frase
Faça um inventário das fontes primeiro e depois decida o caminho da tradução. Não altere as fontes globalmente antes de extrair o texto.
| sua situação | Práticas recomendadas | razão |
|---|---|---|
| O programa de fontes está vazio | Os registros não são extraídos para o incorporador e confirmam a situação da página | A referência Base14 não é igual à fonte incorporada |
| encontrar fontes de subconjunto | Mantenha a identidade da fonte | Fontes de subconjunto não são iguais a corrupção |
| A lista de fontes está vazia | Confirme o conteúdo da página | A página pode ser uma imagem ou outro caminho desenhado |
| Precisa processar arquivos reais | Verifique primeiro com amostras dessensibilizadas | O código de exemplo não representa efeitos em todos os arquivos reais |
Por que não podemos substituir fontes diretamente em todo o mundo?
A substituição direta de fontes encontrará vários problemas típicos:
- Os símbolos matemáticos no texto original tornam-se quadrados.
- O alinhamento de largura igual dos números na tabela é inválido.
- Fontes restritas são incorporadas, fazendo com que a tradução não abra em alguns leitores.
Portanto, antes de iniciar a extração de texto ou reconstrução tipográfica, faça um inventário de fontes do documento. `get_page_fonts()` é o teste subjacente fornecido pelo PyMuPDF, que pode informar quais recursos de fonte são realmente referenciados por cada página, se estão totalmente incorporados e o tipo de codificação. Estas informações determinam se OCR, substituição direta ou reorganização manual devem ser usados no futuro.
Pontos-chave na leitura de informações de fontes
- A lista de fontes padrão tem um comprimento diferente da tupla retornada por
full=True, que é lida como os primeiros seis itens. - Quando o programa de fontes está vazio, significa que os bytes da fonte incorporada não são extraídos.
- As fontes do subconjunto só precisam reter o identificador da fonte e não julgá-lo diretamente como um erro.
Teste sintético: construção de memória e verificação de asserção
Para permitir que o exemplo seja executado isoladamente, construímos um caso de teste totalmente independente. Em vez de depender de arquivos externos, o script usa PyMuPDF para criar um PDF contendo fontes padrão na memória e imediatamente faz o inventário de fontes nele. Isto não só garante a reprodutibilidade, mas também evita riscos de direitos autorais e privacidade.
import pymupdf
with pymupdf.open() as doc:
page = doc.new_page()
page.insert_text((72, 72), "Font sample", fontname="helv")
fonts = doc.get_page_fonts(0, full=True)
assert fonts
report = []
for item in fonts:
xref, ext, kind, basefont, name, encoding = item[:6]
extracted_name, extracted_ext, extracted_type, data = doc.extract_font(xref)
report.append({"name": basefont, "font_program_present": bool(data),
"xref": xref, "encoding": encoding})
assert report[0]["name"] == "Helvetica"
assert report[0]["font_program_present"] is False
assert report[0]["xref"] > 0
Este teste tem limites claros: um objeto de fonte sintética "corrompido" ou "não incorporado" não pode ser construído na memória sem trazer um arquivo de fonte externo. Portanto, este teste se concentra em duas coisas: verificar a precisão da análise de fontes incorporadas normais e o tratamento defensivo da função de números de páginas inválidos. As ramificações de exceção precisam ser testadas individualmente. O código de demonstração é executado em um ambiente isolado, mas isso não representa uma garantia de todos os arquivos reais ou do desempenho do produto.
Critérios de aceitação e limites de revisão manual
A saída "segura" ou "aviso" de um código são apenas sinais técnicos e não podem ser diretamente equiparados à viabilidade de tradução. O script pode relatar com precisão o status da incorporação, mas não pode dizer se a fonte possui um glifo correspondente no idioma de destino, nem pode avaliar se a licença permite a modificação da incorporação. Essas decisões precisam ser tomadas por pessoas dentro do contexto do projeto.
Decisões específicas de tratamento de exceções
| observar | o que fazer | não deve ser inferido |
|---|---|---|
| O programa de fontes está vazio | Registros não buscados para incorporação | Citação Base14 não é igual a incorporação |
| fonte do subconjunto | Mantenha a identidade da fonte | Nenhuma determinação direta de dano |
| A lista está vazia | Confirme o conteúdo da página | Pode ser uma imagem ou outro caminho desenhado |
Antes de processar documentos importantes, guarde os originais e revise-os de acordo com os limites e itens de aceitação acima.
🎯 Qual método é adequado para você?
Se você acabou de receber um PDF para ser traduzido
Faça um inventário das fontes antes de decidir qual caminho seguir. Não se apresse em substituir as fontes.
Se o resultado da detecção mostrar que o programa de fontes está vazio
Documente isso e confirme o conteúdo da página, não trate como se a incorporação estivesse completa.
Se houver subconjuntos de fontes no documento
Mantenha o logotipo da fonte e trate-o como uma situação normal, em vez de julgá-lo diretamente como um erro.
Se você precisar verificar com arquivos reais
Use amostras dessensibilizadas que você tem permissão para carregar e verifique novamente os resultados usando as listas de verificação deste artigo.
❓ Perguntas frequentes (FAQ)
1. A referência da fonte Base14 significa que a fonte foi incorporada?
não. A referência da fonte Base14 não significa que o programa de fontes foi incorporado. Você precisa verificar se os bytes da fonte retornados por extract_font estão vazios.
2. Há algo errado com a fonte do subconjunto?
incerto. As fontes de subconjunto não devem ser totalmente julgadas como erros. Apenas mantenha o logotipo da fonte e não o julgue diretamente como danificado.
3. Se a lista de fontes estiver vazia, isso significa que há um problema com a página?
incerto. Quando a lista estiver vazia, você deve primeiro confirmar o conteúdo da página. A página pode ser uma imagem ou outro caminho de desenho.
4. Os resultados "seguros" de um script podem ser usados diretamente nas decisões de tradução?
não pode. A saída do código é apenas um sinal técnico e não pode dizer se os glifos do idioma de destino estão disponíveis ou se a licença permite a modificação da incorporação.
📝 Resumo
O inventário de fontes é uma etapa básica antes da tradução do PDF. Ajuda a avaliar a editabilidade e a estabilidade de renderização do documento. Depois de obter o arquivo, primeiro verifique a fonte e selecione o caminho. Após a tradução, ainda é necessário verificar a correspondência entre título, texto e legenda.
Experimente agora: carregue o documento para iniciar a tradução, mantendo o layout original


