Skip to content
Skip to main content
< All Topics
Print

HTML Reports

The HTML Report System lets you create professional reports, labels, and specification sheets from your recipes and ingredients. Using customizable templates with a simple tag syntax, you can generate pick lists, nutrition labels, ingredient declarations, and more.

Whether you need to print product labels for commercial ice cream production or create a detailed specification sheet for a recipe, the report system gives you full control over the output format.


Where to Access Reports

Reports can be generated from several places in the application, depending on what data you want to include:

LocationReport TypeDescription
Recipes pageRecipeSelect a single recipe to generate a report for that recipe
Recipes pageRecipe (multiple)Select multiple recipes to generate a combined report
Recipe EditorRecipeGenerate a report for the recipe you’re currently editing
Ingredients pageIngredientSelect a single ingredient for a detailed ingredient report
Ingredients pageIngredient ComparisonSelect multiple ingredients to generate a comparison table
Recipe Sets (Production)Recipe SetGenerate pick lists, combined labels, or recipe cards for a production batch

Additional report locations may be added in future updates, such as reports for Production batches.


Generate Report Dialog

When you click to generate a report, the Generate Report dialog appears.

Template Selection Choose from available templates using the dropdown. Default templates provided by the system are marked with a ⭐ star icon. Your custom templates appear without a star.

Format Settings Click “Format Settings” to expand additional options:

  • Decimal Separator: Choose between period (1.23) or comma (1,23) for numeric values. This is useful for different regional formats.

Actions

  • Generate: Creates the report using the selected template and opens the result
  • Edit Templates: Opens the Template Editor to create or modify templates
  • Close: Closes the dialog without generating

The system remembers your last selected template for each report type.


Report Output

After generating a report, the result dialog displays your rendered report with several output options:

  • Copy HTML: Copies the formatted HTML to your clipboard. Paste into Word, email clients, or other applications that support rich formatting.
  • Copy Text: Copies a plain text version with HTML tags removed.
  • Print: Opens your browser’s print dialog. The report opens in a new window optimized for printing.
  • Close: Returns to the previous screen.

Tip: When pasting HTML into Word or Google Docs, use “Paste” (not “Paste as Plain Text”) to preserve formatting.


Template Editor

The Template Editor is where you create and customize your report templates. It provides a full HTML editor with tools to help you build templates without memorizing the tag syntax.

Editor Layout

Top Toolbar

  • Template dropdown: Select which template to edit
  • Template Name: Edit the name of your template (disabled for default templates)
  • New: Create a new blank template
  • Save: Save changes to the current template
  • Copy: Create a copy of the current template (useful for customizing defaults)
  • Delete: Delete the current template (cannot delete default templates)
  • AI Generate: Use AI to generate a template based on your description
  • Copy AI Prompt: Copy a prompt you can use with external AI tools
  • Close: Close the editor and return to the previous screen

Left Panel – HTML Editor A full-featured code editor (Monaco Editor) for writing your HTML template. Features include:

  • Syntax highlighting for HTML
  • Line numbers
  • Undo/Redo support
  • Word wrap

Right Panel – DataSet Browser Browse all available data fields you can use in your template:

  • Table dropdown: Switch between different data tables (Recipe, RecipeData, Ingredients, etc.)
  • Filter field: Search for specific fields by name
  • Field list: Shows field names and example values from your current data
  • Double-click any field to insert its tag at your cursor position in the editor

The panel can be collapsed using the arrow button to give more space to the editor.

Bottom Toolbar

  • Formatting buttons: Bold, Italic, Underline – wraps selected text with HTML tags
  • Insert buttons: Table structure, Table row, Line break
  • Insert Repeat Block: Appears when viewing a multi-row table – inserts a REPEAT block template
  • Preview: Opens a preview of your template with real data

Template Syntax Reference

Templates use a mustache-style tag syntax with double curly braces. Tags are replaced with actual data when the report is generated.

Basic Tags

Insert a value from the data:

{{TableName.FieldName}}

Example:

<h2>{{Recipe.Name}}</h2>
<p>Total weight: {{Recipe.FinalWeight}} g</p>

Format Specifier for Decimals

Control the number of decimal places for numeric values:

{{TableName.FieldName:N}}

Where N is the number of decimal places (0, 1, 2, 3, etc.)

Example:

<p>PAC: {{RecipeData.PAC:1}}</p>    <!-- Shows: 245.7 -->
<p>PAC: {{RecipeData.PAC:0}}</p>    <!-- Shows: 246 -->

Pre-formatted Label Fields

Fields starting with lbl (like lblEU_Fat, lblUS_Calories) are pre-formatted with proper decimal places and units according to EU or US labeling regulations.

Important: Do NOT add units after lbl fields – they already include them!

<!-- Correct -->
<p>Fat: {{RecipeData.lblEU_Fat}}</p>           <!-- Shows: 12.5 g -->

<!-- Wrong - will show double units -->
<p>Fat: {{RecipeData.lblEU_Fat}} g</p>         <!-- Shows: 12.5 g g -->

Repeat Blocks

Loop over multi-row tables like Ingredients or RecipeSet:

{{#REPEAT:TableName}}
  ... content repeated for each row ...
{{/REPEAT:TableName}}

Example – Ingredient list:

<table>
  <tr>
    <th>Ingredient</th>
    <th>Weight</th>
  </tr>
{{#REPEAT:Ingredients}}
  <tr>
    <td>{{Ingredients.Name}}</td>
    <td>{{Ingredients.Weight}} g</td>
  </tr>
{{/REPEAT:Ingredients}}
</table>

Conditional Blocks

Show content only if a field has a value (not empty):

{{#IF:TableName.FieldName}}
  ... content shown only if field has a value ...
{{/IF:TableName.FieldName}}

Example – Show allergens only if present:

{{#IF:Recipe.Contains}}
<p><strong>Contains:</strong> {{Recipe.Contains}}</p>
{{/IF:Recipe.Contains}}

{{#IF:Recipe.MayContain}}
<p><strong>May contain traces of:</strong> {{Recipe.MayContain}}</p>
{{/IF:Recipe.MayContain}}

Combining Tags

You can combine different tag types in a single template:

<h1>{{Recipe.Name}}</h1>
<p>Net weight: {{Recipe.FinalWeight}} g</p>

<h3>Ingredients</h3>
{{#REPEAT:Ingredients}}
<p>{{Ingredients.Name}}: {{Ingredients.Weight:0}} g ({{Ingredients.WeightPercent:1}}%)</p>
{{/REPEAT:Ingredients}}

{{#IF:Recipe.Contains}}
<p><strong>Allergens:</strong> {{Recipe.Contains}}</p>
{{/IF:Recipe.Contains}}

<h3>Nutrition per 100g</h3>
<p>Energy: {{RecipeData.lblEU_EnergyKcal}}</p>
<p>Fat: {{RecipeData.lblEU_Fat}}</p>

Available Data Tables

The data available depends on the report type. Use the DataSet Browser in the Template Editor to explore all available fields and see example values.

Common Tables and Fields

Recipe (single row)

FieldDescription
NameRecipe name
InfoRecipe description
MixWeightWeight before processing (grams)
FinalWeightWeight after evaporation (grams)
ContainsStandard allergens present
MayContainAllergens that may be present as traces
IngredientsFormattedIngredient list with allergens highlighted in bold
TagsRecipe tags

RecipeData (single row – calculated values)

FieldDescription
lblEU_EnergyKcalEnergy in kcal (EU format with unit)
lblEU_FatFat per 100g (EU format with unit)
lblEU_CarbohydratesCarbohydrates per 100g (EU format with unit)
lblEU_ProteinProtein per 100g (EU format with unit)
lblEU_SaltSalt per 100g (EU format with unit)
PACFreezing point depression (numeric)
PODRelative sweetness (numeric)
MSNFMilk solids non-fat (numeric)

US format fields are also available (lblUS_Calories, lblUS_Fat, etc.)

Ingredients (multi-row – use with REPEAT)

FieldDescription
NameIngredient name
CategoryIngredient category
WeightWeight in grams
WeightPercentPercentage of total recipe
CostCost for this amount
CostKgCost per kilogram

RecipeSet (multi-row – use with REPEAT)

FieldDescription
IndexRow number (1, 2, 3…)
NameRecipe name
QuantityNumber of units
UnitWeightWeight per unit
TotalWeightTotal weight (Quantity × UnitWeight)
IngredientsFormattedFormatted ingredient list for this recipe
ContainsAllergens for this recipe

Tip: The DataSet Browser shows ALL available fields with their current values. Use the filter to quickly find fields by name.


Default Templates

The system includes several ready-to-use templates. You cannot edit default templates directly, but you can copy them to create your own customized version.

Recipe Set Templates

  • Pick List: A simple table listing recipes with quantities and weights – perfect for production planning
  • Recipe Cards: Individual cards for each recipe showing ingredients and allergens
  • Compact Label: A combined label with nutrition facts and allergen information

Recipe Templates

  • Recipe Label: Standard product label format
  • Professional Specification Sheet: Comprehensive spec sheet with nutrition panels, ice cream science metrics, and composition data

Ingredient Templates

  • Ingredient Data Sheet: Detailed report for a single ingredient
  • Ingredient Comparison: Side-by-side comparison table for multiple ingredients
  • Ingredient List: Simple list format for multiple ingredients

Creating Custom Templates

Starting from a Default Template

The easiest way to create a custom template is to start from an existing one:

  1. Select a default template from the dropdown
  2. Click Copy – this creates an editable copy
  3. Rename the template to something descriptive
  4. Modify the HTML as needed
  5. Click Preview to test your changes
  6. Click Save when satisfied

Building from Scratch

  1. Click New to create a blank template
  2. Give it a descriptive name
  3. Write your HTML using the tag syntax
  4. Use the DataSet Browser to find available fields – double-click to insert
  5. For multi-row tables (Ingredients, RecipeSet), click Insert Repeat Block to add the loop structure
  6. Use Preview frequently to check your progress
  7. Save your work

Template Design Tips

For print-ready templates:

  • Use inline CSS styles (not external stylesheets)
  • Add page-break-inside: avoid; to keep elements together
  • Use page-break-before: always; to force new pages
  • Use pt or mm units for precise sizing
  • Avoid complex gradients (may not print well)

General best practices:

  • Use border-collapse: collapse; on tables
  • Right-align numbers, left-align text
  • Use consistent padding (8-12px for table cells)
  • Test with Preview before saving

AI Template Generation

The Template Editor includes AI-powered template generation to help you create templates quickly.

Using AI Generate

  1. Click AI Generate in the toolbar
  2. Describe what kind of template you want in plain language
  3. Click Generate
  4. The AI creates an HTML template based on your description
  5. Review the result in the editor
  6. Modify as needed and save

Example prompts:

  • “A simple pick list with recipe names and quantities in a clean table”
  • “A product label with nutrition facts in EU format and allergen warnings”
  • “An ingredient comparison table showing fat, protein, and sugar content”

Copy AI Prompt

If you prefer to use an external AI tool (like Claude or ChatGPT), click Copy AI Prompt to copy a pre-built prompt that includes:

  • The template syntax rules
  • All available fields from your current data
  • Instructions for creating a template

You can paste this into any AI assistant to get template suggestions.


Tips & Best Practices

Use conditional blocks for optional content Wrap allergen sections in {{#IF}} blocks so they don’t show up empty when there are no allergens.

Don’t add units to lbl fields Fields like lblEU_Fat already include the unit (e.g., “12.5 g”). Adding another “g” will result in “12.5 g g”.

Use format specifiers for clean numbers Instead of showing “245.67892”, use {{RecipeData.PAC:1}} to show “245.7”.

Preview often Click Preview frequently while building templates to catch issues early.

Copy before customizing Always copy a default template before modifying – you can’t undo changes to the original defaults.

Test with different data If your template will be used with different recipes, test it with recipes that have varying amounts of data (some with allergens, some without, etc.).

Use the DataSet Browser Don’t try to memorize field names. Use the DataSet Browser to explore available fields and double-click to insert them correctly.


This feature is available to registered users. The report system continues to evolve – additional report types and locations may be added in future updates.