FAQ & Troubleshooting
Find answers to common questions and solutions to frequently encountered issues.
General FAQ
SignSure is a JavaScript library that provides an intuitive drag-and-drop interface for placing form fields (especially signature fields) on PDF documents. It allows you to:
- Load PDF documents in the browser
- Add signature, text, date, and checkbox fields
- Position fields with pixel-perfect precision
- Export field configurations for form processing
- Integrate with any JavaScript framework or vanilla HTML
No, SignSure is a client-side JavaScript library that runs entirely in the browser. You don't need any server-side dependencies or special hosting requirements.
However, you may need a server to:
- Serve PDF files (due to CORS restrictions)
- Process and save form configurations
- Handle the final document generation with filled fields
SignSure offers different licensing options:
- Demo License: Free for testing and evaluation (includes watermark)
- Professional License: For commercial projects and production use
- Enterprise License: Includes source code access and priority support
You can use the demo license key DEMO-1234-5678-9ABC-DEF123456789 for testing.
Yes! SignSure is framework-agnostic and works with all modern JavaScript frameworks. We provide detailed integration guides for:
- React (with hooks and class components)
- Vue.js (Options API and Composition API)
- Angular (with services and components)
- Svelte and other frameworks
- Vanilla JavaScript
Check our Framework Integrations guide for examples.
SignSure supports most standard PDF features:
- Multi-page PDF documents
- Various PDF versions (1.4 through 2.0)
- Password-protected PDFs (with password)
- Different page sizes and orientations
- Text layers and searchable PDFs
Not supported: Forms with existing AcroForm fields, encrypted PDFs without password, and PDFs with restricted permissions.
Installation Issues
This error occurs when the SignSure library isn't properly loaded. Check:
<script src="https://cdn.signsure.xyz/v1/signsure.min.js"></script>
<script>
// Wait for the library to load
document.addEventListener('DOMContentLoaded', function() {
const signSure = new SignSure({
container: '#pdf-container',
licenseKey: 'your-license-key'
});
});
</script>
For ES modules:
import SignSure from '@signsure/core';
// or
const SignSure = require('@signsure/core');
If npm installation fails, try these solutions:
# Clear npm cache
npm cache clean --force
# Try with --legacy-peer-deps flag
npm install @signsure/core --legacy-peer-deps
# Or use yarn
yarn add @signsure/core
# For private registry issues
npm config set registry https://registry.npmjs.org/
If you continue having issues, download the library directly from our Downloads page.
Common Issues
Field Placement Issues
Signature fields not positioning correctly or not responding to interactions.
View SolutionsPerformance Issues
Slow loading, laggy interactions, or high memory usage with large documents.
View SolutionsMobile Issues
Touch interactions not working or interface not responsive on mobile devices.
View SolutionsPDF Loading Troubleshooting
Solutions:
- Serve PDFs from the same domain as your application
- Configure your server to send CORS headers
- Use a proxy server to serve PDFs
- Convert PDF to base64 and pass as data URL
// Example: Loading PDF as base64
const pdfAsBase64 = 'data:application/pdf;base64,JVBERi0xLjQK...';
await signSure.loadPDF(pdfAsBase64);
// Example: Using fetch with proper headers
const response = await fetch('/api/pdf-proxy?url=' + encodeURIComponent(pdfUrl));
const pdfBlob = await response.blob();
await signSure.loadPDF(pdfBlob);
If the PDF loads but appears blank or corrupted:
- Check that the PDF file is valid and not corrupted
- Ensure the PDF is not password-protected
- Try with a different PDF to isolate the issue
- Check browser console for error messages
// Enable debug mode to see detailed error messages
const signSure = new SignSure({
container: '#pdf-container',
licenseKey: 'your-license-key',
debug: true
});
// Listen for PDF errors
signSure.on('pdf:error', (error) => {
console.error('PDF Error:', error);
// Handle error appropriately
});
// Ensure you're using the correct coordinate system
const signSure = new SignSure({
container: '#pdf-container',
licenseKey: 'your-license-key',
coordinates: {
format: 'pdf', // 'pdf', 'screen', 'relative'
origin: 'bottom-left' // PDF standard
}
});
// For screen coordinates (top-left origin)
const signSure = new SignSure({
container: '#pdf-container',
licenseKey: 'your-license-key',
coordinates: {
format: 'screen',
origin: 'top-left'
}
});
If fields don't respond to mouse or touch interactions:
- Check that the container has proper CSS positioning
- Ensure no overlapping elements are blocking interactions
- Verify the PDF is fully loaded before adding fields
- Check for JavaScript errors in the console
/* Ensure proper container styling */
#pdf-container {
position: relative;
width: 100%;
height: 600px;
overflow: auto;
}
/* Avoid pointer-events: none on parent elements */
.parent-element {
pointer-events: auto;
}
Performance Optimization
For better performance with large documents:
const signSure = new SignSure({
container: '#pdf-container',
licenseKey: 'your-license-key',
// Performance optimizations
enableVirtualization: true, // For documents with many pages
maxFields: 25, // Limit concurrent fields
initialScale: 0.8, // Start with smaller scale
preloadPages: 3 // Limit page preloading
});
// Load PDF with progress tracking
signSure.on('pdf:loading', (progress) => {
console.log('Loading progress:', progress + '%');
});
signSure.on('pdf:loaded', () => {
console.log('PDF loaded successfully');
});
To prevent memory leaks:
- Always call
destroy()when done - Clear documents before loading new ones
- Remove event listeners when components unmount
// Proper cleanup
function cleanup() {
// Clear current document
signSure.clearDocument();
// Remove event listeners
signSure.off('all');
// Destroy instance
signSure.destroy();
}
// React example
useEffect(() => {
return () => {
cleanup();
};
}, []);
Mobile Device Issues
For mobile touch support:
const signSure = new SignSure({
container: '#pdf-container',
licenseKey: 'your-license-key',
// Mobile optimizations
touchEnabled: true,
mobileOptimized: true,
gestureHandling: 'cooperative'
});
// CSS for touch devices
// Add to your stylesheet:
/* Mobile touch optimizations */
.signsure-container {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
touch-action: pan-x pan-y;
}
@media (max-width: 768px) {
.signsure-field {
min-width: 120px;
min-height: 60px;
}
.signsure-handle {
width: 16px;
height: 16px;
}
}
Need More Help?
📞 Contact Support
Can't find the answer you're looking for? Our support team is here to help you get SignSure working perfectly in your application.