FAQ & Troubleshooting

Find answers to common questions and solutions to frequently encountered issues.

General FAQ

What is SignSure and what does it do?

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
Do I need a server to use SignSure?

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
Is SignSure free to use?

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.

Can I use SignSure with React, Vue, or Angular?

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.

What PDF features are supported?

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

I get "SignSure is not defined" error

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');
NPM installation fails

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

PDF Not Loading

PDF documents fail to load or display incorrectly in the viewer.

View Solutions

Field Placement Issues

Signature fields not positioning correctly or not responding to interactions.

View Solutions

Performance Issues

Slow loading, laggy interactions, or high memory usage with large documents.

View Solutions

Mobile Issues

Touch interactions not working or interface not responsive on mobile devices.

View Solutions

PDF Loading Troubleshooting

CORS error when loading PDF
CORS (Cross-Origin Resource Sharing) errors occur when trying to load PDFs from different domains.

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);
PDF appears blank or corrupted

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'
    }
});
Fields not responding to clicks

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

Large PDFs load slowly

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');
});
Memory usage keeps increasing

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

Touch interactions not working

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.

Tip: When contacting support, please include your browser version, SignSure version, a minimal code example, and any console error messages.