Resalte las palabras de búsqueda de PDF, ¿por qué el rectángulo enmarca incorrectamente el texto en cursiva?
Las fuentes en cursiva no necesariamente hacen que el área del Quad buscado sea más pequeña que el rectángulo circundante. Cuando necesite conservar la información de dirección de las cuatro esquinas, utilice directamente el resultado de quads=True para agregar resaltado; no utilice ningún umbral de diferencia de área para determinar si el resaltado es correcto.
Cuando el cuadro resaltado de búsqueda para texto en cursiva está torcido, a menudo no se debe a que haya un problema con la fuente en sí, sino a que el objeto geométrico utilizado para resaltar está seleccionado incorrectamente. Este artículo está dirigido a desarrolladores que utilizan PyMuPDF para procesar el posicionamiento de texto PDF. Explica por qué el rectángulo circundante (Rect) no se puede utilizar para determinar si el resaltado del texto en cursiva o rotado es correcto y cómo manejarlo en diferentes situaciones.
Después de leer este artículo, puede decidir si utilizar Quad o Rect para los resultados de búsqueda, saber cómo manejar la falta de resultados, las filas cruzadas, los resultados múltiples y el recorte de CropBox durante la búsqueda, y comprender qué problemas están más allá del alcance del posicionamiento geométrico.
El texto completo se demuestra con muestras sintéticas y el código pasó verificaciones de muestra en un entorno aislado, pero esto no representa una garantía de todos los archivos o efectos del producto reales. Antes de procesar documentos importantes, conserve los originales y luego revíselos de acuerdo con los límites y los elementos de aceptación a continuación.
Para resaltar texto en cursiva en la búsqueda, elija Quad o Rect. Conclusión de una frase
La fuente en cursiva no necesariamente hace que el área cuádruple obtenida mediante la búsqueda sea más pequeña que el rectángulo circundante. Cuando sea necesario conservar la información de dirección de las cuatro esquinas, utilice directamente los resultados de quads=True para agregar resaltados. No utilice ningún umbral de diferencia de área para determinar si el resaltado es correcto.
| tu situación | Prácticas recomendadas | razón |
|---|---|---|
| Texto en cursiva o rotado; se debe conservar la orientación de las cuatro esquinas. | Utilice directamente los resultados de quads=True para agregar aspectos destacados | Quad conserva información de orientación de las cuatro esquinas |
| Quiero utilizar el umbral de diferencia de área para determinar si el resaltado es correcto. | no hagas esto | La fuente en cursiva no necesariamente reduce el área del Quad y el juicio de umbral no es confiable. |
| Los términos de búsqueda abarcan líneas y el motor no los reconoce como la misma unidad de vocabulario. | Guarde todos los fragmentos de Quad devueltos y dibuje los aspectos más destacados individualmente | Fusionarse a la fuerza en un Rect perderá la semántica del espacio en blanco en el medio. |
| La página tiene recorte CropBox. | Verifique que el contenido todavía esté dentro del área visible después de restaurar CropBox | Las coordenadas devueltas por search_for se basan en el espacio de la página original sin rotar y no se puede asumir que get_text ignora el área recortada de forma predeterminada. |
| Múltiples golpes | Mantenga los números de página artículo por artículo y procéselos uno por uno | Solo al procesar el primero se perderán las posiciones restantes. |
¿Por qué el texto en cursiva aparece incorrectamente?
Mucha gente asumirá de forma predeterminada que el rectángulo circundante de caracteres en cursiva es mucho más grande que el Quad, por lo que usar Rect para resaltar provocará la "desviación del marco". De hecho, la fuente en cursiva no necesariamente hace que el área del Quad buscado sea más pequeña que el rectángulo circundante, por lo que no es confiable utilizar la diferencia de área para juzgar si el resaltado es correcto.
Lo que realmente se necesita es preservar la información de orientación de las cuatro esquinas. Quad registra esta información y usarla para agregar resaltados directamente es más confiable que usar un rectángulo circundante para adivinar la forma.
Ejemplo de composición autónoma
Consulte la lista de importación, por ejemplo, dependencias. El código construye entradas en la memoria y no requiere archivos externos para ejecutarse. Los registros de operación se proporcionan por separado y no representan una garantía de que todos los documentos sean 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
Procesamiento correcto de salida y entrada de límites
El ejemplo sintético anterior genera un PDF en memoria que se utiliza para verificar el comportamiento del Quad. A continuación se muestran varias entradas de límites comunes.
1. Las palabras de búsqueda abarcan líneas
Si el término de búsqueda abarca nuevas líneas y el motor no lo reconoce como la misma unidad de vocabulario, search_for puede devolver una lista vacía o solo coincidir con fragmentos parciales.
- No fuerce la fusión de varios Quads no adyacentes en un Rect, de lo contrario se perderá la semántica del espacio en blanco en el medio.
- Guarde todos los fragmentos Quad devueltos y dibuje los aspectos más destacados por separado.
2. El término de búsqueda contiene caracteres especiales regulares.
Si un término de búsqueda contiene caracteres especiales regulares sin caracteres de escape, es posible que los resultados no sean los esperados. La cadena de entrada debe procesarse de forma segura antes de llamar.
3. Recorte de CropBox
Si la página tiene un recorte CropBox, las coordenadas devueltas por search_for todavía se basan en el espacio de la página original sin rotar. Después de restaurar CropBox, debe verificar que el contenido aún esté dentro del área visible. No puede asumir que get_text ignore el área de recorte de forma predeterminada.
Criterios de aceptación y límites de revisión manual
Esta solución sólo resuelve el problema de posicionamiento geométrico. Las siguientes situaciones no son cuestión de elegir entre Quad y Rect:
- La capa de texto del PDF está dañada;
- Incrustación de fuentes anormales;
- Hay capas ocultas.
En estos casos, los resultados de search_for pueden no ser creíbles en absoluto y deben enviarse a revisión manual o re-OCR. El código de muestra solo verifica las propiedades geométricas y el efecto de un extremo a otro aún debe evaluarse en función de tipos de documentos específicos.
Decisiones específicas de manejo de excepciones
| observar | que hacer | no debe inferirse |
|---|---|---|
| Buscar sin resultados | Verifique la capa de texto y las palabras clave | No crees resaltados vacíos |
| Rotar texto | Conservar las cuatro esquinas del Quad | Adivinar la precisión sin usar diferencias de área |
| y en muchos puntos | Cada elemento debe conservarse con números de página | No te limites solo con la primera |
📊 Comparación de núcleos
| Objetivo | Información que pueda preservarse | Escenarios aplicables | Notas |
|---|---|---|---|
| Quad | Cuatro esquinas | El texto cursivo y giratorio requiere un resaltado preciso | Utiliza directamente los resultados de quads=True |
| Rect (rectángulo externo) | Alcance de contacto externo | Selección sencilla de texto horizontal | El texto cursivo o giratorio puede estar fuera de caja y no ser adecuado para comprobar la precisión |
| Rect fusionado | Alcance general | No recomendado para búsqueda cruzada | Esto perderá el significado de las áreas en blanco en el centro |
🎯 ¿Qué método te conviene?
Si ......
- Las esquinas de texto deben preservarse: Utiliza directamente los resultados de
quads=Truepara añadir resaltados. - Quieren juzgar si el resaltado es correcto por el umbral de diferencia de área: No hagas esto; las fuentes en cursiva no necesariamente hacen que el área del quad sea más pequeña.
- Si encuentras términos de búsqueda que cruzan líneas: Mantén todos los segmentos Quad, rescintalos por separado y no los fusiones en un solo Rect.
- Manejo de páginas con recorte de CropBox: Tras restaurar CropBox, verifica que el contenido sigue dentro del área visible.
Usa esta lista de verificación para la traducción de documentos
Primero, revisa a fondo el orden de las páginas, la ubicación de la fuente y la integridad del texto, y luego entrega la misma muestra anonimizada al proceso de traducción. Tras la traducción, sigue siendo necesario comprobar si el título, el texto principal y los pies de foto corresponden correctamente; no basta con juzgar solo por si el texto es fluido.
OmniDoc (Entrada de producto) ofrece portales de traducción de documentos en múltiples formatos, y su página web oficial introduce OCR, terminología y funciones de referencia bilingües. Para los equipos que quieren empezar directamente desde los archivos, este es un camino que merece la pena evaluar con muestras reales. Por favor, utiliza el archivo anonimizado que has autorizado para subir y verifica los resultados con la lista de comprobación de este artículo. Esto no pretende que OmniDoc utilice las librerías de código abierto o los algoritmos internos mencionados en este artículo, ni los ejemplos sustituyen las pruebas de rendimiento del producto.
Referencias
❓ Preguntas frecuentes (FAQ)
1. ¿El texto cursivo hace necesariamente que el área del quad sea más pequeña?
No necesariamente. Los glifos cursivas no necesariamente producen un área cuádruple más pequeña que un rectángulo externo, por lo que no puedes basarte en diferencias de área para determinar si el resaltado es correcto.
2. ¿Cuándo debe conservarse la información de cuatro rincones del Quad?
Si necesitas mantener la información de dirección de las cuatro esquinas, deberías usar directamente los resultados de quads=True para añadir resaltados.
3. ¿Qué deberías hacer si tu término de búsqueda cruza límites y no cumple con el objetivo?
No crees resaltados vacíos; primero revisa la capa de texto y las palabras clave. Si solo se devuelve una parte del segmento, todos los segmentos Quad devueltos deben mantenerse y resaltarse por separado, en lugar de fusionarse forzadamente en un solo Rect.
4. La página incluye CropBox. ¿A qué debes prestar atención al cortar?
Las coordenadas devueltas por search_for siguen basándose en el espacio de página original que no ha sido rotado. Después de restaurar CropBox, necesitas verificar si el contenido sigue dentro de la línea de visión; no puedes asumir que get_text ignora por defecto el área de recorte.
📝 Resumen
Resaltar cursivas y rotar el texto debe basarse en el Quad, y los números de página y la información de las esquinas deben conservarse para cada elemento. Problemas como la corrupción de la capa de texto y la incrustación anormal de fuentes siguen requiriendo revisión manual o re-OCR.


