Text Controls - Line & Page Break Guide
Text control characters provide precise control over document layout and structure within PDF4me templates. These special control characters enable you to manage line breaks, page breaks, column structures, paragraph formatting, and other layout elements programmatically within your generated documents.
Available Control Characters
PDF4me templates support the following control characters for document structure management:
Column Break
Inserts a column break, moving content to the next column in multi-column layouts.
<<[ControlChar.ColumnBreak]>>
Use Case: Multi-column newsletters, brochures, or documents with columnar layouts.
Example:
Column 1 Content...
<<[ControlChar.ColumnBreak]>>
Column 2 Content...
Line Break
Inserts a line break within the same paragraph, moving to the next line without starting a new paragraph.
<<[ControlChar.LineBreak]>>
Use Case: Addresses, poetry, or multi-line content within a single paragraph.
Example:
Customer Name: <<[customerName]>><<[ControlChar.LineBreak]>>
Address Line 1: <<[address1]>><<[ControlChar.LineBreak]>>
Address Line 2: <<[address2]>><<[ControlChar.LineBreak]>>
City, State ZIP: <<[city]>>, <<[state]>> <<[zipCode]>>
Output:
Customer Name: John Smith
Address Line 1: 123 Main Street
Address Line 2: Suite 100
City, State ZIP: New York, NY 10001
Line Feed
Inserts a line feed character, similar to pressing Enter in a text editor.
<<[ControlChar.LineFeed]>>
Use Case: Creating vertical spacing or separating lines of text.
Non-Breaking Space
Inserts a space that prevents line breaks, keeping words together on the same line.
<<[ControlChar.NonBreakingSpace]>>
Use Case: Keeping units with numbers (e.g., "100 km"), names together, or preventing unwanted line breaks.
Example:
Distance: <<[distance]>><<[ControlChar.NonBreakingSpace]>>kilometers
Ensures "kilometers" stays on the same line as the number.
Page Break
Inserts a page break, forcing content to start on a new page.
<<[ControlChar.PageBreak]>>
Use Case: Separating major sections, ensuring content starts on new pages, or controlling pagination.
Example:
Section 1 Content...
<<[ControlChar.PageBreak]>>
Section 2 Content...
Paragraph Break
Inserts a paragraph break, ending the current paragraph and starting a new one.
<<[ControlChar.ParagraphBreak]>>
Use Case: Creating distinct paragraphs, adding vertical spacing, or structuring text.
Example:
First paragraph text here.<<[ControlChar.ParagraphBreak]>>
Second paragraph text here.<<[ControlChar.ParagraphBreak]>>
Third paragraph text here.
Section Break
Inserts a section break, creating a new document section with independent formatting.
<<[ControlChar.SectionBreak]>>
Use Case: Different headers/footers per section, orientation changes (portrait to landscape), or independent page numbering.
Tab
Inserts a tab character for alignment purposes.
<<[ControlChar.Tab]>>
Use Case: Aligning text, creating columns without tables, or indentation.
Example:
Name:<<[ControlChar.Tab]>><<[customerName]>>
Email:<<[ControlChar.Tab]>><<[email]>>
Phone:<<[ControlChar.Tab]>><<[phone]>>
Practical Applications
Application 1: Multi-Section Document
Template:
Chapter 1: Introduction
<<[chapter1Content]>>
<<[ControlChar.PageBreak]>>
Chapter 2: Analysis
<<[chapter2Content]>>
<<[ControlChar.PageBreak]>>
Chapter 3: Conclusion
<<[chapter3Content]>>
Application 2: Formatted Address Block
Template:
<<[companyName]:caps>><<[ControlChar.LineBreak]>>
<<[address1]>><<[ControlChar.LineBreak]>>
<<if [address2 != null]>><<[address2]>><<[ControlChar.LineBreak]>><</if>>
<<[city]>>, <<[state]>><<[ControlChar.NonBreakingSpace]>><<[zipCode]>><<[ControlChar.LineBreak]>>
<<[country]>>
Application 3: Tabular Data Without Tables
Template:
Item<<[ControlChar.Tab]>>Quantity<<[ControlChar.Tab]>>Price
<<foreach [item in items]>>
<<[item.name]>><<[ControlChar.Tab]>><<[item.qty]>><<[ControlChar.Tab]>>$<<[item.price]>><<[ControlChar.LineBreak]>>
<</foreach>>
Application 4: Newsletter Layout
Template:
Article 1 Content (Column 1)...
<<[ControlChar.ColumnBreak]>>
Article 2 Content (Column 2)...
<<[ControlChar.ColumnBreak]>>
Article 3 Content (Column 3)...
<<[ControlChar.PageBreak]>>
Page 2 Content...
Combining Control Characters
Multiple control characters can be used together for complex layouts.
Example: Structured Contact List
Template:
<<foreach [contact in contacts]>>
**<<[contact.name]:caps>>**<<[ControlChar.LineBreak]>>
Position: <<[contact.position]>><<[ControlChar.LineBreak]>>
Email: <<[contact.email]>><<[ControlChar.LineBreak]>>
Phone: <<[contact.phone]>><<[ControlChar.ParagraphBreak]>>
<</foreach>>
Control Characters in Loops
Use control characters within foreach loops for dynamic formatting.
Example: Department Listing with Page Breaks
Template:
<<foreach [dept in departments]>>
**Department: <<[dept.name]>>**
<<[dept.description]>>
Employees:
<<foreach [emp in dept.employees]>>
• <<[emp.name]>> - <<[emp.role]>><<[ControlChar.LineBreak]>>
<</foreach>>
<<[ControlChar.PageBreak]>>
<</foreach>>
Each department gets its own page.
Advanced Formatting Techniques
Conditional Page Breaks
Template:
<<foreach [section in sections]>>
<<[section.title]>>
<<[section.content]>>
<<if [$index < sections.Count() - 1]>>
<<[ControlChar.PageBreak]>>
<</if>>
<</foreach>>
Adds page breaks between sections, but not after the last section.
Dynamic Spacing
Template:
<<foreach [item in items]>>
<<[item.name]>><<[ControlChar.LineBreak]>>
<<if [item.hasDetails]>>
Details: <<[item.details]>><<[ControlChar.ParagraphBreak]>>
<</if>>
<</foreach>>
Control Character Reference
| Control Character | Symbol | Purpose | Common Use |
|---|---|---|---|
ColumnBreak | N/A | Next column | Multi-column layouts |
LineBreak | ↓ | New line, same paragraph | Addresses, lists |
LineFeed | LF | Line feed | Text formatting |
NonBreakingSpace | Unbreakable space | Keep words together | |
PageBreak | ⤶ | New page | Chapter breaks |
ParagraphBreak | ¶ | New paragraph | Text separation |
SectionBreak | § | New section | Headers/footers change |
Tab | → | Tab alignment | Columnar alignment |
Best Practices
Layout Control
- Use appropriately - Choose the right control for your layout needs
- Test output - Verify control characters produce desired layout
- Consistent spacing - Use paragraph breaks consistently for spacing
- Avoid excessive breaks - Don't overuse page/section breaks
Document Structure
- Logical sections - Use section breaks for logical document divisions
- Proper pagination - Use page breaks to control where pages split
- Alignment - Use tabs for simple alignment needs
- Address formatting - Use line breaks for multi-line addresses
Template Maintenance
- Document usage - Comment where complex control characters are used
- Visual clarity - Format template for readability
- Test thoroughly - Verify output with different data sets
- Version control - Track changes to template structure
Troubleshooting
Common Issues
Issue: Unexpected page breaks in output
Solution: Check for unintended PageBreak or SectionBreak usage
Issue: Text not aligning with tabs
Solution: Verify tab stops are set in Word template
Issue: Column breaks not working
Solution: Ensure document has column layout configured
Issue: Non-breaking spaces not preventing breaks
Solution: Check for long strings that force breaks despite non-breaking spaces
Issue: Too much white space in document
Solution: Review paragraph break usage; may be excessive
Complete Example: Multi-Section Report
Template:
<<var [reportTitle = "Annual Business Report"]>>
<<var [reportYear = 2024]>>
<<var [companyName = "Tech Innovations Inc."]>>
**<<[reportTitle]>> - <<[reportYear]>>**<<[ControlChar.LineBreak]>>
<<[companyName]>><<[ControlChar.ParagraphBreak]>>
**Executive Summary**<<[ControlChar.LineBreak]>>
<<[executiveSummary]>><<[ControlChar.PageBreak]>>
**Financial Overview**<<[ControlChar.LineBreak]>>
<<foreach [quarter in quarters]>>
Q<<[$index + 1]>> <<[reportYear]>>:<<[ControlChar.LineBreak]>>
Revenue:<<[ControlChar.Tab]>>$<<[quarter.revenue]:"F2">><<[ControlChar.LineBreak]>>
Expenses:<<[ControlChar.Tab]>>$<<[quarter.expenses]:"F2">><<[ControlChar.LineBreak]>>
Profit:<<[ControlChar.Tab]>>$<<[quarter.profit]:"F2">><<[ControlChar.ParagraphBreak]>>
<</foreach>>
<<[ControlChar.SectionBreak]>>
**Department Reports**<<[ControlChar.LineBreak]>>
<<foreach [dept in departments]>>
**<<[dept.name]>>**<<[ControlChar.LineBreak]>>
<<[dept.report]>><<[ControlChar.PageBreak]>>
<</foreach>>
Always generate test documents with actual data to verify that control characters produce the intended layout. Different content lengths may affect how breaks and spacing appear.
Section breaks create new document sections with independent formatting. Use carefully, as they affect headers, footers, page numbering, and orientation for subsequent content.