
Security News
Rust RFC Proposes a Security Tab on crates.io for RustSec Advisories
Rustâs crates.io team is advancing an RFC to add a Security tab that surfaces RustSec vulnerability and unsoundness advisories directly on crate pages.
@imgly/plugin-print-ready-pdfs-web
Advanced tools
Print-Ready PDFs plugin for CE.SDK editor - PDF/X conversion and export functionality. Contains AGPL-3.0 licensed Ghostscript WASM.
Transform CE.SDK PDFs into Print-Ready CMYK Files
Convert CE.SDK's standard PDF exports into fully PDF/X-3 compliant, CMYK-based print-ready files with embedded ICC output intents. This plugin hooks directly into CE.SDK's export process, ensuring your designs are automatically prepared for professional commercial printing workflows.
Your users design beautiful materials in CE.SDK. But professional printing requires specific PDF standards:
This plugin automatically converts CE.SDK's RGB PDFs into print-ready files that meet professional printing requirements:
npm install @imgly/plugin-print-ready-pdfs-web
Just one function call transforms any PDF into a print-ready file:
import { convertToPDFX3 } from '@imgly/plugin-print-ready-pdfs-web';
// Convert CE.SDK's RGB PDF to print-ready CMYK
const printReadyPDF = await convertToPDFX3(pdfBlob, {
outputProfile: 'fogra39', // European printing standard
title: 'My Print Document',
});
// That's it! The PDF is now ready for professional printing
Add print-ready export to your existing CE.SDK implementation with minimal code changes:
import CreativeEditorSDK from '@cesdk/cesdk-js';
import { convertToPDFX3 } from '@imgly/plugin-print-ready-pdfs-web';
const config = {
license: 'your-cesdk-license',
};
const cesdk = await CreativeEditorSDK.create('#editor', config);
await cesdk.createDesignScene();
// Add custom export button to the navigation bar
cesdk.ui.insertNavigationBarOrderComponent('last', {
id: 'ly.img.actions.navigationBar',
children: [
{
key: 'export-print-ready-pdf',
id: 'ly.img.action.navigationBar',
label: 'Export Print-Ready PDF',
iconName: '@imgly/Download',
onClick: async () => {
const sceneId = cesdk.engine.scene.get();
const pdfBlob = await cesdk.engine.block.export(
sceneId,
'application/pdf'
);
const printReadyBlob = await convertToPDFX3(pdfBlob, {
outputProfile: 'fogra39',
title: 'Print-Ready Export',
});
// Download
const url = URL.createObjectURL(printReadyBlob);
const link = document.createElement('a');
link.href = url;
link.download = 'design-print-ready.pdf';
link.click();
URL.revokeObjectURL(url);
},
},
],
});
convertToPDFX3(pdf, options) / convertToPDFX3(pdfs, options)Converts RGB PDF(s) to print-ready format. This function supports both single PDF conversion and batch processing through function overloading.
Single PDF Conversion:
convertToPDFX3(pdf: Blob, options: PDFX3Options): Promise<Blob>
Parameters:
pdf (Blob): Input PDF file as a Blob objectoptions (PDFX3Options): Conversion configurationReturns: Promise - The print-ready PDF file
Batch Processing:
convertToPDFX3(pdfs: Blob[], options: PDFX3Options): Promise<Blob[]>
Parameters:
pdfs (Blob[]): Array of input PDF files as Blob objectsoptions (PDFX3Options): Conversion configuration (applied to all PDFs)Returns: Promise<Blob[]> - Array of print-ready PDF files
Options Interface:
interface PDFX3Options {
// Required
outputProfile: 'gracol' | 'fogra39' | 'srgb' | 'custom';
// Optional
customProfile?: Blob; // Required only if outputProfile is 'custom'
title?: string; // Document title
outputConditionIdentifier?: string; // ICC profile identifier for OutputIntent
outputCondition?: string; // Human-readable output condition description
flattenTransparency?: boolean; // Flatten transparency (default: true for PDF/X-3)
}
Note: Batch processing handles each PDF sequentially to avoid overwhelming the WASM module.
OutputIntent Metadata:
The outputConditionIdentifier and outputCondition fields control the PDF/X-3 OutputIntent metadata:
The plugin ships with industry-standard ICC profiles for immediate use:
| Profile | Purpose | Standard |
|---|---|---|
'fogra39' | European CMYK printing standard | FOGRA39 (ISO Coated v2) - Offset printing profile |
'gracol' | US CMYK printing standard | GRACoL 2013 - Commercial printing profile |
'srgb' | Digital/web distribution | sRGB - When CMYK conversion isn't required |
'custom' | Specific color requirements | Load any ICC profile for exact color matching |
The simplest way to integrate with CE.SDK's high-level export function:
import CreativeEditorSDK from '@cesdk/cesdk-js';
import { convertToPDFX3 } from '@imgly/plugin-print-ready-pdfs-web';
const cesdk = await CreativeEditorSDK.create('#editor', config);
// Export and convert to print-ready in one flow
const { blobs } = await cesdk.export({
mimeType: 'application/pdf'
});
// Function overloading automatically handles array input
const printReadyBlobs = await convertToPDFX3(blobs, {
outputProfile: 'fogra39',
title: 'Print-Ready Export',
});
// Download the first print-ready PDF
const url = URL.createObjectURL(printReadyBlobs[0]);
const link = document.createElement('a');
link.href = url;
link.download = 'design-print-ready.pdf';
link.click();
URL.revokeObjectURL(url);
import { convertToPDFX3 } from '@imgly/plugin-print-ready-pdfs-web';
// Your user designed materials in CE.SDK
const designPDF = await cesdk.engine.block.export(sceneId, 'application/pdf');
// Convert to print-ready format with CMYK and PDF/X-3 compliance
const printReadyPDF = await convertToPDFX3(designPDF, {
outputProfile: 'fogra39', // Industry-standard CMYK profile
title: 'Marketing Materials - Q4 2024',
});
// PDF now meets professional printing requirements
// US Commercial Printing Standard
const usPrintReady = await convertToPDFX3(pdfBlob, {
outputProfile: 'gracol', // GRACoL 2013 CMYK profile
title: 'US Print Production',
});
// European Printing Standard
const euPrintReady = await convertToPDFX3(pdfBlob, {
outputProfile: 'fogra39', // FOGRA39 CMYK profile
title: 'EU Print Production',
});
Bring your own ICC profile for specialized printing requirements:
// Load a specific ICC profile for exact color requirements
const customProfile = await fetch('/profiles/custom-cmyk-profile.icc').then(
(r) => r.blob()
);
const printReadyPDF = await convertToPDFX3(pdfBlob, {
outputProfile: 'custom',
customProfile: customProfile,
title: 'Specialized Print Output',
outputConditionIdentifier: 'Custom_Newsprint_CMYK',
outputCondition: 'Custom newsprint profile for high-speed web press'
});
// PDF now uses your exact CMYK color profile with custom metadata
Override Built-in Profile Metadata:
You can also override the metadata for built-in profiles:
const printReadyPDF = await convertToPDFX3(pdfBlob, {
outputProfile: 'fogra39',
title: 'Custom FOGRA39 Variant',
outputConditionIdentifier: 'FOGRA39_Modified',
outputCondition: 'Modified ISO Coated v2 for specific press'
});
Process multiple PDFs using the overloaded function:
import { convertToPDFX3 } from '@imgly/plugin-print-ready-pdfs-web';
// Array input automatically triggers batch processing (sequential)
const printReadyPDFs = await convertToPDFX3(pdfBlobs, {
outputProfile: 'gracol',
title: 'Batch Export',
});
// Or process in parallel for maximum speed (use with caution for large files)
const printReadyPDFs = await Promise.all(
pdfBlobs.map((pdf) =>
convertToPDFX3(pdf, {
outputProfile: 'gracol',
title: 'Batch Export',
})
)
);
Note: When passing an array, PDFs are processed sequentially to avoid overwhelming the WASM module. For parallel processing, use Promise.all with individual calls. Sequential processing is recommended for reliability.
Test the integration with a complete CE.SDK example:
# Start the test server
npm run test:cesdk
# Open http://localhost:3001 in your browser
# Create designs and export with different print profiles
The test interface includes:
The plugin ensures full PDF/X-3:2003 compliance by:
Every converted PDF includes a properly configured OutputIntent entry with:
/GTS_PDFX for PDF/X-3 standardThe /Trapped field is automatically set to /False in the PDF document info dictionary, indicating that trapping operations have not been performed. This is the correct value since the plugin performs color conversion but does not apply trapping.
Per the PDF/X-3 specification, this field must be set to either /True or /False (not /Unknown).
Text and vector graphics are preserved in their original vector format during conversion. Only the color space is converted from RGB to CMYKâno rasterization occurs for non-transparent content.
Important: PDF/X-3:2003 does not support transparency. By default, the plugin flattens all transparency to ensure compliance:
// Default behavior - flattens transparency (PDF/X-3 compliant)
const printReadyPDF = await convertToPDFX3(pdfBlob, {
outputProfile: 'fogra39',
title: 'Print Ready',
// flattenTransparency: true (default)
});
Transparency Flattening Behavior:
For Maximum Quality:
If your CE.SDK exports contain no transparency, you can disable flattening to preserve all vectors:
// Disable flattening for transparent-free PDFs (best quality)
const printReadyPDF = await convertToPDFX3(pdfBlob, {
outputProfile: 'fogra39',
title: 'Vector Preserved',
flattenTransparency: false, // Preserves vectors, but may not be PDF/X-3 compliant if transparency exists
});
â ď¸ Important: Only disable flattenTransparency if you're certain your PDFs contain no transparency. PDFs with transparency and flattenTransparency: false will fail PDF/X-3 validation.
Avoiding Transparency in CE.SDK:
This plugin uses Ghostscript WebAssembly (AGPL-3.0 licensed) with client-side browser execution:
â Generally Safe For:
â ď¸ Considerations:
Since the AGPL-licensed Ghostscript runs entirely in the end user's browser rather than as a network service:
For specific legal guidance, consult with legal counsel. For technical questions, contact IMG.LY support.
For questions about CE.SDK integration or print workflows:
FAQs
Print-Ready PDFs plugin for CE.SDK editor - PDF/X conversion and export functionality. Contains AGPL-3.0 licensed Ghostscript WASM.
We found that @imgly/plugin-print-ready-pdfs-web demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 12 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Rustâs crates.io team is advancing an RFC to add a Security tab that surfaces RustSec vulnerability and unsoundness advisories directly on crate pages.

Security News
/Research
Socket found a Rust typosquat (finch-rust) that loads sha-rust to steal credentials, using impersonation and an unpinned dependency to auto-deliver updates.

Research
/Security Fundamentals
A pair of typosquatted Go packages posing as Googleâs UUID library quietly turn helper functions into encrypted exfiltration channels to a paste site, putting developer and CI data at risk.