Learn how to upload reusable backgrounds and apply them to your print jobs automatically. Perfect for letterheads, logos, and consistent branding.
What are Backgrounds?
Backgrounds are PDF designs that Intelliprint applies behind your letter content. Think of them as templates or letterheads that get combined with your content during printing.
Common uses:
Company letterheads
Logos and branding
Decorative borders
Footer information (contact details, registration numbers)
How Backgrounds Work
You upload a background PDF once, then reference it by ID in your print jobs. Intelliprint overlays your content on top of the background during printing.
Step 1: Create a Background
First, upload your background design:
import Intelliprint from 'intelliprint' ;
import fs from 'fs' ;
const ip = Intelliprint ( 'your-api-key-here' );
const background = await ip . backgrounds . create ({
name: 'Company Letterhead' ,
file: fs . createReadStream ( './letterhead.pdf' )
});
console . log ( '✓ Background created' );
console . log ( 'ID:' , background . id );
console . log ( 'Preview:' , background . pdf );
Background uploaded! Save the ID (e.g., bg_abc123) - you’ll use it in your print jobs.
Step 2: Apply to First Page Only
Use the background on just the first page (typical for letterheads):
const printJob = await ip . prints . create ({
testmode: true ,
content: '<h1>Important Notice</h1><p>...</p>' ,
recipients: [{ address: { /* ... */ }}],
// Apply background to first page only
background: {
first_page: 'bg_abc123' // Your background ID
},
confirmed: true
});
Step 3: Apply to All Pages
Use different backgrounds for first page and continuation pages:
const printJob = await ip . prints . create ({
testmode: true ,
content: '<h1>Long Document</h1><p>Multiple pages...</p>' ,
recipients: [{ address: { /* ... */ }}],
background: {
first_page: 'bg_letterhead' , // Letterhead on page 1
other_pages: 'bg_continuation' // Logo on pages 2+
},
confirmed: true
});
Design Guidelines
Size : A4 (210mm x 297mm)
Safe area : Keep important content 15mm from edges
Address area : Leave top-left clear if using dynamic addresses (100mm x 50mm from top-left corner)
Header : Top 40mm typically used for logos/letterhead
Footer : Bottom 30mm for contact details, registration info
Centre : Keep clear for your letter content
Light backgrounds work best (won’t interfere with content)
Avoid large solid blocks of colour (expensive and can smudge)
Test readability by printing a sample
Managing Backgrounds
List All Backgrounds
const backgrounds = await ip . backgrounds . list ({
limit: 10 ,
sort_order: 'desc'
});
backgrounds . data . forEach ( bg => {
console . log ( ` ${ bg . name } ( ${ bg . id } )` );
});
Update a Background
// Update the name
await ip . backgrounds . update ( 'bg_abc123' , {
name: 'Updated Letterhead 2024'
});
// You cannot update the file itself - create a new background instead
Delete a Background
await ip . backgrounds . delete ( 'bg_abc123' );
Deletion restrictions: A background cannot be deleted if used by any print job in the last 90 days (required for potential reprints).
Real-World Examples
Example 1: Invoice Letterhead
// Create letterhead background
const letterhead = await ip . backgrounds . create ({
name: 'Invoice Letterhead' ,
file: fs . createReadStream ( './invoice-header.pdf' )
});
// Send invoices with letterhead
async function sendInvoice ( invoiceData ) {
return await ip . prints . create ({
testmode: false ,
content: generateInvoiceHTML ( invoiceData ),
recipients: [{ address: invoiceData . customer_address }],
background: {
first_page: letterhead . id
},
reference: `Invoice ${ invoiceData . number } ` ,
confirmed: true
});
}
Example 2: Multi-page Report with Branding
// Create backgrounds
const header = await ip . backgrounds . create ({
name: 'Report Header' ,
file: fs . createReadStream ( './report-header.pdf' )
});
const footer = await ip . backgrounds . create ({
name: 'Report Footer' ,
file: fs . createReadStream ( './report-footer.pdf' )
});
// Send report
const printJob = await ip . prints . create ({
testmode: true ,
file: fs . createReadStream ( './annual-report.pdf' ),
recipients: [{ address: { /* ... */ }}],
background: {
first_page: header . id ,
other_pages: footer . id
},
confirmed: true
});
Example 3: Marketing Campaign with Branding
const branding = await ip . backgrounds . create ({
name: 'Campaign Branding' ,
file: fs . createReadStream ( './campaign-background.pdf' )
});
// Use with mailing list
const printJob = await ip . prints . create ({
testmode: true ,
content: `
<h1>Exclusive Offer</h1>
<p>Dear {first_name},</p>
<p>We have a special offer just for you...</p>
` ,
mailing_list: 'mal_campaign2024' ,
background: {
first_page: branding . id ,
other_pages: branding . id // Same on all pages
},
confirmed: true
});
You can apply backgrounds to extra documents too:
const printJob = await ip . prints . create ({
testmode: true ,
content: '<h1>Main Letter</h1>' ,
recipients: [{ address: { /* ... */ }}],
background: {
first_page: 'bg_letterhead' ,
other_pages: 'bg_continuation'
},
// Extra documents can use backgrounds too
extra_documents: [{
document: fs . createReadStream ( './terms.pdf' ),
apply_background: true // Uses 'other_pages' background
}],
confirmed: true
});
When apply_background: true, the other_pages background is applied to the extra document pages.
Best Practices
Always send a test print with your background applied to verify it looks correct before sending to customers.
Create a library of backgrounds for different use cases (invoices, marketing, reports) and reuse them consistently.
Keep file sizes reasonable
Large background files slow down processing. Optimise PDFs by:
Compressing images
Removing unnecessary elements
Flattening layers
Heavy ink coverage increases costs. Light backgrounds with minimal colour are more economical.
Next Steps