Add certificate generator tool (close #3)

This commit is contained in:
Skylar Ittner 2021-07-05 17:36:36 -06:00
parent aa60e9f7cf
commit f22eb52113
7 changed files with 905 additions and 0 deletions

View File

@ -118,6 +118,37 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
</div> </div>
</div> </div>
<div class="modal fade" id="certificateBuilderModal" tabindex="-1" aria-labelledby="certificateBuilderModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="certificateBuilderModalLabel">Notarial Certificate Builder</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
State: <select class="form-control" id="cert_state"></select>
County: <input class="form-control" type="text" id="cert_county" />
Signer: <input class="form-control" type="text" id="cert_signer" />
Notarial act: <select class="form-control" id="cert_act">
<option value="acknowledged">Acknowledgement ("acknowledged")</option>
<option value="signed">Signature Witness ("signed")</option>
<option value="signed and sworn to">Jurat/Verification on oath ("signed and sworn to")</option>
<option value="signed and affirmed to">Jurat/Verification on affirmation ("signed and affirmed to")</option>
<option value="CERTIFIEDCOPYELECTRONIC">Certified copy of electronic record</option>
</select>
</div>
<div class="modal-body">
<img id="certificate-preview" style="width: 6in; height: 4in;"/>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-primary" data-bs-dismiss="modal" onclick="certificateBuilderCallback()">Apply</button>
</div>
</div>
</div>
</div>
<div class="card d-flex flex-column h-100"> <div class="card d-flex flex-column h-100">
<div class="card-body"> <div class="card-body">
<div class="btn-toolbar d-inline-block" role="toolbar"> <div class="btn-toolbar d-inline-block" role="toolbar">
@ -142,6 +173,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
<div class="btn btn-primary" onclick="activateClientSignaturePad()"><i class="fas fa-file-signature"></i> Sign (Client)</div> <div class="btn btn-primary" onclick="activateClientSignaturePad()"><i class="fas fa-file-signature"></i> Sign (Client)</div>
<div class="btn btn-primary" onclick="activateNotarySignatureTool()"><i class="fas fa-file-signature"></i> Sign (Notary)</div> <div class="btn btn-primary" onclick="activateNotarySignatureTool()"><i class="fas fa-file-signature"></i> Sign (Notary)</div>
<div class="btn btn-primary" onclick="activateTextTool()"><i class="fas fa-font"></i> Add Text</div> <div class="btn btn-primary" onclick="activateTextTool()"><i class="fas fa-font"></i> Add Text</div>
<div class="btn btn-primary" onclick="activateNotaryCertificateTool()"><i class="fas fa-sticky-note"></i> Add Certificate</div>
<div class="btn btn-primary" onclick="disableGuideBox()">Cancel</div> <div class="btn btn-primary" onclick="disableGuideBox()">Cancel</div>
</div> </div>
<div class="btn-group mb-2" role="group" aria-label="Fourth group"> <div class="btn-group mb-2" role="group" aria-label="Fourth group">
@ -167,10 +199,12 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
<script src="node_modules/signature_pad/dist/signature_pad.umd.min.js"></script> <script src="node_modules/signature_pad/dist/signature_pad.umd.min.js"></script>
<script src="js/kbpgp-2.1.15.js"></script> <script src="js/kbpgp-2.1.15.js"></script>
<script src="js/svg-to-image.js"></script> <script src="js/svg-to-image.js"></script>
<script src="js/data.js"></script>
<script src="js/util.js"></script> <script src="js/util.js"></script>
<script src="js/storage.js"></script> <script src="js/storage.js"></script>
<script src="js/filesystem.js"></script> <script src="js/filesystem.js"></script>
<script src="js/crypto.js"></script> <script src="js/crypto.js"></script>
<script src="js/certbuilder.js"></script>
<script src="js/drawtools.js"></script> <script src="js/drawtools.js"></script>
<script src="js/pdf.js"></script> <script src="js/pdf.js"></script>
<script src="js/main.js"></script> <script src="js/main.js"></script>

61
src/js/certbuilder.js Normal file
View File

@ -0,0 +1,61 @@
/*
* Copyright 2021 Netsyms Technologies.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
function getCertificateSvg(callback) {
var path = getStorage("notary_state") + "/generic.svg";
var act = $("#certificateBuilderModal #cert_act option:selected").val();
if (act == "CERTIFIEDCOPYELECTRONIC") {
path = getStorage("notary_state") + "/certifiedcopyelectronic.svg";
}
getCertificateSvgWithValues(path, {
name: getStorage("notary_name"),
location: getStorage("notary_location"),
expires: getStorage("notary_expires"),
idnumber: getStorage("notary_idnumber"),
state: $("#certificateBuilderModal #cert_state option:selected").val(),
county: $("#certificateBuilderModal #cert_county").val(),
act: act,
date: formatTimestamp("F j, Y"),
signer: $("#certificateBuilderModal #cert_signer").val(),
pagecount: $("#page-canvas-container .page-canvas").length,
doctitle: pdfTitle == "" ? "(untitled)" : pdfTitle
}, callback);
}
function getCertificateSvgWithValues(path, values, callback) {
$.get("templates/certificates/" + path, {}, function (svg) {
svg = svg + "";
for (const key in values) {
svg = svg.replaceAll("[[[" + key.toUpperCase() + "]]]", values[key]);
}
callback(svg);
}, "text");
}
function initCertificateBuilder() {
/**
* Load state dropdown with default of notary state
*/
$("#cert_state").html("");
for (const abbrev in STATE_ABBREV) {
var selected = "";
if (abbrev == getStorage("notary_state").toUpperCase()) {
selected = " selected";
}
$("#cert_state").append("<option value=\"" + STATE_ABBREV[abbrev] + "\"" + selected + ">" + STATE_ABBREV[abbrev] + "</option>");
}
new bootstrap.Modal(document.getElementById('certificateBuilderModal')).show();
}
$("body").on("input change paste select", "#certificateBuilderModal input,#certificateBuilderModal select", function () {
getCertificateSvg(function (svg) {
$("#certificateBuilderModal #certificate-preview").attr("src", "data:image/svg+xml;base64," + btoa(svg));
});
});

61
src/js/data.js Normal file
View File

@ -0,0 +1,61 @@
/*
* Copyright 2021 Netsyms Technologies.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
const STATE_ABBREV = {
"AL": "Alabama",
"AK": "Alaska",
"AZ": "Arizona",
"AR": "Arkansas",
"CA": "California",
"CO": "Colorado",
"CT": "Connecticut",
"DE": "Delaware",
"DC": "District of Columbia",
"FL": "Florida",
"GA": "Georgia",
"HI": "Hawaii",
"ID": "Idaho",
"IL": "Illinois",
"IN": "Indiana",
"IA": "Iowa",
"KS": "Kansas",
"KY": "Kentucky",
"LA": "Louisiana",
"ME": "Maine",
"MD": "Maryland",
"MA": "Massachusetts",
"MI": "Michigan",
"MN": "Minnesota",
"MS": "Mississippi",
"MO": "Missouri",
"MT": "Montana",
"NE": "Nebraska",
"NV": "Nevada",
"NH": "New Hampshire",
"NJ": "New Jersey",
"NM": "New Mexico",
"NY": "New York",
"NC": "North Carolina",
"ND": "North Dakota",
"OH": "Ohio",
"OK": "Oklahoma",
"OR": "Oregon",
"PA": "Pennsylvania",
"RI": "Rhode Island",
"SC": "South Carolina",
"SD": "South Dakota",
"TN": "Tennessee",
"TX": "Texas",
"UT": "Utah",
"VT": "Vermont",
"VA": "Virginia",
"WA": "Washington",
"WV": "West Virginia",
"WI": "Wisconsin",
"WY": "Wyoming"
};

View File

@ -90,6 +90,23 @@ function activateNotarySignatureTool() {
}); });
} }
function activateNotaryCertificateTool() {
initCertificateBuilder();
certificateBuilderCallback = function () {
getCertificateSvg(function (svg) {
svgToImage(svg, function (err, image) {
if (err) {
console.error(err);
return;
}
activeDrawImage = image;
enableGuideBox(image);
});
});
};
}
function activateClientSignaturePad() { function activateClientSignaturePad() {
initSignaturePad(); initSignaturePad();
signaturePadCallback = function () { signaturePadCallback = function () {

View File

@ -11,14 +11,27 @@ var pdfPageScale = 3;
var pdfAssumedDPI = 72; var pdfAssumedDPI = 72;
var pdfDoc = null; var pdfDoc = null;
var pageNumber = 0; var pageNumber = 0;
var pdfTitle = "";
function addPDF() { function addPDF() {
openFileDialog(function (path) { openFileDialog(function (path) {
var filedata = getFileAsUint8Array(path); var filedata = getFileAsUint8Array(path);
// Get filename
// https://stackoverflow.com/a/424006
pdfTitle = path.split('\\').pop().split('/').pop();
pdfjsLib.getDocument(filedata).promise.then(function (pdfDoc_) { pdfjsLib.getDocument(filedata).promise.then(function (pdfDoc_) {
pdfDoc = pdfDoc_; pdfDoc = pdfDoc_;
pdfDoc.getMetadata().then(function (meta) {
if (typeof meta.contentDispositionFilename == "string") {
pdfTitle = meta.contentDispositionFilename;
}
}).catch(function (err) {
console.log('Error getting PDF metadata: ', err);
});
renderAllPages(pdfDoc); renderAllPages(pdfDoc);
pdfZoom("fitwidth"); pdfZoom("fitwidth");
// Initial/first page rendering // Initial/first page rendering

View File

@ -0,0 +1,360 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="6in"
height="4in"
version="1.1"
viewBox="0 0 152.4 101.6"
id="svg94"
sodipodi:docname="certifiedcopyelectronic.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata98">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1013"
id="namedview96"
showgrid="false"
inkscape:zoom="1.7383042"
inkscape:cx="235.38315"
inkscape:cy="172.54422"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg94" />
<defs
id="defs4">
<path
id="b"
d="m4.3999 289.29a9.9893 9.9893 0 0 0 8.651 4.9947 9.9893 9.9893 0 0 0 8.651-4.9947"
fill="none" />
<path
id="a"
d="m4.9972 280.6a9.2996 10.003 0 0 1 8.0537-5.0017 9.2996 10.003 0 0 1 8.0537 5.0017"
fill="none" />
</defs>
<rect
x="3.5784"
y="3.44"
width="145.24"
height="94.724"
rx=".52917"
ry=".52917"
fill="none"
stroke="#000"
stroke-width=".52624"
id="rect6" />
<text
x="43.296432"
y="13.543543"
fill="#000000"
font-family="Ubuntu"
font-size="5.6133px"
letter-spacing=".26312px"
stroke-width=".26312px"
word-spacing="0px"
style="line-height:100%"
xml:space="preserve"
id="text10"><tspan
x="43.296432"
y="13.543543"
font-size="5.6133px"
stroke-width=".26312px"
id="tspan8">NOTARIAL CERTIFICATE</tspan></text>
<g
transform="translate(8.2522 -218.01)"
id="g72">
<rect
x=".24462"
y="271.84"
width="63.011"
height="24.911"
fill="none"
stroke="#000"
stroke-width=".48924"
id="rect12" />
<text
x="44.025459"
y="275.92871"
fill="#000000"
font-family="'Ubuntu Condensed'"
font-size="3.5278px"
letter-spacing=".052917px"
stroke-width=".26458px"
text-align="center"
text-anchor="middle"
word-spacing="0px"
style="line-height:89.99999762%"
xml:space="preserve"
id="text28"><tspan
x="44.051918"
y="275.92871"
text-align="center"
style="line-height:89.99999762%"
id="tspan14">[[[NAME]]]</tspan><tspan
x="44.051918"
y="279.1037"
text-align="center"
style="line-height:89.99999762%"
id="tspan16">Notary Public for the</tspan><tspan
x="44.051918"
y="282.27872"
text-align="center"
style="line-height:89.99999762%"
id="tspan18">State of Montana</tspan><tspan
x="44.051918"
y="285.4537"
text-align="center"
style="line-height:89.99999762%"
id="tspan20">Residing at</tspan><tspan
x="44.051918"
y="288.62872"
text-align="center"
style="line-height:89.99999762%"
id="tspan22">[[[LOCATION]]]</tspan><tspan
x="44.051918"
y="291.80371"
text-align="center"
style="line-height:89.99999762%"
id="tspan24">My Commission Expires</tspan><tspan
x="44.051918"
y="294.9787"
text-align="center"
style="line-height:89.99999762%"
id="tspan26">[[[EXPIRES]]]</tspan></text>
<g
transform="translate(1.2654e-7 -.016449)"
font-family="Ubuntu"
letter-spacing=".052917px"
stroke-width=".26458px"
text-anchor="middle"
word-spacing="0px"
id="g38">
<text
x="13.02184"
y="287.62936"
font-size="3.5278px"
text-align="center"
style="line-height:100%"
xml:space="preserve"
id="text32"><tspan
x="13.048299"
y="287.62936"
font-size="3.5278px"
letter-spacing=".052917px"
stroke-width=".26458px"
text-align="center"
text-anchor="middle"
id="tspan30">SEAL</tspan></text>
<text
x="12.974876"
y="282.86688"
font-size="2.4694px"
text-align="center"
style="line-height:100%"
xml:space="preserve"
id="text36"><tspan
x="13.001334"
y="282.86688"
font-size="2.4694px"
letter-spacing=".052917px"
stroke-width=".26458px"
text-align="center"
text-anchor="middle"
id="tspan34">Notarial</tspan></text>
</g>
<g
fill="none"
id="g50">
<circle
cx="13.051"
cy="284.3"
r="7.362"
stroke="#000"
stroke-dasharray="0.254, 0.254"
stroke-width=".254"
id="circle40" />
<g
stroke="#000"
id="g46">
<circle
cx="13.051"
cy="284.3"
r="11.139"
stroke-width=".254"
id="circle42" />
<circle
cx="13.051"
cy="284.3"
r="11.301"
stroke-dasharray="0.762, 0.381"
stroke-width=".381"
id="circle44" />
</g>
<path
d="m4.3999 289.29a9.9893 9.9893 0 0 0 8.651 4.9947 9.9893 9.9893 0 0 0 8.651-4.9947"
id="path48" />
</g>
<text
transform="rotate(-1.5305,13.012,288.47)"
fill="#000000"
font-family="'Ubuntu Condensed'"
font-size="2.8222px"
letter-spacing=".13229px"
stroke-width=".26458px"
text-align="center"
text-anchor="middle"
word-spacing="0px"
style="line-height:100%"
xml:space="preserve"
id="text56"><textPath
startOffset="50%"
xlink:href="#b"
id="textPath54"><tspan
font-family="'Ubuntu Condensed'"
font-size="2.8222px"
letter-spacing=".13229px"
stroke-width=".26458px"
text-align="center"
text-anchor="middle"
id="tspan52">State of Montana</tspan></textPath></text>
<text
transform="rotate(1.0275,-16.556,287.48)"
x="0.28497145"
fill="#000000"
font-family="'Ubuntu Condensed'"
font-size="2.8222px"
letter-spacing=".13229px"
stroke-width=".26458px"
text-align="center"
text-anchor="middle"
word-spacing="0px"
style="line-height:100%"
xml:space="preserve"
id="text62"><textPath
startOffset="50%"
xlink:href="#a"
id="textPath60"><tspan
font-family="'Ubuntu Condensed'"
font-size="2.8222px"
letter-spacing=".13229px"
stroke-width=".26458px"
text-align="center"
text-anchor="middle"
id="tspan58">[[[NAME]]]</tspan></textPath></text>
<path
d="m4.9972 280.6a9.2996 10.003 0 0 1 8.0537-5.0017 9.2996 10.003 0 0 1 8.0537 5.0017"
fill="none"
id="path64" />
<g
transform="translate(.064683 .27)"
stroke="#000"
stroke-width=".254"
id="g70">
<path
transform="matrix(.60047 -.042277 .042277 .60047 -3.9596 113.82)"
d="m-5.6196 282.72-0.77787 0.6826 0.12132 1.0278-0.88957-0.52886-0.93997 0.43298 0.22809-1.0094-0.70226-0.76017 1.0305-0.095 0.50595-0.90279 0.40882 0.95073z"
id="path66" />
<path
transform="matrix(.60047 -.042277 .042277 .60047 14.561 113.82)"
d="m-5.6196 282.72-0.77787 0.6826 0.12132 1.0278-0.88957-0.52886-0.93997 0.43298 0.22809-1.0094-0.70226-0.76017 1.0305-0.095 0.50595-0.90279 0.40882 0.95073z"
id="path68" />
</g>
</g>
<text
id="text78"
xml:space="preserve"
style="font-size:3.52780008px;line-height:120.00000477%;font-family:Ubuntu;letter-spacing:0.26458001px;word-spacing:0px;stroke-width:0.26458001px"
font-size="3.5278px"
y="20.984198"
x="8.1357985"><tspan
id="tspan74"
style="line-height:120.00000477%"
y="20.984198"
x="8.1357985">State of [[[STATE]]]</tspan><tspan
id="tspan76"
style="line-height:120.00000477%"
y="25.217531"
x="8.1357985">County of [[[COUNTY]]]</tspan></text>
<text
id="text82"
xml:space="preserve"
style="font-size:3.52780008px;line-height:0.25;font-family:Ubuntu;letter-spacing:0.26458001px;word-spacing:0px;stroke-width:0.26458001px"
font-size="3.5278px"
y="35.60997"
x="8.1957703"><tspan
id="tspan80"
style="line-height:0.25"
y="35.60997"
x="8.1957703" /></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.52777767px;line-height:120.00000477%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0.26458332px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="8.1005211"
y="32.026829"
id="text934"><tspan
sodipodi:role="line"
id="tspan932"
x="8.1005211"
y="32.026829"
style="line-height:120.00000477%;stroke-width:0.26458332px">I certify that this record, titled [[[DOCTITLE]]]</tspan><tspan
sodipodi:role="line"
x="8.1005211"
y="36.260162"
style="line-height:120.00000477%;stroke-width:0.26458332px"
id="tspan936">and consisting of [[[PAGECOUNT]]] pages is a true and correct copy of an</tspan><tspan
sodipodi:role="line"
x="8.1005211"
y="40.493496"
style="line-height:120.00000477%;stroke-width:0.26458332px"
id="tspan940">electronic record printed directly from the electronic file by me</tspan><tspan
sodipodi:role="line"
x="8.1005211"
y="44.72683"
style="line-height:120.00000477%;stroke-width:0.26458332px"
id="tspan942">on [[[DATE]]].</tspan></text>
<rect
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.31908524;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect863"
width="57.991142"
height="0.5534333"
x="80.822304"
y="73.140518"
rx="0.52916932"
ry="0.52916932" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;line-height:100%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0.13229167px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="97.82267"
y="76.746086"
id="text867"><tspan
sodipodi:role="line"
id="tspan865"
x="97.82267"
y="76.746086"
style="font-size:2.46944451px;letter-spacing:0.13229167px;stroke-width:0.26458332px">(notarial signature)</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1,359 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="6in"
height="4in"
version="1.1"
viewBox="0 0 152.4 101.6"
id="svg94"
sodipodi:docname="generic.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<metadata
id="metadata98">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1013"
id="namedview96"
showgrid="false"
inkscape:zoom="1.7383042"
inkscape:cx="347.49625"
inkscape:cy="41.194218"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg94" />
<defs
id="defs4">
<path
id="b"
d="m4.3999 289.29a9.9893 9.9893 0 0 0 8.651 4.9947 9.9893 9.9893 0 0 0 8.651-4.9947"
fill="none" />
<path
id="a"
d="m4.9972 280.6a9.2996 10.003 0 0 1 8.0537-5.0017 9.2996 10.003 0 0 1 8.0537 5.0017"
fill="none" />
</defs>
<rect
x="3.5784"
y="3.44"
width="145.24"
height="94.724"
rx=".52917"
ry=".52917"
fill="none"
stroke="#000"
stroke-width=".52624"
id="rect6" />
<text
x="43.296432"
y="13.543543"
fill="#000000"
font-family="Ubuntu"
font-size="5.6133px"
letter-spacing=".26312px"
stroke-width=".26312px"
word-spacing="0px"
style="line-height:100%"
xml:space="preserve"
id="text10"><tspan
x="43.296432"
y="13.543543"
font-size="5.6133px"
stroke-width=".26312px"
id="tspan8">NOTARIAL CERTIFICATE</tspan></text>
<g
transform="translate(8.2522 -218.01)"
id="g72">
<rect
x=".24462"
y="271.84"
width="63.011"
height="24.911"
fill="none"
stroke="#000"
stroke-width=".48924"
id="rect12" />
<text
x="44.025459"
y="275.92871"
fill="#000000"
font-family="'Ubuntu Condensed'"
font-size="3.5278px"
letter-spacing=".052917px"
stroke-width=".26458px"
text-align="center"
text-anchor="middle"
word-spacing="0px"
style="line-height:89.99999762%"
xml:space="preserve"
id="text28"><tspan
x="44.051918"
y="275.92871"
text-align="center"
style="line-height:89.99999762%"
id="tspan14">[[[NAME]]]</tspan><tspan
x="44.051918"
y="279.1037"
text-align="center"
style="line-height:89.99999762%"
id="tspan16">Notary Public for the</tspan><tspan
x="44.051918"
y="282.27872"
text-align="center"
style="line-height:89.99999762%"
id="tspan18">State of Montana</tspan><tspan
x="44.051918"
y="285.4537"
text-align="center"
style="line-height:89.99999762%"
id="tspan20">Residing at</tspan><tspan
x="44.051918"
y="288.62872"
text-align="center"
style="line-height:89.99999762%"
id="tspan22">[[[LOCATION]]]</tspan><tspan
x="44.051918"
y="291.80371"
text-align="center"
style="line-height:89.99999762%"
id="tspan24">My Commission Expires</tspan><tspan
x="44.051918"
y="294.9787"
text-align="center"
style="line-height:89.99999762%"
id="tspan26">[[[EXPIRES]]]</tspan></text>
<g
transform="translate(1.2654e-7 -.016449)"
font-family="Ubuntu"
letter-spacing=".052917px"
stroke-width=".26458px"
text-anchor="middle"
word-spacing="0px"
id="g38">
<text
x="13.02184"
y="287.62936"
font-size="3.5278px"
text-align="center"
style="line-height:100%"
xml:space="preserve"
id="text32"><tspan
x="13.048299"
y="287.62936"
font-size="3.5278px"
letter-spacing=".052917px"
stroke-width=".26458px"
text-align="center"
text-anchor="middle"
id="tspan30">SEAL</tspan></text>
<text
x="12.974876"
y="282.86688"
font-size="2.4694px"
text-align="center"
style="line-height:100%"
xml:space="preserve"
id="text36"><tspan
x="13.001334"
y="282.86688"
font-size="2.4694px"
letter-spacing=".052917px"
stroke-width=".26458px"
text-align="center"
text-anchor="middle"
id="tspan34">Notarial</tspan></text>
</g>
<g
fill="none"
id="g50">
<circle
cx="13.051"
cy="284.3"
r="7.362"
stroke="#000"
stroke-dasharray="0.254, 0.254"
stroke-width=".254"
id="circle40" />
<g
stroke="#000"
id="g46">
<circle
cx="13.051"
cy="284.3"
r="11.139"
stroke-width=".254"
id="circle42" />
<circle
cx="13.051"
cy="284.3"
r="11.301"
stroke-dasharray="0.762, 0.381"
stroke-width=".381"
id="circle44" />
</g>
<path
d="m4.3999 289.29a9.9893 9.9893 0 0 0 8.651 4.9947 9.9893 9.9893 0 0 0 8.651-4.9947"
id="path48" />
</g>
<text
transform="rotate(-1.5305,13.012,288.47)"
fill="#000000"
font-family="'Ubuntu Condensed'"
font-size="2.8222px"
letter-spacing=".13229px"
stroke-width=".26458px"
text-align="center"
text-anchor="middle"
word-spacing="0px"
style="line-height:100%"
xml:space="preserve"
id="text56"><textPath
startOffset="50%"
xlink:href="#b"
id="textPath54"><tspan
font-family="'Ubuntu Condensed'"
font-size="2.8222px"
letter-spacing=".13229px"
stroke-width=".26458px"
text-align="center"
text-anchor="middle"
id="tspan52">State of Montana</tspan></textPath></text>
<text
transform="rotate(1.0275,-16.556,287.48)"
x="0.28497145"
fill="#000000"
font-family="'Ubuntu Condensed'"
font-size="2.8222px"
letter-spacing=".13229px"
stroke-width=".26458px"
text-align="center"
text-anchor="middle"
word-spacing="0px"
style="line-height:100%"
xml:space="preserve"
id="text62"><textPath
startOffset="50%"
xlink:href="#a"
id="textPath60"><tspan
font-family="'Ubuntu Condensed'"
font-size="2.8222px"
letter-spacing=".13229px"
stroke-width=".26458px"
text-align="center"
text-anchor="middle"
id="tspan58">[[[NAME]]]</tspan></textPath></text>
<path
d="m4.9972 280.6a9.2996 10.003 0 0 1 8.0537-5.0017 9.2996 10.003 0 0 1 8.0537 5.0017"
fill="none"
id="path64" />
<g
transform="translate(.064683 .27)"
stroke="#000"
stroke-width=".254"
id="g70">
<path
transform="matrix(.60047 -.042277 .042277 .60047 -3.9596 113.82)"
d="m-5.6196 282.72-0.77787 0.6826 0.12132 1.0278-0.88957-0.52886-0.93997 0.43298 0.22809-1.0094-0.70226-0.76017 1.0305-0.095 0.50595-0.90279 0.40882 0.95073z"
id="path66" />
<path
transform="matrix(.60047 -.042277 .042277 .60047 14.561 113.82)"
d="m-5.6196 282.72-0.77787 0.6826 0.12132 1.0278-0.88957-0.52886-0.93997 0.43298 0.22809-1.0094-0.70226-0.76017 1.0305-0.095 0.50595-0.90279 0.40882 0.95073z"
id="path68" />
</g>
</g>
<g
fill="#000000"
font-family="Ubuntu"
letter-spacing=".26458px"
stroke-width=".26458px"
word-spacing="0px"
id="g92">
<text
x="8.1357985"
y="20.984198"
font-size="3.5278px"
style="line-height:120.00000477%"
xml:space="preserve"
id="text78"><tspan
x="8.1357985"
y="20.984198"
style="line-height:120.00000477%"
id="tspan74">State of [[[STATE]]]</tspan><tspan
x="8.1357985"
y="25.217531"
style="line-height:120.00000477%"
id="tspan76">County of [[[COUNTY]]]</tspan></text>
<text
x="8.1957703"
y="35.60997"
font-size="3.5278px"
style="line-height:120.00000477%"
xml:space="preserve"
id="text84"><tspan
x="8.1957703"
y="35.60997"
style="line-height:120.00000477%"
id="tspan80">This electronic record was [[[ACT]]] before me on [[[DATE]]]</tspan><tspan
x="8.1957703"
y="39.843304"
style="line-height:120.00000477%"
id="tspan82">by [[[SIGNER]]].</tspan></text>
<text
x="7.1416435"
y="92.167633"
font-size="2.8222px"
style="line-height:100%"
xml:space="preserve"
id="text90"><tspan
x="7.1416435"
y="92.167633"
id="tspan86">This PDF file has a PGP cryptographic signature appended. Changing or saving the file will</tspan><tspan
x="7.1416435"
y="94.989853"
id="tspan88">remove the signature. To verify signature, go to https://ntsm.io/enotary.</tspan></text>
</g>
<rect
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.31908524;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect863"
width="57.991142"
height="0.55343336"
x="81.434898"
y="73.655464"
rx="0.52916932"
ry="0.52916932" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;line-height:100%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0.13229169px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="98.435272"
y="77.261032"
id="text867"><tspan
sodipodi:role="line"
id="tspan865"
x="98.435272"
y="77.261032"
style="font-size:2.46944451px;letter-spacing:0.13229169px;stroke-width:0.26458332px">(notarial signature)</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB