Files
ObsiGate/docs/GUIDES/RECHERCHE_PDF_EXCALIDRAW.md
T
bruno d79202e698
CI / lint (push) Successful in 2m52s
CI / security (push) Successful in 2m11s
CI / test (push) Successful in 4m48s
CI / build (push) Successful in 2m0s
CI / e2e (push) Failing after 16m50s
feat: menus tableur a icones, fermeture au focus et polish mobile #179
2026-10-04 19:27:50 -04:00

20 KiB
Raw Blame History

🔍 Guide Recherche, PDF, Excel & Excalidraw

ObsiGate va au-delĂ  de la simple lecture : recherche puissante, rendu des documents riches (PDF, diagrammes) et indexation de leur contenu pour que tout soit retrouvable.

Public : tous les utilisateurs Fiches techniques : features/semantic-search.md · features/pdf.md · features/excalidraw.md


1. Recherche plein texte (TF-IDF)

Le moteur d'ObsiGate s'appuie sur un index inversé et un scoring TF-IDF avec :

  • Boost titre — une correspondance dans le titre pĂšse 3× plus.
  • Normalisation des accents — resume trouve rĂ©sumĂ©, elephant trouve Ă©lĂ©phant.
  • Stemming français — les variantes des mots sont rapprochĂ©es.
  • Snippets surlignĂ©s — les termes trouvĂ©s sont mis en <mark> dans l'extrait.
  • Facettes — compteurs par vault, par tag et par extension sur les rĂ©sultats, panneau repliable d'un clic (chevron, Ă©tat mĂ©morisĂ©).
  • Pagination — 50 rĂ©sultats par page.
  • Tri — par pertinence (TF-IDF) ou par date de modification.
  • Chips de filtres — les filtres actifs apparaissent sous forme de puces retirables.
  • Historique — les 50 derniĂšres recherches sont conservĂ©es en localStorage.

La recherche s'effectue sans I/O disque : le contenu est déjà en mémoire.


2. Syntaxe de requĂȘte

Opérateur Description Exemple
tag:<nom> Filtre par tag tag:recette docker
#<nom> Raccourci de tag #linux serveur
vault:<nom> Filtre par vault vault:IT kubernetes
title:<texte> Filtre par titre title:pizza
path:<texte> Filtre par chemin path:recettes/soupes
ext:<type> Filtre par type de fichier ext:md kubernetes
"phrase exacte" Recherche d'une phrase tag:"multi mots"

Les opérateurs sont combinables :

tag:linux vault:IT ext:md serveur web

Cette requĂȘte cherche « serveur web » dans les fichiers Markdown de la vault IT portant le tag linux.

Filtres par extension

Extension Contenu
ext:md Notes Markdown
ext:py, ext:sh, ext:js Scripts et code
ext:pdf Documents PDF (texte extrait)
ext:excalidraw Diagrammes Excalidraw (texte extrait)

3. Autocomplétion et suggestions

  • /api/suggest — suggĂšre des titres de fichiers.
  • /api/tags/suggest — suggĂšre des tags.
  • Navigation clavier : ↑ / ↓ puis EntrĂ©e ; Échap ferme les suggestions.

Raccourcis de recherche

Raccourci Action
Ctrl + K / Cmd + K Focaliser la barre de recherche
/ Focaliser la recherche (hors champ texte)
↑ / ↓ Naviguer dans les suggestions
Entrée Sélectionner la suggestion active ou lancer la recherche
Échap Fermer les suggestions / quitter la recherche

Recherches sauvegardées et signets sont disponibles via l'API (/api/saved-searches, /api/bookmarks).


4. Recherche sémantique (optionnelle)

Au classement TF-IDF peut s'ajouter un classement par embeddings, fusionné via la méthode RRF (Reciprocal Rank Fusion). Activation : touche ~ (ou Alt + S) dans la recherche.

Deux modes :

  1. Sans dĂ©pendance — un embedder par hachage fournit une base utilisable immĂ©diatement.
  2. Embeddings rĂ©els — installez backend/requirements-semantic.txt et/ou renseignez les variables OBSIGATE_EMBEDDING_* pour utiliser all-MiniLM-L6-v2.

Détails et configuration : features/semantic-search.md.


5. Support PDF

Lecture

Les fichiers PDF de vos vaults s'affichent en ligne dans le navigateur via le visualiseur PDF natif (iframe + <embed>). Le fichier est streamé en HTTP Range (206 Partial Content) : les gros PDF se chargent progressivement.

Recherche

Le texte est extrait à l'indexation (pypdf / pymupdf), donc le contenu des PDF est recherchable via la recherche plein texte. Utilisez ext:pdf pour limiter les résultats aux PDF.

Métadonnées

GET /api/file/{vault}/pdf/info renvoie les métadonnées (pages, titre, auteur) sans transférer le document.

curl "http://localhost:2020/api/file/Recettes/pdf/info?path=menu.pdf"

Limites

  • Pas d'OCR : les PDF scannĂ©s (images) ne sont pas recherchables.
  • Pas d'annotation ni d'Ă©dition du PDF lui-mĂȘme.

6. Tableurs Excel (XLSX)

Affichage et édition

Un fichier .xlsx s'ouvre dans une visionneuse dĂ©diĂ©e : un tableau par feuille, des onglets pour naviguer entre elles (toujours visibles, mĂȘme Ă  une seule feuille), les en-tĂȘtes A1/B1 et les numĂ©ros de ligne. La barre de commandes regroupe les actions en sections (Formules · Insertion · Vue · Fichier) autour d'un bouton Enregistrer principal. Chaque cellule est modifiable directement (clic), EntrĂ©e valide, Échap annule la saisie. Enregistrer envoie les cellules modifiĂ©es Ă  PUT /api/file/{vault}/xlsx/save : une sauvegarde par feuille, avec backup automatique du fichier avant Ă©criture, et une Ă©criture atomique (le classeur n'est jamais laissĂ© Ă  moitiĂ© Ă©crit).

Le bouton « + » Ă  cĂŽtĂ© des onglets ajoute une nouvelle feuille. Deux pastilles d'Ă©tat rappellent les limites de la vue : « Lecture seule » pour les formats .xls/.ods, et « Formules non recalculĂ©es » — ObsiGate affiche la formule telle qu'elle est enregistrĂ©e, Excel la recalcule Ă  l'ouverture et les cellules dĂ©pendantes ne se rafraĂźchissent pas Ă  l'Ă©cran.

Avertissement avant enregistrement

Certains classeurs contiennent des Ă©lĂ©ments qu'ObsiGate ne sait pas réécrire : valeurs calculĂ©es mises en cache par Excel, segments (slicers), chronologies, contrĂŽles de formulaire, connexions/requĂȘtes, XML personnalisĂ©, signature numĂ©rique, commentaires enrichis, macros. L'ouverture affiche alors un bandeau qui les liste, et la premiĂšre sauvegarde demande confirmation dans une fenĂȘtre intĂ©grĂ©e au thĂšme de l'application. Si vous refusez, rien n'est Ă©crit.

Les graphiques, images et tableaux croisés sont, eux, bien conservés.

Si le classeur est modifiĂ© ailleurs entre-temps (autre poste, Excel, synchronisation
), ObsiGate n'interrompt pas votre travail : un bandeau vous propose de rĂ©essayer. Le bouton RĂ©essayer relit d'abord le fichier pour rĂ©cupĂ©rer la version courante, puis rejoue l'enregistrement — vos modifications restent en place pendant tout ce temps.

Formules

Par sécurité, une valeur saisie commençant par = ou @ est stockée comme texte (une formule injectée s'exécuterait à l'ouverture du fichier dans Excel). Le bouton f(x) de la barre d'outils active les vraies formules pour la session en cours.

curl -X PUT "http://localhost:2020/api/file/Recettes/xlsx/save?path=budget.xlsx"   -H "Content-Type: application/json"   -d '{"sheet": "Budget", "cells": {"B1": "250"}, "allow_formula": false, "force": false}'
  • allow_formula : true pour Ă©crire une vraie formule (=B1*2).
  • force : true pour enregistrer malgrĂ© les Ă©lĂ©ments non prĂ©servĂ©s (sinon l'API rĂ©pond 409 xlsx_lossy_content).
  • if_match (facultatif) : la version du fichier attendue, telle que la lecture la renvoie (xlsx_revision ou revision). Si le fichier a changĂ© depuis, l'Ă©criture est refusĂ©e (409 conflict, details.reason = "stale_revision") au lieu d'Ă©craser le travail de l'autre Ă©crivain ; relisez le fichier puis renvoyez la nouvelle version. Les trois routes d'Ă©criture (xlsx/save, xlsx/structure, csv/save) acceptent l'en-tĂȘte If-Match ou le champ if_match et renvoient la version Ă  jour dans revision.

Feuilles volumineuses et lecture par fenĂȘtres

Le rendu est plafonnĂ© Ă  500 lignes × 40 colonnes par feuille. Quand une feuille dĂ©passe ce plafond, un bandeau « Feuille tronquĂ©e » l'annonce explicitement (par exemple « 500 lignes affichĂ©es sur 520 ») au lieu de prĂ©senter une table courte comme complĂšte — le classeur, lui, n'est jamais modifiĂ©. La ligne d'en-tĂȘtes de colonnes reste visible pendant le dĂ©filement vertical.

CĂŽtĂ© API, GET /api/file/{vault}/xlsx/sheet sert une feuille par fenĂȘtres de lignes, y compris au-delĂ  du plafond d'affichage — les coordonnĂ©es A1 renvoyĂ©es sont celles de la feuille rĂ©elle :

curl "http://localhost:2020/api/file/Recettes/xlsx/sheet?path=budget.xlsx&sheet=Budget&offset=500&limit=200"
  • offset : premiĂšre ligne renvoyĂ©e (0-based) ; limit : nombre de lignes (1 Ă  1 000 par requĂȘte).
  • La rĂ©ponse porte total_rows, truncated et has_more pour paginer.
  • Erreurs : 404 si la feuille n'existe pas, 415 si le fichier n'est ni un .xlsx ni un .xlsm.

Fonctions avancées

Barre de formule, zone Nom et navigation clavier — au-dessus du tableau, la zone Nom affiche l'adresse de la cellule active (B12) ou de la plage sĂ©lectionnĂ©e (A1:B3) et elle est Ă©ditable (« Atteindre ») : saisissez une rĂ©fĂ©rence puis EntrĂ©e pour y aller (B12, A1:B3, $A$1, ou Feuille2!A1 pour changer d'onglet) ; une rĂ©fĂ©rence inconnue est refusĂ©e avec un message et l'adresse prĂ©cĂ©dente est restaurĂ©e. La barre de formule reflĂšte la cellule active et propose les noms de fonctions courants pendant la saisie.

Tab/Maj+Tab et les flĂšches circulent entre les cellules, Maj+flĂšches Ă©tend la sĂ©lection, EntrĂ©e valide, Maj+EntrĂ©e insĂšre un saut de ligne dans la cellule, F2 ouvre la cellule en Ă©dition, Suppr vide la sĂ©lection, Échap restaure la valeur d'origine ; Origine/Fin vont au bord de la ligne, Ctrl+Origine/Ctrl+Fin aux coins de la feuille affichĂ©e, PgPrĂ©c/PgSuiv font dĂ©filer d'un Ă©cran, Ctrl+flĂšches saute au bout de la plage de donnĂ©es, Ctrl+A sĂ©lectionne toute la feuille affichĂ©e et Ctrl+S enregistre. Tant que la cellule n'est pas en cours d'Ă©dition, Suppr efface la sĂ©lection plutĂŽt qu'un caractĂšre.

Presse-papiers de plage — copier, couper et coller un bloc de cellules (Ctrl+C, Ctrl+X, Ctrl+V, ou les entrĂ©es correspondantes du menu contextuel) : coller un bloc copiĂ© ici ou depuis Excel remplit la plage Ă  partir de la cellule active et la laisse sĂ©lectionnĂ©e. Le collage est du texte (formules et valeurs recopiĂ©es telles quelles) et reste annulable ; « couper » efface la source aprĂšs le collage (un collage sur place ne l'efface pas). Un bloc plus large que la grille affichĂ©e est tronquĂ©, avec un message.

Annuler / rĂ©tablir — Ctrl+Z (ou le bouton Annuler du ruban) revient sur les derniĂšres Ă©ditions de cellules, Ctrl+Maj+Z / Ctrl+Y les rĂ©tablit.

SĂ©lection et menu contextuel — cliquer une cellule l'active, glisser ou Maj+clic sĂ©lectionne une plage (affichĂ©e dans la zone Nom, ex. A1:B3), et cliquer un en-tĂȘte sĂ©lectionne toute la ligne ou colonne. Un clic droit (ou un appui long sur mobile) ouvre un menu : copier, couper, coller, insĂ©rer/supprimer une ligne ou une colonne, trier A→Z / Z→A, effacer le contenu. Chaque entrĂ©e porte une icĂŽne ; le menu se referme dĂšs qu'il perd le focus (clic ailleurs, Échap) et se parcourt au clavier (↑/↓).

Tri, filtre, recherche, export — le tri (ascendant / descendant) s'applique depuis le menu contextuel et n'affecte que l'affichage ; les lignes se filtrent et la recherche (Ctrl+F du panneau) parcourt toutes les feuilles : le compteur indique le nombre de feuilles concernĂ©es et passer sur une correspondance active l'onglet qui la contient.

La sortie propose quatre formats, toujours sur le contenu affiché (et jamais sur les valeurs calculées en cache) :

  • CSV (bouton CSV) — exporte la sĂ©lection quand une plage de plusieurs cellules est active (le nom du fichier reprend la plage, ex. Fruits-A1B2.csv), sinon la feuille entiĂšre ;
  • Markdown et HTML (menu Exporter) — tableau markdown ou document HTML autonome, mĂȘmes rĂšgles de sĂ©lection ;
  • Imprimer (menu Exporter) — imprime la feuille ou la sĂ©lection seule, sans le ruban ni les panneaux de l'application.

Rien de tout cela ne modifie le classeur.

Structure — le menu Structure de la barre d'outils ajoute, renomme, duplique ou supprime une feuille, et insĂšre/supprime des lignes ou colonnes autour de la cellule active (PUT 
/xlsx/structure, backup automatique et confirmation, comme pour l'Ă©dition des cellules).

Mise en forme — le bouton Mise en forme ouvre un menu qui agit sur la sĂ©lection courante (une cellule ou une plage) :

  • caractĂšre — gras, italique, soulignĂ©, effacer la mise en forme ;
  • alignement — gauche, centrĂ©, droite ;
  • couleurs — couleur de police et couleur de fond (sĂ©lecteur natif, aucune palette imposĂ©e) ;
  • format de nombre — gĂ©nĂ©ral, nombre, pourcentage, devise, date, texte ;
  • structure — fusionner / dĂ©fusionner les cellules, figer / libĂ©rer les volets, largeur de colonne, hauteur de ligne (fusionner exige une vraie plage).

L'Ă©criture passe par PUT 
/xlsx/style, avec les mĂȘmes garanties que l'Ă©dition des cellules : backup automatique, Ă©criture atomique, confirmation si l'opĂ©ration dĂ©truirait des Ă©lĂ©ments non prĂ©servables (graphiques, valeurs calculĂ©es en cache
) et dĂ©tection d'un Ă©crivain externe (If-Match → message « RĂ©essayer »). Un .csv ne portant pas de mise en forme, le bouton n'y est pas proposĂ© (il est Ă©galement absent d'une grille en lecture seule). La lecture restitue par ailleurs les couleurs, polices, cellules fusionnĂ©es et volets figĂ©s du fichier ; l'ancrage de la zone figĂ©e est conservĂ© au dĂ©filement. Les commentaires, liens hypertexte, validation de donnĂ©es, mise en forme conditionnelle et bordures restent hors pĂ©rimĂštre.

Formats de fichiers — .xlsm s'Ă©dite comme un .xlsx et ses macros sont prĂ©servĂ©es Ă  l'enregistrement (y compris le chargement des lignes au-delĂ  du plafond) ; .xls et .ods s'affichent en lecture seule ; un .csv s'ouvre dans la mĂȘme grille et se réécrit conformĂ©ment Ă  la RFC 4180 (les guillemets et sĂ©parateurs sont Ă©chappĂ©s). Le sĂ©parateur du CSV est dĂ©tectĂ© (;, , ou tabulation) Ă  la lecture et rĂ©utilisĂ© Ă  l'enregistrement : un fichier exportĂ© par Excel en français (point-virgule) s'affiche donc en colonnes distinctes et le reste aprĂšs Ă©dition.

Tableau de bord — le bouton Tableau de bord ouvre un inspecteur latĂ©ral droit (la grille reste visible Ă  cĂŽtĂ©) qui liste les plages nommĂ©es du classeur (nom, rĂ©fĂ©rence, portĂ©e), signale les feuilles contenant des graphiques ou des tableaux croisĂ©s, et donne pour chaque feuille un rĂ©sumĂ© (cellules, lignes, colonnes, formules, valeurs numĂ©riques) avec quelques chiffres clĂ©s. Cliquer une plage nommĂ©e sĂ©lectionne sa premiĂšre cellule dans la grille, et le panneau est redimensionnable. L'en-tĂȘte de l'inspecteur offre aussi un accĂšs direct Ă  l'assistant IA, qui peut ensuite exploiter ces plages. Ses outils couvrent dĂ©sormais les trois formats Ă©ditĂ©s (.xlsx, .xlsm, .csv) : list_xlsx_sheets et xlsx_to_markdown pour lire, search_workbook (recherche dans toutes les feuilles, comptĂ©e par feuille), analyze_range (agrĂ©gats — nombre, somme, moyenne, min, max — d'une plage A1), update_xlsx_cells et append_xlsx_rows pour modifier, et edit_xlsx_structure pour la structure (ajouter/renommer/dupliquer/supprimer une feuille, insĂ©rer/supprimer des lignes ou des colonnes).

Limites

  • L'affichage intĂ©grĂ© dĂ©marre Ă  500 lignes × 40 colonnes par feuille ; sous une feuille plus grande, le bouton « Charger la suite » (ou le dĂ©filement vers le bas du tableau) ajoute les lignes suivantes par fenĂȘtres de 500 — elles deviennent aussitĂŽt Ă©ditables et sauvegardables. Le chargement paresseux est vertical uniquement : l'axe des colonnes reste tronquĂ© Ă  40 (les colonnes au-delĂ  ne sont ni affichĂ©es ni exportĂ©es).
  • Un format de nombre personnalisĂ© (devise, pourcentage
) est signalĂ© par une police Ă  chasse fixe Ă  la lecture ; depuis le bouton Mise en forme, appliquer un format ne change que le format de la cellule, pas la valeur affichĂ©e (aucun recalcul n'est fait, cf. les limites d'export ci-dessous).
  • .xls et .ods restent en lecture seule (convertir vers .xlsx pour Ă©diter) ; les macros d'un .xlsm sont conservĂ©es mais ne s'exĂ©cutent pas dans ObsiGate.
  • La poignĂ©e de recopie (fill), la multi-sĂ©lection Ctrl+clic et le glisser-dĂ©poser de lignes/colonnes ne sont pas proposĂ©s ; un collage de plusieurs cellules s'annule cellule par cellule (Ctrl+Z rĂ©pĂ©tĂ©).
  • Les exports (CSV, Markdown, HTML, impression) reflĂštent ce qui est affichĂ© : une feuille tronquĂ©e s'exporte tronquĂ©e, et les formules sortent telles qu'enregistrĂ©es (aucune valeur calculĂ©e n'est recalculĂ©e). Un classeur reste la source de vĂ©ritĂ© : utilisez Charger la suite pour exporter au-delĂ  du plafond.
  • Aucun moteur de formule : ObsiGate lit et Ă©crit les formules telles qu'Excel les a enregistrĂ©es, sans jamais les recalculer. Une saisie commençant par = ou @ est stockĂ©e comme texte (garde anti-DDE) tant que le bouton f(x) n'est pas activĂ© ; l'enregistrement vous le signale par un message. Excel reste la rĂ©fĂ©rence pour les valeurs calculĂ©es.
  • L'annulation couvre l'Ă©dition, l'effacement, le tri/filtre et les actions de structure ; en revanche une suppression (feuille, ligne, colonne) n'est pas annulable, faute d'inverse.

7. Diagrammes Excalidraw

Les fichiers .excalidraw et .excalidraw.md (dont le format compressé du plugin Obsidian Excalidraw) s'ouvrent dans un éditeur visuel Excalidraw complet, dans une iframe sandboxée.

  • Dessin et Ă©dition sans quitter ObsiGate.
  • Sauvegarde automatique (dĂ©bounce 2 s) ou Ctrl + S.
  • ThĂšme clair/sombre suivi automatiquement.
  • Texte indexĂ© : le texte des Ă©lĂ©ments du diagramme est extrait Ă  l'indexation et donc recherchable (ext:excalidraw).

Fiche technique : features/excalidraw.md.


8. Autres contenus riches

Mermaid

Les blocs de code ```mermaid sont rendus en diagrammes interactifs (live preview, thÚmes, zoom, plein écran, pré-processeur compatible syntaxe Obsidian).

Images Obsidian

Toutes les syntaxes d'images sont supportées avec résolution intelligente en 7 stratégies :

  1. chemin absolu ;
  2. dossier d'attachements configuré (VAULT_N_ATTACHMENTS_PATH) ;
  3. index de démarrage (correspondance unique) ;
  4. mĂȘme rĂ©pertoire que la note ;
  5. racine de la vault ;
  6. index de démarrage (correspondance la plus proche) ;
  7. repli : [image not found: fichier.ext].

Rescan manuel des attachements :

curl -X POST "http://localhost:2020/api/attachments/rescan/Recettes"
  • Graphe : vue force-directed (Barnes-Hut), filtres (tag, type), profondeur, mode focus, export PNG, aperçu au survol (Ctrl + clic).
  • Backlinks : GET /api/file/{vault}/backlinks?path=
 liste les notes pointant vers un document.

9. Dépannage

SymptĂŽme Piste
Un PDF ne s'affiche pas Vérifier la taille (OBSIGATE_PDF_MAX_SIZE_MB, défaut 50 Mo)
Le texte d'un PDF scanné n'est pas trouvé Pas d'OCR : normal
Une image reste introuvable Configurer VAULT_N_ATTACHMENTS_PATH, puis rescan
La recherche sémantique ne s'active pas Vérifier le toggle ~ et OBSIGATE_EMBEDDING_*
Résultats obsolÚtes Forcer une réindexation : GET /api/index/reload