Woordafbreking midden in lange Nederlandse woorden in PDF-tabelcellen #1727

Closed
opened 2026-08-22 19:20:50 +00:00 by brenno · 0 comments
Owner

Wat is het probleem?

In de geëxporteerde PDF worden lange Nederlandse woorden in tabelcellen midden in het woord afgebroken wanneer de kolom te smal is. Dit treedt op in tabellen met veel kolommen waar de kolombreedte-strategie een of meer kolommen op IntrinsicColumnWidth laat staan terwijl de inhoud woorden bevat die breder zijn dan de beschikbare kolombreedte.

Hoe te reproduceren

  1. Maak een document met een GFM-tabel met 5 kolommen en lange Nederlandse woorden in smalle kolommen, bijv.:
| Nr. | Gewenst resultaat | Eigenaar | Prioriteit | Sluitbewijs |
|---|---|---|---|---|
| R-05 | Rechtenwijzigingen volgen een beheerst proces met vier-ogencontrole. | RWM IT en EQUA | Hoog | Vastgestelde procedure en steekproef van uitgevoerde wijzigingen |
| R-06 | Gevoelige gegevenslocaties en gegevenseigenaren zijn bekend. | RWM proceseigenaren | Hoog | Actuele gegevens- en eigenaarskaart |
  1. Exporteer naar PDF.
  2. Bekijk de tabel.

Verwacht gedrag

Lange woorden worden afgebroken op woordgrenzen waar mogelijk. Wanneer een enkel woord breder is dan de kolom, wordt de kolom verbreed (tot de bladspiegel) of wordt het woord op een leesbare plek afgebroken (bijv. op een koppelteken), niet willekeurig midden in het woord.

Werkelijk gedrag

Woorden worden midden in het woord afgebroken, soms na een paar letters:

  • "Rechtenwijzigi" + "ngen"
  • "proceseigenar" + "en"
  • "gegevenseigena" + "ren"
  • "incidentleidin" + "g en EQUA"

Dit maakt de tekst moeilijk leesbaar en ziet er onprofessionueel uit in een rapport.

Root cause

lib/services/pdf/document_pdf_widgets.dart, functie pdfTableColumnWidths (regels 857-932):

  • De strategie maakt de breedste kolommen één voor één flex (van breed naar smal) tot de overgebleven IntrinsicColumnWidth-kolommen samen op het blad passen.
  • IntrinsicColumnWidth meet de natuurlijke breedte van de kolominhoud, maar package:pdf breekt woorden midden in als de kolom ondanks de intrinsic-breedte te smal wordt gedrukt (bijv. door de tabelbreedte-limiet of door interactie met andere kolommen).
  • Het flex-gewicht is gebaseerd op het langste woord, maar IntrinsicColumnWidth-kolommen krijgen geen flex-gewicht en kunnen alsnog te smal worden.

Onzekerheid

Deze bevinding is afgeleid uit een pdftotext-extractie van de PDF. Het is mogelijk dat de extractie woordafbrekingen introduceert die in de visuele PDF niet (zo erg) aanwezig zijn. Visuele verificatie van de PDF (bijv. pagina's 22-24 van het Incidentrapport RWM) is nodig om de ernst te bevestigen.

Voorgestelde oplossing

  1. Visueel verifieren of de woordafbreking ook in de gerenderde PDF zichtbaar is (niet alleen in pdftotext-extractie).
  2. Indien bevestigd: voor IntrinsicColumnWidth-kolommen met lange woorden, ofwel:
    • de kolom alsnog flex maken met een gewicht op het langste woord, of
    • package:pdf's woordafbrekingsgedrag overschrijven (bijv. door lange woorden op koppeltekens of syllabegrenzen af te breken), of
    • de kolombreedte-limiet verhogen voor kolommen met woorden die breder zijn dan de huidige schatting.

Voorbeeld

In de bijgevoegde PDF (Incidentrapport RWM) staat het aanbevelingenregister op pagina's 22-24. De kolommen "Gewenst resultaat", "Eigenaar" en "Sluitbewijs" bevatten lange Nederlandse woorden die midden in het woord afbreken.

Labels

bug, needs-info

## Wat is het probleem? In de geëxporteerde PDF worden lange Nederlandse woorden in tabelcellen midden in het woord afgebroken wanneer de kolom te smal is. Dit treedt op in tabellen met veel kolommen waar de kolombreedte-strategie een of meer kolommen op `IntrinsicColumnWidth` laat staan terwijl de inhoud woorden bevat die breder zijn dan de beschikbare kolombreedte. ## Hoe te reproduceren 1. Maak een document met een GFM-tabel met 5 kolommen en lange Nederlandse woorden in smalle kolommen, bijv.: ```markdown | Nr. | Gewenst resultaat | Eigenaar | Prioriteit | Sluitbewijs | |---|---|---|---|---| | R-05 | Rechtenwijzigingen volgen een beheerst proces met vier-ogencontrole. | RWM IT en EQUA | Hoog | Vastgestelde procedure en steekproef van uitgevoerde wijzigingen | | R-06 | Gevoelige gegevenslocaties en gegevenseigenaren zijn bekend. | RWM proceseigenaren | Hoog | Actuele gegevens- en eigenaarskaart | ``` 2. Exporteer naar PDF. 3. Bekijk de tabel. ## Verwacht gedrag Lange woorden worden afgebroken op woordgrenzen waar mogelijk. Wanneer een enkel woord breder is dan de kolom, wordt de kolom verbreed (tot de bladspiegel) of wordt het woord op een leesbare plek afgebroken (bijv. op een koppelteken), niet willekeurig midden in het woord. ## Werkelijk gedrag Woorden worden midden in het woord afgebroken, soms na een paar letters: - "Rechtenwijzigi" + "ngen" - "proceseigenar" + "en" - "gegevenseigena" + "ren" - "incidentleidin" + "g en EQUA" Dit maakt de tekst moeilijk leesbaar en ziet er onprofessionueel uit in een rapport. ## Root cause `lib/services/pdf/document_pdf_widgets.dart`, functie `pdfTableColumnWidths` (regels 857-932): - De strategie maakt de breedste kolommen één voor één `flex` (van breed naar smal) tot de overgebleven `IntrinsicColumnWidth`-kolommen samen op het blad passen. - `IntrinsicColumnWidth` meet de natuurlijke breedte van de kolominhoud, maar `package:pdf` breekt woorden midden in als de kolom ondanks de intrinsic-breedte te smal wordt gedrukt (bijv. door de tabelbreedte-limiet of door interactie met andere kolommen). - Het flex-gewicht is gebaseerd op het langste woord, maar `IntrinsicColumnWidth`-kolommen krijgen geen flex-gewicht en kunnen alsnog te smal worden. ## Onzekerheid Deze bevinding is afgeleid uit een `pdftotext`-extractie van de PDF. Het is mogelijk dat de extractie woordafbrekingen introduceert die in de visuele PDF niet (zo erg) aanwezig zijn. Visuele verificatie van de PDF (bijv. pagina's 22-24 van het Incidentrapport RWM) is nodig om de ernst te bevestigen. ## Voorgestelde oplossing 1. **Visueel verifieren** of de woordafbreking ook in de gerenderde PDF zichtbaar is (niet alleen in pdftotext-extractie). 2. Indien bevestigd: voor `IntrinsicColumnWidth`-kolommen met lange woorden, ofwel: - de kolom alsnog flex maken met een gewicht op het langste woord, of - `package:pdf`'s woordafbrekingsgedrag overschrijven (bijv. door lange woorden op koppeltekens of syllabegrenzen af te breken), of - de kolombreedte-limiet verhogen voor kolommen met woorden die breder zijn dan de huidige schatting. ## Voorbeeld In de bijgevoegde PDF (Incidentrapport RWM) staat het aanbevelingenregister op pagina's 22-24. De kolommen "Gewenst resultaat", "Eigenaar" en "Sluitbewijs" bevatten lange Nederlandse woorden die midden in het woord afbreken. ## Labels bug, needs-info
brenno 2026-08-22 19:53:40 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#1727
No description provided.