diff --git a/src/dbp-pdf-preview.js b/src/dbp-pdf-preview.js
index edc2409b9e73fa33e464f92e0d73e1f861b8bede..301ad03e55f18d6f222d1ad432926e8264fa7094 100644
--- a/src/dbp-pdf-preview.js
+++ b/src/dbp-pdf-preview.js
@@ -10,6 +10,7 @@ import * as commonStyles from '@dbp-toolkit/common/styles';
 import pdfjs from 'pdfjs-dist/es5/build/pdf.js';
 import buildinfo from 'consts:buildinfo';
 import {name as pkgName} from './../package.json';
+import {getPDFSignatureCount} from './utils.js';
 
 const i18n = createI18nInstance();
 
@@ -238,6 +239,8 @@ export class PdfPreview extends ScopedElementsMixin(DBPLitElement) {
         };
 
         reader.readAsBinaryString(file);
+
+        console.log(`Signature count: ${await getPDFSignatureCount(file)}`);
     }
 
     getSignatureRect() {
diff --git a/src/utils.js b/src/utils.js
index 615b2ae311aa2c9530b4893eba424ad359f83163..ea75b14f9e677368382b8dfc06694a196604029b 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -80,3 +80,36 @@ export const fabricjs2pdfasPosition = (data) => {
         p: data.currentPage
     };
 };
+
+/**
+ * Given a PDF file returns the amount of signatures found in it.
+ *
+ * Note that this uses an heuristic, so the result can be wrong
+ * (improvements welcome).
+ *
+ * @param {File} file The PDF file object
+ * @returns {number} The amount of signatures found
+ */
+export const getPDFSignatureCount = async (file) => {
+    const sigRegex = new RegExp(
+        "/Type\\s*/Sig\\s*/Filter\\s*/Adobe.PPKLite\\s*/SubFilter\\s*(/ETSI\\.CAdES\\.detached|/adbe\\.pkcs7\\.detached)",
+        "g");
+
+    const promise = new Promise((resolve, reject) => {
+        let reader = new FileReader();
+        reader.onload = async () => {
+            let result = reader.result;
+            let matches = 0;
+            while (sigRegex.exec(result) !== null) {
+                matches++;
+            }
+            resolve(matches);
+        };
+        reader.onerror = async () => {
+            reject(reader.error);
+        };
+        reader.readAsBinaryString(file);
+    });
+
+    return promise;
+};
\ No newline at end of file
diff --git a/test/unit.js b/test/unit.js
index 611333e48d617c319bc9e00518240a847d5a86fd..6038335dab5aa979d8b02214d16f7d47549e0889 100644
--- a/test/unit.js
+++ b/test/unit.js
@@ -2,6 +2,7 @@ import {assert} from 'chai';
 
 import '../src/dbp-official-signature-pdf-upload';
 import '../src/dbp-signature.js';
+import {getPDFSignatureCount} from '../src/utils.js';
 
 suite('dbp-official-signature-pdf-upload basics', () => {
   let node;
@@ -39,3 +40,24 @@ suite('dbp-signature-app basics', () => {
   });
 });
 
+suite('pdf signature detection', () => {
+
+    function getPDFFile(data) {
+        return new File([new Blob([data])], 'test.pdf', {type: 'application/pdf'});
+    }
+
+    test('getPDFSignatureCount', async () => {
+        let sig1 = "/Type\n/Sig\n/Filter\n/Adobe.PPKLite\n/SubFilter\n/ETSI.CAdES.detached";
+        let sig2 = "/Type\n/Sig\n/Filter\n/Adobe.PPKLite\n/SubFilter\n/adbe.pkcs7.detached";
+
+        assert(await getPDFSignatureCount(getPDFFile(sig1)) === 1);
+        assert(await getPDFSignatureCount(getPDFFile(sig2)) === 1);
+        assert(await getPDFSignatureCount(getPDFFile(sig1 + sig2)) === 2);
+        assert(await getPDFSignatureCount(getPDFFile("foo" + sig1 + "bar" + sig2 + "quux")) === 2);
+        assert(await getPDFSignatureCount(getPDFFile("\nfoo" + sig1 + "bar\n")) === 1);
+        assert(await getPDFSignatureCount(getPDFFile("\nfoo" + sig2 + "bar\n")) === 1);
+
+        assert(await getPDFSignatureCount(getPDFFile("foobar")) === 0);
+        assert(await getPDFSignatureCount(getPDFFile("")) === 0);
+    });
+});