PDF studio
In the PDF studio, admins see before the export which offers of an own PDF template run over their page, and adjust single offers.
Location: season > tab Export > Check in the PDF studio. Visible to: admins.
| Rule | Content |
|---|---|
| Entry | In the Export tab, Check in the PDF studio stands next to Create export when an own PDF template is selected under Format and the selection contains at least one offer (Export). Under Recently used, an entry with a PDF template has the link Open in the studio. |
| Selection | The studio takes over the seasons, organizers and Published offers only of the export page. |
| Template | Own PDF templates only (Export templates). The template writes the offers in a loop over items, one section per offer. |
| Arrangement | If the template sets a page break before or after an offer, every offer has a page of its own. Otherwise the offers follow one another, through the columns of the page if there are several. |
| Measuring | mPDF measures every offer at the width of a column and counts the pages the way it breaks them in the export. |
Layout
The page has three columns. On the left are the pages of the export, in the middle the page chosen, on the right the offer chosen.
The studio for the template “Programme booklet” with the canoe trip on page 3.
| Element | Content |
|---|---|
| Header | Name of the template, page format and orientation (“A5 portrait”), with several columns “· {count} columns”, and the number of pages. Beside it is the summary: “{count} offers run over” or “all offers fit”, plus “{count} proposals to check” and “{count} adjusted”, where there are any. |
| Fix overflows with AI | Has the AI adjust every offer that runs over the page, is split or stands before a gap, one job per offer. The number in brackets gives the offers. If there are none, the button is disabled and reads No overflows. While the AI works, it reads “The AI is working … {count} to go”. Only with the app AI review. |
| Create PDF | Creates the PDF in the background like any other export. The file arrives under the bell (Export). While proposals are open, the button creates nothing and reports: “{count} proposals are still open – accept or discard, then create the PDF.” |
| All {count}, Hints {count} | Filter of the page list: all pages or only those with a mark. If there are none, it reads “No page with hints.” |
| Page list | A preview per page with its number, the numbers of the offers that begin on it, and the first mark of the page (Marks). The page chosen has an outline. A symbol over the preview shows that the AI is working on an offer of the page. |
| Page preview | The page chosen, as mPDF sets it. Over every offer lies a field that selects it. Offers that run over the page or are split have a red edge at the bottom. |
| Previous page, Next page, “Page {number}” | Switch the page. Beside them stands the title of the offer chosen or “Click an offer to edit it”. |
| Show text area | Draws the text area of the page and its columns. If a proposal is open, the choice Template and Proposal stands here instead: the page without and with the proposal. |
| Measurement | Shows how the offer chosen fits the page (Measurement). |
| Tabs AI, HTML | Switch between the AI (AI) and the offer's HTML (HTML). |
| Form of the AI | Instruction, suggestions, lock and Adjust with AI (AI). |
Above the offer chosen stand its number (“Nr. {number}”), its page (“Page {number}”, with several columns followed by “· column {number}”) and its origin (Origin).
Marks
The page list shows per page the first mark that applies, in the order of this table.
| Mark | Meaning |
|---|---|
| runs over | An offer reaches over the bottom edge. mPDF sets the rest on an extra page, and all following pages move on. |
| split | An offer is taller than a column. mPDF sets the rest in the next column. |
| gap | A block that is not split moves on to the next column and leaves space free before it. |
| proposal | For an offer of the page there is a proposal from the AI that is neither accepted nor discarded. |
| stale | The adjustment of an offer of the page no longer holds (Origin). |
Measurement
The measurement stands above the form of the offer chosen.
| Message | Meaning |
|---|---|
| “Runs over by {number} mm” | The offer is taller than the page has room for. Below: “mPDF sets the rest on an extra page {number} – all following pages move on.” |
| “Gets split” | The offer is taller than a column. Below: “At {number} mm taller than a column ({number} mm): mPDF sets the rest in the next column.” |
| “Fits the page” | The offer fits. Below, only for the last offer in a column: “{number} mm free to the bottom margin.” |
| “Fits the column” | The offer fits, and another offer follows in the same column without a gap. Below it there is no statement about free space. |
| “{number} mm stay free before it” | A gap arises before the offer. Below: “{number} mm shorter and it moves up into the gap.” or “That would take too much text – better not to shorten here.” |
While mPDF sets the offers in the background for the first time, the page shows “Measuring …” and asks every 1.5 seconds whether the measuring is done. An offer whose HTML stays the same is not measured again.
AI
The tab AI belongs to the app AI review (AI review). Without the app it reads “AI only with the app “Mistral AI”” with the link To the app store. The HTML can then be changed by hand.
| Element | Content |
|---|---|
| What should change?, What should change about this offer? | Instruction for the AI. The second label stands when the offers follow one another. Without an instruction it is “Shorten until the page fits”. Placeholder: “e.g. shorten the description until the page fits”. |
| Suggestions | Shorten until the page fits, Smaller picture, More compact dates, Font not below 9 pt. With a gap, Shorten by {number} mm stands first. A suggestion enters its text as the instruction. |
| Do not change dates, age, fee and meeting point | Lock. Default: on. If a proposal changes a date, a time, an age, a fee or the meeting point while the lock is on, fepli discards it. |
| Adjust with AI | Starts a job for the offer chosen. While it runs, it reads “The AI is reworking no. {number} …” with the note “This runs in the background – you can look at other pages meanwhile.” |
The AI gets the page as it is set as a picture, the offer's HTML, the template's CSS and the measurement. It changes only this offer. The picture is made only if the server has Imagick and Ghostscript; otherwise the AI gets the HTML without a picture. Which data goes to Mistral AI is described under AI review.
Proposal
A finished proposal appears in place of the form. fepli measures it again.
| Element | Content |
|---|---|
| Proposal | One sentence from the AI on what it changed. If it is missing, it reads “HTML adjusted.” |
| Effect | “Fits now · {number} mm free”, “Does not fit yet – {number} mm too much”, “Gap closed”, “No longer split”, “{count} pages fewer”, “{count} pages more”, “{number} mm shorter” |
| Changes to the HTML | The changed lines of the HTML, beside them “+{count} −{count}” |
| Accept | The proposal holds (Origin). |
| Again | Discards the proposal and asks the same instruction once more. |
| Discard | Discards the proposal. |
Before Accept, nothing holds: fepli creates the PDF with the template's HTML.
| Message | Meaning |
|---|---|
| “No AI connected – that needs the app “Mistral AI”.” | The app is not connected. |
| “The AI did not answer. Please try again in a moment.” | The request failed. |
| “The AI returned no HTML. Please try again.” | The answer held no HTML. |
| “The proposal changed locked details ({details}) and was discarded.” | The lock took effect. |
| “The AI took too long. Please try again.” | After three minutes without an answer the studio stops waiting. |
From the HTML of a proposal, fepli removes stylesheets, scripts, page breaks and event attributes. For addresses of images and links the same rules apply as for every template (Rules).
HTML
The tab HTML shows the section that the template writes for the offer chosen. Above it reads “The HTML the template writes for this offer. Changed here, it holds in every PDF of this template until the offer changes.” If the offers follow one another, the note begins with “The section the template writes for this offer.”
| Element | Content |
|---|---|
| HTML of this offer | Text field with the HTML. A change holds shortly after the input, without confirmation. If the text again equals that of the template, the adjustment lapses. Here too, fepli removes stylesheets, scripts, page breaks and event attributes. |
| Reset to the template | Removes the offer's adjustment. Stands only for adjusted offers. |
Origin
A change that was accepted, by the AI or by hand, belongs to the template and the offer. It does not change the offer itself.
| Origin | Meaning |
|---|---|
| as the template writes it | The offer is not adjusted. |
| adjusted | The adjustment holds in every PDF of this template, also with Create export (Export). |
| adjustment stale | The offer or the template changed since the offer was adjusted. The PDF takes what the template writes again. The studio reports: “The offer or the template changed since it was adjusted. The PDF takes what the template writes again.” |
Below the form, the history lists the last 10 changes. Its heading reads “On this page” or, if the offers follow one another, “On this offer”.
| Entry | Content |
|---|---|
| “{instruction}” – {sentence from the AI} | A change by the AI, with name and time |
| Changed by hand | A change in the tab HTML, with name and time |
Messages of the page
| Message | Meaning |
|---|---|
| “There are no offers for this selection.” | The selection of the export page contains no offer. |
| “The template cannot be set: {message}” | The template has an error (Rules). |
| “This template does not write each offer once in a loop over “items” – the studio cannot find the offers’ pages.” | The template does not write exactly one section for every offer. |
The page preview is HTML in the browser, arranged by the measurements of mPDF. The text in it can differ slightly from the PDF.