lichen-annotate-pdf
Version:
Annotation layer for pdf.js in vue fork of Aaron Leong pdf-annotate-vue
57 lines (51 loc) • 2.01 kB
JavaScript
import setAttributes from '../utils/setAttributes';
import normalizeColor from '../utils/normalizeColor';
/**
* Create SVGTextElement from an annotation definition.
* This is used for anntations of type `textbox`.
*
* @param {Object} a The annotation definition
* @return {SVGTextElement} A text to be rendered
*/
export default function renderText (a) {
// Text should be rendered at 0 degrees relative to
// document rotation
let text = document.createElementNS('http://www.w3.org/2000/svg', 'text');
setAttributes(text, {
x: a.x,
y: a.y,
fill: normalizeColor(a.color || '#000'),
fontSize: a.size,
transform: `rotate(${a.rotation})`,
style: 'white-space: pre',
filter: 'url(#solid)'
});
text.innerHTML = a.content;
// CODE POUR BACKGROUND TEXTE
var defs = document.createElementNS("http://www.w3.org/2000/svg", "defs");
var filter = document.createElementNS("http://www.w3.org/2000/svg", "filter");
filter.setAttribute("id", "f2");
filter.setAttribute("x", "0");
filter.setAttribute("y", "0");
var flood = document.createElementNS("http://www.w3.org/2000/svg", "feFlood");
flood.setAttribute("flood-color", "#f562ed");
flood.setAttribute("flood-opacity", "0.2");
flood.setAttribute("result", "bg");
var merge = document.createElementNS("http://www.w3.org/2000/svg", "feMerge");
var mergeNode1 = document.createElementNS("http://www.w3.org/2000/svg", "feMergeNode");
mergeNode1.setAttribute('in', 'bg')
var mergeNode2 = document.createElementNS("http://www.w3.org/2000/svg", "feMergeNode");
mergeNode2.setAttribute('in', 'SourceGraphic')
// FIN CODE POUR BACKGROUND TEXTE
let g = document.createElementNS('http://www.w3.org/2000/svg', 'g');
g.appendChild(text);
merge.appendChild(mergeNode1);
merge.appendChild(mergeNode2);
filter.appendChild(flood);
filter.appendChild(merge);
defs.appendChild(filter);
g.appendChild(defs);
text.setAttribute("filter", "url(#f2)");
// g.appendChild(rect);
return g;
}