120 lines
3.7 KiB
JavaScript
120 lines
3.7 KiB
JavaScript
class Annotation {
|
|
createAnnotations(document) {
|
|
const annotations = [];
|
|
|
|
document.elements.forEach((element) => {
|
|
console.log("Creating annotation for element", element.id)
|
|
|
|
const [annotation, formField] = this.createAnnotationFromElement(element)
|
|
annotations.push(annotation);
|
|
annotations.push(formField);
|
|
})
|
|
|
|
return annotations;
|
|
}
|
|
|
|
async deleteAnnotations(instance) {
|
|
let pageAnnotations = (
|
|
await Promise.all(Array.from({ length: instance.totalPageCount }).map((_, pageIndex) =>
|
|
instance.getAnnotations(pageIndex)
|
|
))
|
|
).flatMap((annotations) =>
|
|
annotations.reduce((acc, annotation) => acc.concat(annotation), [])
|
|
).filter((annotation) => !!annotation.isSignature || annotation.description == "FRAME");
|
|
//deleting all Annotations
|
|
return await instance.delete(pageAnnotations);
|
|
}
|
|
|
|
async validateAnnotations(instance) {
|
|
let pageAnnotations = (
|
|
await Promise.all(Array.from({ length: instance.totalPageCount }).map((_, pageIndex) =>
|
|
instance.getAnnotations(pageIndex)
|
|
))
|
|
).flatMap((annotations) =>
|
|
annotations.reduce((acc, annotation) => acc.concat(annotation), [])
|
|
).map((annotation) => {
|
|
console.log(annotation.toJS());
|
|
return annotation;
|
|
});
|
|
|
|
return true;
|
|
}
|
|
|
|
createAnnotationFromElement(element) {
|
|
const id = PSPDFKit.generateInstantId()
|
|
const width = this.inchToPoint(element.width)
|
|
const height = this.inchToPoint(element.height)
|
|
const top = this.inchToPoint(element.top) - (height / 2)
|
|
const left = this.inchToPoint(element.left) - (width / 2)
|
|
const page = element.page - 1
|
|
const annotation = this.createSignatureAnnotation(id, width, height, top, left, page)
|
|
console.log(annotation)
|
|
|
|
const formField = new PSPDFKit.FormFields.SignatureFormField({
|
|
name: id,
|
|
annotationIds: PSPDFKit.Immutable.List([annotation.id])
|
|
})
|
|
console.log(formField)
|
|
|
|
return [annotation, formField]
|
|
}
|
|
|
|
createSignatureAnnotation(id, width, height, top, left, pageIndex) {
|
|
const annotation = new PSPDFKit.Annotations.WidgetAnnotation({
|
|
id: id,
|
|
pageIndex: pageIndex,
|
|
formFieldName: id,
|
|
boundingBox: new PSPDFKit.Geometry.Rect({ width, height, top, left })
|
|
})
|
|
|
|
return annotation
|
|
}
|
|
|
|
async createAnnotationFrameBlob(receiverName, width, height) {
|
|
const canvas = document.createElement("canvas");
|
|
canvas.width = width;
|
|
canvas.height = height;
|
|
|
|
const ctx = canvas.getContext("2d");
|
|
|
|
const date = new Date();
|
|
const dateString = date.toLocaleDateString("de-DE");
|
|
|
|
const signatureLength = 100;
|
|
|
|
ctx.beginPath();
|
|
|
|
ctx.moveTo(30, 10);
|
|
ctx.lineTo(signatureLength, 10);
|
|
|
|
ctx.moveTo(30, 10);
|
|
ctx.arcTo(10, 10, 10, 30, 20);
|
|
|
|
ctx.moveTo(10, 30);
|
|
ctx.arcTo(10, 50, 30, 50, 20);
|
|
|
|
ctx.moveTo(30, 50);
|
|
ctx.lineTo(signatureLength, 50);
|
|
|
|
ctx.strokeStyle = "darkblue";
|
|
ctx.stroke();
|
|
|
|
ctx.fillStyle = "black";
|
|
ctx.font = "10px serif";
|
|
ctx.fillText("Signed by", 30, 10)
|
|
ctx.fillText(receiverName + ", " + dateString, 15, 60)
|
|
|
|
return new Promise(resolve => {
|
|
canvas.toBlob((blob) => {
|
|
const url = URL.createObjectURL(blob);
|
|
resolve(url)
|
|
})
|
|
})
|
|
}
|
|
|
|
inchToPoint(inch) {
|
|
return inch * 72;
|
|
}
|
|
}
|
|
|