annotate client/src/components/Pdftool.vue @ 2221:74c7d84f93d7 pdf-export

PDF generation: Don't change template on form changes. Selecting a template also changes the other form fields to the according values of the template. The bahavior was the same in the other direction. If you change something in the form, a matching template was automatically selected. When there is no matching template, no template is selected which leads to problems in the PDF generation. To make overriding template values possible without unselecting the current template, this behavior was removed.
author Markus Kottlaender <markus@intevation.de>
date Mon, 11 Feb 2019 10:26:03 +0100
parents d926292d81b6
children 318da99d406a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
1 <template>
1480
9b81ac91a43e fix: linting
Thomas Junk <thomas.junk@intevation.de>
parents: 1433
diff changeset
2 <div
9b81ac91a43e fix: linting
Thomas Junk <thomas.junk@intevation.de>
parents: 1433
diff changeset
3 :class="[
9b81ac91a43e fix: linting
Thomas Junk <thomas.junk@intevation.de>
parents: 1433
diff changeset
4 'box ui-element rounded bg-white text-nowrap',
9b81ac91a43e fix: linting
Thomas Junk <thomas.junk@intevation.de>
parents: 1433
diff changeset
5 { expanded: showPdfTool }
9b81ac91a43e fix: linting
Thomas Junk <thomas.junk@intevation.de>
parents: 1433
diff changeset
6 ]"
9b81ac91a43e fix: linting
Thomas Junk <thomas.junk@intevation.de>
parents: 1433
diff changeset
7 >
1361
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
8 <div style="width: 20rem">
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
9 <h6 class="mb-0 py-2 px-3 border-bottom d-flex align-items-center">
1876
e53924abb4a2 client: export some elements to pdf
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1874
diff changeset
10 <font-awesome-icon icon="file-pdf" class="mr-2"></font-awesome-icon>
e53924abb4a2 client: export some elements to pdf
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1874
diff changeset
11 <translate>Generate PDF</translate>
1361
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
12 <font-awesome-icon
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
13 icon="times"
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
14 class="ml-auto text-muted"
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
15 @click="$store.commit('application/showPdfTool', false)"
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
16 ></font-awesome-icon>
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
17 </h6>
2112
8c0a0f237c2d improved behavior of pdf generation form
Markus Kottlaender <markus@intevation.de>
parents: 2111
diff changeset
18 <div class="p-3 text-left">
2114
910c21ea531a linting
Thomas Junk <thomas.junk@intevation.de>
parents: 2112
diff changeset
19 <select
910c21ea531a linting
Thomas Junk <thomas.junk@intevation.de>
parents: 2112
diff changeset
20 @change="applyTemplateToForm"
910c21ea531a linting
Thomas Junk <thomas.junk@intevation.de>
parents: 2112
diff changeset
21 v-model="form.template"
910c21ea531a linting
Thomas Junk <thomas.junk@intevation.de>
parents: 2112
diff changeset
22 class="form-control d-block mb-2 w-100 font-weight-bold"
910c21ea531a linting
Thomas Junk <thomas.junk@intevation.de>
parents: 2112
diff changeset
23 >
2124
af136b1a854e linting
Markus Kottlaender <markus@intevation.de>
parents: 2114
diff changeset
24 <option
2212
733cfc3db48a started pdf template administration
Markus Kottlaender <markus@intevation.de>
parents: 2207
diff changeset
25 v-for="template in pdfTemplates"
2214
5a4b0c85e7a8 values in template select are now the actual objects
Markus Kottlaender <markus@intevation.de>
parents: 2212
diff changeset
26 :value="template"
2124
af136b1a854e linting
Markus Kottlaender <markus@intevation.de>
parents: 2114
diff changeset
27 :key="template.name"
2114
910c21ea531a linting
Thomas Junk <thomas.junk@intevation.de>
parents: 2112
diff changeset
28 >
2124
af136b1a854e linting
Markus Kottlaender <markus@intevation.de>
parents: 2114
diff changeset
29 <translate>{{ template.name }}</translate>
af136b1a854e linting
Markus Kottlaender <markus@intevation.de>
parents: 2114
diff changeset
30 </option>
2112
8c0a0f237c2d improved behavior of pdf generation form
Markus Kottlaender <markus@intevation.de>
parents: 2111
diff changeset
31 </select>
2114
910c21ea531a linting
Thomas Junk <thomas.junk@intevation.de>
parents: 2112
diff changeset
32 <select
910c21ea531a linting
Thomas Junk <thomas.junk@intevation.de>
parents: 2112
diff changeset
33 v-model="form.format"
910c21ea531a linting
Thomas Junk <thomas.junk@intevation.de>
parents: 2112
diff changeset
34 class="form-control form-control-sm d-block mb-2 w-100"
910c21ea531a linting
Thomas Junk <thomas.junk@intevation.de>
parents: 2112
diff changeset
35 >
1635
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
36 <option value="landscape"><translate>landscape</translate></option>
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
37 <option value="portrait"><translate>portrait</translate></option>
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
38 </select>
2112
8c0a0f237c2d improved behavior of pdf generation form
Markus Kottlaender <markus@intevation.de>
parents: 2111
diff changeset
39 <div class="d-flex">
8c0a0f237c2d improved behavior of pdf generation form
Markus Kottlaender <markus@intevation.de>
parents: 2111
diff changeset
40 <div class="flex-fill mr-2">
2114
910c21ea531a linting
Thomas Junk <thomas.junk@intevation.de>
parents: 2112
diff changeset
41 <select
910c21ea531a linting
Thomas Junk <thomas.junk@intevation.de>
parents: 2112
diff changeset
42 v-model="form.resolution"
910c21ea531a linting
Thomas Junk <thomas.junk@intevation.de>
parents: 2112
diff changeset
43 class="form-control form-control-sm mb-2 d-block w-100"
910c21ea531a linting
Thomas Junk <thomas.junk@intevation.de>
parents: 2112
diff changeset
44 >
2220
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
45 <option value="80">
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
46 <translate>low resolution (80 dpi)</translate>
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
47 </option>
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
48 <option value="120">
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
49 <translate>medium resolution (120 dpi)</translate>
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
50 </option>
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
51 <option value="200">
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
52 <translate>high resolution (200 dpi)</translate>
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
53 </option>
2112
8c0a0f237c2d improved behavior of pdf generation form
Markus Kottlaender <markus@intevation.de>
parents: 2111
diff changeset
54 </select>
8c0a0f237c2d improved behavior of pdf generation form
Markus Kottlaender <markus@intevation.de>
parents: 2111
diff changeset
55 </div>
8c0a0f237c2d improved behavior of pdf generation form
Markus Kottlaender <markus@intevation.de>
parents: 2111
diff changeset
56 <div class="flex-fill ml-2">
2114
910c21ea531a linting
Thomas Junk <thomas.junk@intevation.de>
parents: 2112
diff changeset
57 <select
910c21ea531a linting
Thomas Junk <thomas.junk@intevation.de>
parents: 2112
diff changeset
58 v-model="form.paperSize"
910c21ea531a linting
Thomas Junk <thomas.junk@intevation.de>
parents: 2112
diff changeset
59 class="form-control form-control-sm mb-2 d-block w-100"
910c21ea531a linting
Thomas Junk <thomas.junk@intevation.de>
parents: 2112
diff changeset
60 >
2220
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
61 <option value="a4"><translate>A4</translate></option>
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
62 <option value="a3"><translate>A3</translate></option>
2112
8c0a0f237c2d improved behavior of pdf generation form
Markus Kottlaender <markus@intevation.de>
parents: 2111
diff changeset
63 </select>
8c0a0f237c2d improved behavior of pdf generation form
Markus Kottlaender <markus@intevation.de>
parents: 2111
diff changeset
64 </div>
8c0a0f237c2d improved behavior of pdf generation form
Markus Kottlaender <markus@intevation.de>
parents: 2111
diff changeset
65 </div>
1903
7247ac316cb7 client: pdf-gen: improve layout and ui
Bernhard Reiter <bernhard@intevation.de>
parents: 1897
diff changeset
66 <!--
1361
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
67 <small class="d-block my-2">
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
68 <input
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
69 type="radio"
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
70 id="pdfexport-downloadtype-download"
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
71 value="download"
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
72 v-model="form.downloadType"
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
73 selected
1480
9b81ac91a43e fix: linting
Thomas Junk <thomas.junk@intevation.de>
parents: 1433
diff changeset
74 />
1876
e53924abb4a2 client: export some elements to pdf
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1874
diff changeset
75 <label for="pdfexport-downloadtype-download" class="ml-1 mr-2">
e53924abb4a2 client: export some elements to pdf
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1874
diff changeset
76 <translate>Download</translate>
e53924abb4a2 client: export some elements to pdf
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1874
diff changeset
77 </label>
1361
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
78 <input
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
79 type="radio"
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
80 id="pdfexport-downloadtype-open"
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
81 value="open"
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
82 v-model="form.downloadType"
1480
9b81ac91a43e fix: linting
Thomas Junk <thomas.junk@intevation.de>
parents: 1433
diff changeset
83 />
1876
e53924abb4a2 client: export some elements to pdf
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1874
diff changeset
84 <label for="pdfexport-downloadtype-open" class="ml-1">
e53924abb4a2 client: export some elements to pdf
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1874
diff changeset
85 <translate>Open in new window</translate>
e53924abb4a2 client: export some elements to pdf
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1874
diff changeset
86 </label>
1361
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
87 </small>
1903
7247ac316cb7 client: pdf-gen: improve layout and ui
Bernhard Reiter <bernhard@intevation.de>
parents: 1897
diff changeset
88 -->
1361
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
89 <button
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
90 @click="download"
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
91 type="button"
2111
dd4e1f5f66b8 shortened vue binding syntax
Markus Kottlaender <markus@intevation.de>
parents: 2080
diff changeset
92 :disabled="!readyToGenerate"
2112
8c0a0f237c2d improved behavior of pdf generation form
Markus Kottlaender <markus@intevation.de>
parents: 2111
diff changeset
93 class="btn btn-sm btn-info d-block w-100 mt-2"
1480
9b81ac91a43e fix: linting
Thomas Junk <thomas.junk@intevation.de>
parents: 1433
diff changeset
94 >
9b81ac91a43e fix: linting
Thomas Junk <thomas.junk@intevation.de>
parents: 1433
diff changeset
95 <translate>Generate PDF</translate>
9b81ac91a43e fix: linting
Thomas Junk <thomas.junk@intevation.de>
parents: 1433
diff changeset
96 </button>
1361
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
97 </div>
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
98 </div>
1361
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
99 </div>
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
100 </template>
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
101
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
102 <script>
1362
ca33ad696594 remove the first empyty lines
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1361
diff changeset
103 /* This is Free Software under GNU Affero General Public License v >= 3.0
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
104 * without warranty, see README.md and license for details.
1361
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
105 *
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
106 * SPDX-License-Identifier: AGPL-3.0-or-later
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
107 * License-Filename: LICENSES/AGPL-3.0.txt
1361
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
108 *
1878
f030182f82f1 client: fix style warning for pdfexport
Bernhard Reiter <bernhard@intevation.de>
parents: 1876
diff changeset
109 * Copyright (C) 2018, 2019 by via donau
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
110 * – Österreichische Wasserstraßen-Gesellschaft mbH
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
111 * Software engineering by Intevation GmbH
1361
ea3a89a1813a remove trailing whitespace, add headers for Makefile, add the missed authors
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1299
diff changeset
112 *
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
113 * Author(s):
1635
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
114 * * Markus Kottländer <markus.kottlaender@intevation.de>
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
115 * * Bernhard E. Reiter <bernhard@intevation.de>
1878
f030182f82f1 client: fix style warning for pdfexport
Bernhard Reiter <bernhard@intevation.de>
parents: 1876
diff changeset
116 * * Fadi Abbud <fadi.abbud@intevation.de>
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
117 */
1931
8fb1b1a8ea85 client: pdf-gen: improve legend behaviour
Bernhard Reiter <bernhard@intevation.de>
parents: 1928
diff changeset
118 import { mapGetters, mapState } from "vuex";
1874
bad32adafef2 client: add real pdf generation with jspdf
Bernhard Reiter <bernhard@intevation.de>
parents: 1635
diff changeset
119 import jsPDF from "jspdf";
1887
3ed036adc80f client: pdf-gen: fix scale calculation
Bernhard Reiter <bernhard@intevation.de>
parents: 1886
diff changeset
120 import { getPointResolution } from "ol/proj.js";
1903
7247ac316cb7 client: pdf-gen: improve layout and ui
Bernhard Reiter <bernhard@intevation.de>
parents: 1897
diff changeset
121 import locale2 from "locale2";
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
122
1635
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
123 var paperSizes = {
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
124 // in millimeter, landscape [width, height]
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
125 a3: [420, 297],
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
126 a4: [297, 210]
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
127 };
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
128
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
129 export default {
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
130 name: "pdftool",
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
131 data() {
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
132 return {
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
133 form: {
2112
8c0a0f237c2d improved behavior of pdf generation form
Markus Kottlaender <markus@intevation.de>
parents: 2111
diff changeset
134 template: null,
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
135 format: "landscape",
1635
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
136 paperSize: "a4",
1881
f512cfb63e53 pdf-generation: add select box to pdf tool to choose the resolutions
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1879
diff changeset
137 downloadType: "download",
2220
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
138 resolution: "80"
1947
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
139 },
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
140 pdf: {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
141 doc: null,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
142 width: null,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
143 height: null
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
144 },
1947
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
145 logoImageForPDF: null, // a HTMLImageElement instance
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
146 readyToGenerate: true // if the user is allowed to press the button
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
147 };
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
148 },
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
149 computed: {
2212
733cfc3db48a started pdf template administration
Markus Kottlaender <markus@intevation.de>
parents: 2207
diff changeset
150 ...mapState("application", ["showPdfTool", "logoForPDF", "pdfTemplates"]),
2137
a31c9fa47ab8 client: pdf-gen: add bottleneck details
Bernhard Reiter <bernhard@intevation.de>
parents: 2124
diff changeset
151 ...mapState("bottlenecks", ["selectedBottleneck", "selectedSurvey"]),
1928
76ca071cb006 client: pdf-gen: add legend graphic
Bernhard Reiter <bernhard@intevation.de>
parents: 1914
diff changeset
152 ...mapState("map", ["openLayersMap", "isolinesLegendImgDataURL"]),
1931
8fb1b1a8ea85 client: pdf-gen: improve legend behaviour
Bernhard Reiter <bernhard@intevation.de>
parents: 1928
diff changeset
153 ...mapGetters("map", ["getLayerByName"]),
1903
7247ac316cb7 client: pdf-gen: improve layout and ui
Bernhard Reiter <bernhard@intevation.de>
parents: 1897
diff changeset
154 ...mapState("user", ["user"])
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
155 },
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
156 methods: {
2112
8c0a0f237c2d improved behavior of pdf generation form
Markus Kottlaender <markus@intevation.de>
parents: 2111
diff changeset
157 // When a template is chosen from the dropdown, its propoerties are
8c0a0f237c2d improved behavior of pdf generation form
Markus Kottlaender <markus@intevation.de>
parents: 2111
diff changeset
158 // applied to the rest of the form.
8c0a0f237c2d improved behavior of pdf generation form
Markus Kottlaender <markus@intevation.de>
parents: 2111
diff changeset
159 applyTemplateToForm() {
2214
5a4b0c85e7a8 values in template select are now the actual objects
Markus Kottlaender <markus@intevation.de>
parents: 2212
diff changeset
160 if (this.form.template) {
5a4b0c85e7a8 values in template select are now the actual objects
Markus Kottlaender <markus@intevation.de>
parents: 2212
diff changeset
161 this.form.format = this.form.template.properties.format;
5a4b0c85e7a8 values in template select are now the actual objects
Markus Kottlaender <markus@intevation.de>
parents: 2212
diff changeset
162 this.form.paperSize = this.form.template.properties.paperSize;
5a4b0c85e7a8 values in template select are now the actual objects
Markus Kottlaender <markus@intevation.de>
parents: 2212
diff changeset
163 this.form.resolution = this.form.template.properties.resolution;
2112
8c0a0f237c2d improved behavior of pdf generation form
Markus Kottlaender <markus@intevation.de>
parents: 2111
diff changeset
164 }
8c0a0f237c2d improved behavior of pdf generation form
Markus Kottlaender <markus@intevation.de>
parents: 2111
diff changeset
165 },
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
166 download() {
2214
5a4b0c85e7a8 values in template select are now the actual objects
Markus Kottlaender <markus@intevation.de>
parents: 2212
diff changeset
167 let template = this.form.template;
5a4b0c85e7a8 values in template select are now the actual objects
Markus Kottlaender <markus@intevation.de>
parents: 2212
diff changeset
168
1947
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
169 // disable button while working on it
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
170 this.readyToGenerate = false;
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
171
1635
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
172 console.log(
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
173 "will generate pdf with",
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
174 this.form.paperSize,
1884
59ef76d83de7 client: pdf-gen: make scalebar dynamic
Bernhard Reiter <bernhard@intevation.de>
parents: 1883
diff changeset
175 this.form.format,
59ef76d83de7 client: pdf-gen: make scalebar dynamic
Bernhard Reiter <bernhard@intevation.de>
parents: 1883
diff changeset
176 this.form.resolution
1635
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
177 );
1883
76a6d334e681 Client: pdf-gen: refactor addScaleBar
Bernhard Reiter <bernhard@intevation.de>
parents: 1882
diff changeset
178
1635
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
179 if (this.form.format !== "portrait") {
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
180 // landscape, default
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
181 this.pdf.width = paperSizes[this.form.paperSize][0];
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
182 this.pdf.height = paperSizes[this.form.paperSize][1];
1635
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
183 } else {
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
184 // switch width and height
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
185 this.pdf.width = paperSizes[this.form.paperSize][1];
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
186 this.pdf.height = paperSizes[this.form.paperSize][0];
1635
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
187 }
1874
bad32adafef2 client: add real pdf generation with jspdf
Bernhard Reiter <bernhard@intevation.de>
parents: 1635
diff changeset
188
bad32adafef2 client: add real pdf generation with jspdf
Bernhard Reiter <bernhard@intevation.de>
parents: 1635
diff changeset
189 // FUTURE: consider margins
1635
ca48145dba9c client: improve pdf generation
Bernhard Reiter <bernhard@intevation.de>
parents: 1613
diff changeset
190
1884
59ef76d83de7 client: pdf-gen: make scalebar dynamic
Bernhard Reiter <bernhard@intevation.de>
parents: 1883
diff changeset
191 // dots per mm = dots per inch / (25.4 mm/inch)
59ef76d83de7 client: pdf-gen: make scalebar dynamic
Bernhard Reiter <bernhard@intevation.de>
parents: 1883
diff changeset
192 var pixelsPerMapMillimeter = this.form.resolution / 25.4;
59ef76d83de7 client: pdf-gen: make scalebar dynamic
Bernhard Reiter <bernhard@intevation.de>
parents: 1883
diff changeset
193 var mapSizeForPrint = [
59ef76d83de7 client: pdf-gen: make scalebar dynamic
Bernhard Reiter <bernhard@intevation.de>
parents: 1883
diff changeset
194 // in pixel
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
195 Math.round(this.pdf.width * pixelsPerMapMillimeter),
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
196 Math.round(this.pdf.height * pixelsPerMapMillimeter)
1884
59ef76d83de7 client: pdf-gen: make scalebar dynamic
Bernhard Reiter <bernhard@intevation.de>
parents: 1883
diff changeset
197 ];
59ef76d83de7 client: pdf-gen: make scalebar dynamic
Bernhard Reiter <bernhard@intevation.de>
parents: 1883
diff changeset
198
1883
76a6d334e681 Client: pdf-gen: refactor addScaleBar
Bernhard Reiter <bernhard@intevation.de>
parents: 1882
diff changeset
199 // generate PDF and open it
76a6d334e681 Client: pdf-gen: refactor addScaleBar
Bernhard Reiter <bernhard@intevation.de>
parents: 1882
diff changeset
200 // our units are milimeters; width 0 x height 0 is left upper corner
76a6d334e681 Client: pdf-gen: refactor addScaleBar
Bernhard Reiter <bernhard@intevation.de>
parents: 1882
diff changeset
201
76a6d334e681 Client: pdf-gen: refactor addScaleBar
Bernhard Reiter <bernhard@intevation.de>
parents: 1882
diff changeset
202 // Step 1 prepare and save current map extend
76a6d334e681 Client: pdf-gen: refactor addScaleBar
Bernhard Reiter <bernhard@intevation.de>
parents: 1882
diff changeset
203 // Then add callback "rendercomplete" for Step 3
76a6d334e681 Client: pdf-gen: refactor addScaleBar
Bernhard Reiter <bernhard@intevation.de>
parents: 1882
diff changeset
204 // which will generate the pdf and resets the map view
76a6d334e681 Client: pdf-gen: refactor addScaleBar
Bernhard Reiter <bernhard@intevation.de>
parents: 1882
diff changeset
205 // Step 2 which starts rendering a map with the necessary image size
76a6d334e681 Client: pdf-gen: refactor addScaleBar
Bernhard Reiter <bernhard@intevation.de>
parents: 1882
diff changeset
206
1874
bad32adafef2 client: add real pdf generation with jspdf
Bernhard Reiter <bernhard@intevation.de>
parents: 1635
diff changeset
207 var map = this.openLayersMap;
bad32adafef2 client: add real pdf generation with jspdf
Bernhard Reiter <bernhard@intevation.de>
parents: 1635
diff changeset
208 var mapSize = map.getSize(); // size in pixels of the map in the DOM
bad32adafef2 client: add real pdf generation with jspdf
Bernhard Reiter <bernhard@intevation.de>
parents: 1635
diff changeset
209 // Calculate the extent for the current view state and the passed size.
bad32adafef2 client: add real pdf generation with jspdf
Bernhard Reiter <bernhard@intevation.de>
parents: 1635
diff changeset
210 // The size is the pixel dimensions of the box into which the calculated
bad32adafef2 client: add real pdf generation with jspdf
Bernhard Reiter <bernhard@intevation.de>
parents: 1635
diff changeset
211 // extent should fit.
bad32adafef2 client: add real pdf generation with jspdf
Bernhard Reiter <bernhard@intevation.de>
parents: 1635
diff changeset
212 var mapExtent = map.getView().calculateExtent(mapSize);
1883
76a6d334e681 Client: pdf-gen: refactor addScaleBar
Bernhard Reiter <bernhard@intevation.de>
parents: 1882
diff changeset
213
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
214 this.pdf.doc = new jsPDF(this.form.format, "mm", this.form.paperSize);
1883
76a6d334e681 Client: pdf-gen: refactor addScaleBar
Bernhard Reiter <bernhard@intevation.de>
parents: 1882
diff changeset
215
1874
bad32adafef2 client: add real pdf generation with jspdf
Bernhard Reiter <bernhard@intevation.de>
parents: 1635
diff changeset
216 // set a callback for after the next complete rendering of the map
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
217 map.once("rendercomplete", event => {
1874
bad32adafef2 client: add real pdf generation with jspdf
Bernhard Reiter <bernhard@intevation.de>
parents: 1635
diff changeset
218 let canvas = event.context.canvas;
1887
3ed036adc80f client: pdf-gen: fix scale calculation
Bernhard Reiter <bernhard@intevation.de>
parents: 1886
diff changeset
219
3ed036adc80f client: pdf-gen: fix scale calculation
Bernhard Reiter <bernhard@intevation.de>
parents: 1886
diff changeset
220 // because we are using Web Mercator, a pixel represents
3ed036adc80f client: pdf-gen: fix scale calculation
Bernhard Reiter <bernhard@intevation.de>
parents: 1886
diff changeset
221 // a differently sizes spot depending on the place of the map.
3ed036adc80f client: pdf-gen: fix scale calculation
Bernhard Reiter <bernhard@intevation.de>
parents: 1886
diff changeset
222 // So we use a value calculated from the center of the current view.
1884
59ef76d83de7 client: pdf-gen: make scalebar dynamic
Bernhard Reiter <bernhard@intevation.de>
parents: 1883
diff changeset
223 let view = map.getView();
1887
3ed036adc80f client: pdf-gen: fix scale calculation
Bernhard Reiter <bernhard@intevation.de>
parents: 1886
diff changeset
224 let proj = view.getProjection();
3ed036adc80f client: pdf-gen: fix scale calculation
Bernhard Reiter <bernhard@intevation.de>
parents: 1886
diff changeset
225 let metersPerPixel = // average meters (reality) per pixel (map)
3ed036adc80f client: pdf-gen: fix scale calculation
Bernhard Reiter <bernhard@intevation.de>
parents: 1886
diff changeset
226 getPointResolution(proj, view.getResolution(), view.getCenter()) *
3ed036adc80f client: pdf-gen: fix scale calculation
Bernhard Reiter <bernhard@intevation.de>
parents: 1886
diff changeset
227 proj.getMetersPerUnit();
1897
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
228 // DEBUG console.log("metersPerPixel = ", metersPerPixel);
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
229
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
230 let scaleNominator = Math.round(
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
231 // the x in 1:x map scale
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
232 1000 * pixelsPerMapMillimeter * metersPerPixel
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
233 );
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
234 console.log("scaleNominator = ", scaleNominator);
1884
59ef76d83de7 client: pdf-gen: make scalebar dynamic
Bernhard Reiter <bernhard@intevation.de>
parents: 1883
diff changeset
235
1886
20fe31b4dd5d client: pdf-gen: use jpeg, add scale number.
Bernhard Reiter <bernhard@intevation.de>
parents: 1884
diff changeset
236 var data = canvas.toDataURL("image/jpeg");
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
237 this.pdf.doc.addImage(data, "JPEG", 0, 0);
1903
7247ac316cb7 client: pdf-gen: improve layout and ui
Bernhard Reiter <bernhard@intevation.de>
parents: 1897
diff changeset
238
2205
59c21dee6315 pdf-gen: improve pdftool to use value from template
Fadi Abbud <fadi.abbud@intevation.de>
parents: 2124
diff changeset
239 if (template) {
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
240 template.elements.forEach(e => {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
241 switch (e.type) {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
242 case "text": {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
243 this.addText(
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
244 e.position,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
245 e.offset,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
246 e.width,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
247 e.height,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
248 e.padding,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
249 e.fontSize,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
250 e.color,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
251 e.text
2205
59c21dee6315 pdf-gen: improve pdftool to use value from template
Fadi Abbud <fadi.abbud@intevation.de>
parents: 2124
diff changeset
252 );
59c21dee6315 pdf-gen: improve pdftool to use value from template
Fadi Abbud <fadi.abbud@intevation.de>
parents: 2124
diff changeset
253 break;
59c21dee6315 pdf-gen: improve pdftool to use value from template
Fadi Abbud <fadi.abbud@intevation.de>
parents: 2124
diff changeset
254 }
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
255 case "image": {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
256 this.addImage(
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
257 e.url,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
258 e.format,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
259 e.position,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
260 e.offset,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
261 e.width,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
262 e.height,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
263 e.border
2207
da902f0dac88 pdf-gen: add fixed coordinates and values
Fadi Abbud <fadi.abbud@intevation.de>
parents: 2205
diff changeset
264 );
2205
59c21dee6315 pdf-gen: improve pdftool to use value from template
Fadi Abbud <fadi.abbud@intevation.de>
parents: 2124
diff changeset
265 break;
59c21dee6315 pdf-gen: improve pdftool to use value from template
Fadi Abbud <fadi.abbud@intevation.de>
parents: 2124
diff changeset
266 }
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
267 case "bottleneck": {
2220
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
268 this.addBottleneckInfo(e.position, e.offset);
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
269 break;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
270 }
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
271 case "legend": {
2220
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
272 this.addLegend(e.position, e.offset);
2205
59c21dee6315 pdf-gen: improve pdftool to use value from template
Fadi Abbud <fadi.abbud@intevation.de>
parents: 2124
diff changeset
273 break;
59c21dee6315 pdf-gen: improve pdftool to use value from template
Fadi Abbud <fadi.abbud@intevation.de>
parents: 2124
diff changeset
274 }
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
275 case "scalebar": {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
276 this.addScaleBar(scaleNominator, e.position, e.offset);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
277 break;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
278 }
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
279 case "northarrow": {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
280 this.addNorthArrow(e.position, e.offset, e.size);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
281 break;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
282 }
2205
59c21dee6315 pdf-gen: improve pdftool to use value from template
Fadi Abbud <fadi.abbud@intevation.de>
parents: 2124
diff changeset
283 }
59c21dee6315 pdf-gen: improve pdftool to use value from template
Fadi Abbud <fadi.abbud@intevation.de>
parents: 2124
diff changeset
284 });
1928
76ca071cb006 client: pdf-gen: add legend graphic
Bernhard Reiter <bernhard@intevation.de>
parents: 1914
diff changeset
285
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
286 this.pdf.doc.save("map.pdf");
2205
59c21dee6315 pdf-gen: improve pdftool to use value from template
Fadi Abbud <fadi.abbud@intevation.de>
parents: 2124
diff changeset
287 }
1874
bad32adafef2 client: add real pdf generation with jspdf
Bernhard Reiter <bernhard@intevation.de>
parents: 1635
diff changeset
288 // reset to original size
bad32adafef2 client: add real pdf generation with jspdf
Bernhard Reiter <bernhard@intevation.de>
parents: 1635
diff changeset
289 map.setSize(mapSize);
bad32adafef2 client: add real pdf generation with jspdf
Bernhard Reiter <bernhard@intevation.de>
parents: 1635
diff changeset
290 map.getView().fit(mapExtent, { size: mapSize });
bad32adafef2 client: add real pdf generation with jspdf
Bernhard Reiter <bernhard@intevation.de>
parents: 1635
diff changeset
291
1947
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
292 // as we are done: re-enable button
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
293 this.readyToGenerate = true;
1874
bad32adafef2 client: add real pdf generation with jspdf
Bernhard Reiter <bernhard@intevation.de>
parents: 1635
diff changeset
294 });
bad32adafef2 client: add real pdf generation with jspdf
Bernhard Reiter <bernhard@intevation.de>
parents: 1635
diff changeset
295
bad32adafef2 client: add real pdf generation with jspdf
Bernhard Reiter <bernhard@intevation.de>
parents: 1635
diff changeset
296 // trigger rendering
1947
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
297 this.prepareRendering(function() {
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
298 map.setSize(mapSizeForPrint);
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
299 map.getView().fit(mapExtent, { size: mapSizeForPrint });
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
300 });
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
301 },
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
302 prepareRendering(callback) {
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
303 // call callback() once the preparations are done
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
304 this.logoImageForPDF = new Image();
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
305
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
306 this.logoImageForPDF.onload = function() {
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
307 callback();
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
308 };
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
309
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
310 if (this.logoForPDF) {
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
311 this.logoImageForPDF.src = this.logoForPDF;
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
312 } else {
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
313 this.logoImageForPDF.src = "/img/gemma-logo-for-pdf.png";
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
314 }
1876
e53924abb4a2 client: export some elements to pdf
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1874
diff changeset
315 },
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
316 addRoundedBox(x, y, w, h) {
1883
76a6d334e681 Client: pdf-gen: refactor addScaleBar
Bernhard Reiter <bernhard@intevation.de>
parents: 1882
diff changeset
317 // draws a rounded background box at (x,y) width x height
76a6d334e681 Client: pdf-gen: refactor addScaleBar
Bernhard Reiter <bernhard@intevation.de>
parents: 1882
diff changeset
318 // using jsPDF units
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
319 this.pdf.doc.setDrawColor(255, 255, 255);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
320 this.pdf.doc.setFillColor(255, 255, 255);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
321 this.pdf.doc.roundedRect(x, y, w, h, 3, 3, "FD");
1883
76a6d334e681 Client: pdf-gen: refactor addScaleBar
Bernhard Reiter <bernhard@intevation.de>
parents: 1882
diff changeset
322 },
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
323 addScaleBar(scaleNominator, position, offset) {
1897
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
324 // scaleNominator is the x in 1:x of the map scale
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
325
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
326 // hardcode maximal width for now
1933
1aa2921d8832 client: pdf-gen: make scalebar box size dynamic
Bernhard Reiter <bernhard@intevation.de>
parents: 1931
diff changeset
327 let maxWidth = 80; // in mm
1aa2921d8832 client: pdf-gen: make scalebar box size dynamic
Bernhard Reiter <bernhard@intevation.de>
parents: 1931
diff changeset
328
1897
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
329 // reduce width until we'll find a nice number for printing
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
330 // strategy:
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
331 // 1. check which unit prefix we shall use to get [10:10000[
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
332 // 2. using a mapping for the leading digit to get [1:10[
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
333 // 3. select a smaller number which is nicely dividable
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
334 // 4. scale up again to get length in paper mm and to be shown
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
335
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
336 // from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10#Polyfill
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
337 let log10 =
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
338 Math.log10 || // more precise, but unsupported by IE
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
339 function(x) {
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
340 return Math.log(x) * Math.LOG10E;
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
341 };
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
342
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
343 let maxLength = maxWidth * scaleNominator;
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
344
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
345 let unit = "mm";
1914
3d2b55d2d8a6 client: pdf-gen: fix scale bar calculation
Bernhard Reiter <bernhard@intevation.de>
parents: 1903
diff changeset
346 let unitConversionFactor = 1;
3d2b55d2d8a6 client: pdf-gen: fix scale bar calculation
Bernhard Reiter <bernhard@intevation.de>
parents: 1903
diff changeset
347 if (maxLength >= 1e7) {
3d2b55d2d8a6 client: pdf-gen: fix scale bar calculation
Bernhard Reiter <bernhard@intevation.de>
parents: 1903
diff changeset
348 // >= 10 km
1897
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
349 unit = "km";
1914
3d2b55d2d8a6 client: pdf-gen: fix scale bar calculation
Bernhard Reiter <bernhard@intevation.de>
parents: 1903
diff changeset
350 unitConversionFactor = 1e6;
3d2b55d2d8a6 client: pdf-gen: fix scale bar calculation
Bernhard Reiter <bernhard@intevation.de>
parents: 1903
diff changeset
351 } else if (maxLength >= 1e4) {
3d2b55d2d8a6 client: pdf-gen: fix scale bar calculation
Bernhard Reiter <bernhard@intevation.de>
parents: 1903
diff changeset
352 // >= 10 m
1897
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
353 unit = "m";
1914
3d2b55d2d8a6 client: pdf-gen: fix scale bar calculation
Bernhard Reiter <bernhard@intevation.de>
parents: 1903
diff changeset
354 unitConversionFactor = 1e3;
1897
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
355 }
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
356
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
357 maxLength /= unitConversionFactor;
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
358
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
359 // DEBUG console.log(maxLength, unit);
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
360 let unroundedLength = maxLength;
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
361 let numberOfDigits = Math.floor(log10(unroundedLength));
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
362 let factor = Math.pow(10, numberOfDigits);
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
363 let mapped = unroundedLength / factor;
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
364 // DEBUG console.log(mapped);
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
365
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
366 var length = Math.floor(maxLength); // just to have an upper limit
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
367
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
368 // manually only use numbers that are very nice to devide by 4
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
369 // note that this is taken into account for rounding later
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
370 if (mapped > 8) {
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
371 length = 8 * factor;
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
372 } else if (mapped > 4) {
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
373 length = 4 * factor;
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
374 } else if (mapped > 2) {
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
375 length = 2 * factor;
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
376 } else {
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
377 length = factor;
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
378 }
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
379
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
380 let size = (length * unitConversionFactor) / scaleNominator / 4;
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
381 let fullSize = size * 4;
1933
1aa2921d8832 client: pdf-gen: make scalebar box size dynamic
Bernhard Reiter <bernhard@intevation.de>
parents: 1931
diff changeset
382
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
383 // x/y defaults to offset for topleft corner (normal x/y coordinates)
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
384 let x = offset.x;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
385 let y = offset.y;
1933
1aa2921d8832 client: pdf-gen: make scalebar box size dynamic
Bernhard Reiter <bernhard@intevation.de>
parents: 1931
diff changeset
386
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
387 // if position is on the right, x needs to be calculate with pdf width and
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
388 // the size of the element
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
389 if (["topright", "bottomright"].indexOf(position) !== -1) {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
390 x = this.pdf.width - offset.x - fullSize - 8;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
391 }
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
392 if (["bottomright", "bottomleft"].indexOf(position) !== -1) {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
393 y = this.pdf.height - offset.y - 10;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
394 }
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
395
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
396 // to give the outer white box 4mm padding
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
397 let scaleBarX = x + 4;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
398 let scaleBarY = y + 5; // 5 because above the scalebar will be the numbers
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
399
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
400 // draw outer white box
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
401 this.addRoundedBox(x, y, fullSize + 8, 10);
1897
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
402
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
403 // draw first part of scalebar
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
404 this.pdf.doc.setDrawColor(0, 0, 0);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
405 this.pdf.doc.setFillColor(0, 0, 0);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
406 this.pdf.doc.rect(scaleBarX, scaleBarY, size, 1, "FD");
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
407
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
408 // draw second part of scalebar
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
409 this.pdf.doc.setDrawColor(0, 0, 0);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
410 this.pdf.doc.setFillColor(255, 255, 255);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
411 this.pdf.doc.rect(scaleBarX + size, scaleBarY, size, 1, "FD");
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
412
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
413 // draw third part of scalebar
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
414 this.pdf.doc.setDrawColor(0, 0, 0);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
415 this.pdf.doc.setFillColor(0, 0, 0);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
416 this.pdf.doc.rect(scaleBarX + size * 2, scaleBarY, size * 2, 1, "FD");
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
417
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
418 // draw numeric labels above scalebar
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
419 this.pdf.doc.setFontSize(5);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
420 this.pdf.doc.text(scaleBarX, scaleBarY - 1, "0");
1897
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
421 // /4 and could give 2.5. We still round, because of floating point arith
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
422 this.pdf.doc.text(
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
423 scaleBarX + size - 1,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
424 scaleBarY - 1,
1897
c78efb1ddb02 client: pdf-gen: improve scalebar to show nice values
Bernhard Reiter <bernhard@intevation.de>
parents: 1887
diff changeset
425 (Math.round((length * 10) / 4) / 10).toString()
1884
59ef76d83de7 client: pdf-gen: make scalebar dynamic
Bernhard Reiter <bernhard@intevation.de>
parents: 1883
diff changeset
426 );
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
427 this.pdf.doc.text(
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
428 scaleBarX + size * 2 - 2,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
429 scaleBarY - 1,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
430 Math.round(length / 2).toString()
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
431 );
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
432 this.pdf.doc.text(
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
433 scaleBarX + size * 4 - 4,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
434 scaleBarY - 1,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
435 Math.round(length).toString() + " " + unit
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
436 );
1876
e53924abb4a2 client: export some elements to pdf
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1874
diff changeset
437 },
e53924abb4a2 client: export some elements to pdf
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1874
diff changeset
438
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
439 addNorthArrow(position, offset, size) {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
440 // TODO: fix positioning
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
441 // x/y defaults to offset for topleft corner (normal x/y coordinates)
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
442 let x1 = offset.x;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
443 let y1 = offset.y;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
444
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
445 // if position is on the right, x needs to be calculate with pdf width and
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
446 // the size of the element
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
447 if (["topright", "bottomright"].indexOf(position) !== -1) {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
448 x1 = this.pdf.width - offset.x - size;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
449 }
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
450 if (["bottomright", "bottomleft"].indexOf(position) !== -1) {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
451 y1 = this.pdf.height - offset.y - size;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
452 }
2220
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
453
1876
e53924abb4a2 client: export some elements to pdf
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1874
diff changeset
454 var y2 = y1 + size * 3;
e53924abb4a2 client: export some elements to pdf
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1874
diff changeset
455 var x3 = x1 - size * 2;
e53924abb4a2 client: export some elements to pdf
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1874
diff changeset
456 var y3 = y1 + size * 5;
e53924abb4a2 client: export some elements to pdf
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1874
diff changeset
457 var x4 = x1 + size * 2;
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
458 // white triangle
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
459 this.pdf.doc.setFillColor(255, 255, 255);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
460 this.pdf.doc.setDrawColor(255, 255, 255);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
461 this.pdf.doc.triangle(
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
462 x3 - 0.8,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
463 y3 + 1.2,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
464 x1,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
465 y1 - 1.2,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
466 x1,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
467 y2 + 0.6,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
468 "F"
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
469 );
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
470 this.pdf.doc.triangle(
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
471 x1,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
472 y1 - 1.2,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
473 x1,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
474 y2 + 0.6,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
475 x4 + 0.8,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
476 y3 + 1.2,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
477 "F"
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
478 );
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
479
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
480 // north arrow
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
481 this.pdf.doc.setDrawColor(0, 0, 0);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
482 this.pdf.doc.setFillColor(255, 255, 255);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
483 this.pdf.doc.triangle(x3, y3, x1, y1, x1, y2, "FD");
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
484 this.pdf.doc.setFillColor(0, 0, 0);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
485 this.pdf.doc.triangle(x1, y1, x1, y2, x4, y3, "FD");
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
486 this.pdf.doc.setFontSize(size * 3.1);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
487 this.pdf.doc.setTextColor(255, 255, 255);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
488 this.pdf.doc.setFontStyle("bold");
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
489 this.pdf.doc.text(size < 3 ? x1 - 0.5 : x1 - 1.3, y3 + 1, "N");
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
490 this.pdf.doc.setFontSize(size * 3);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
491 this.pdf.doc.setTextColor(0, 0, 0);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
492 this.pdf.doc.setFontStyle("normal");
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
493 this.pdf.doc.text(size < 3 ? x1 - 0.5 : x1 - 1.3, y3 + 1, "N");
1876
e53924abb4a2 client: export some elements to pdf
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1874
diff changeset
494 },
e53924abb4a2 client: export some elements to pdf
Fadi Abbud <fadi.abbud@intevation.de>
parents: 1874
diff changeset
495 // add some text at specific coordinates and determine how many wrolds in single line
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
496 addText(position, offset, width, height, padding, fontSize, color, text) {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
497 // x/y defaults to offset for topleft corner (normal x/y coordinates)
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
498 let x = offset.x;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
499 let y = offset.y;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
500
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
501 // if position is on the right, x needs to be calculate with pdf width and
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
502 // the size of the element
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
503 if (["topright", "bottomright"].indexOf(position) !== -1) {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
504 x = this.pdf.width - offset.x - width - 8;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
505 }
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
506 if (["bottomright", "bottomleft"].indexOf(position) !== -1) {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
507 y = this.pdf.height - offset.y - 10;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
508 }
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
509
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
510 this.addRoundedBox(x, y, width, height);
2220
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
511
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
512 // replace placeholders
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
513 if (text.includes("{date}")) {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
514 text = text.replace("{date}", new Date().toLocaleString(locale2));
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
515 }
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
516 if (text.includes("{user}")) {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
517 text = text.replace("{user}", this.user);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
518 }
1947
4235fa8f59d7 clien: pdf-gen: load logo externally; add prepare step
Bernhard Reiter <bernhard@intevation.de>
parents: 1936
diff changeset
519
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
520 // split the incoming string to an array, each element is a string of words in a single line
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
521 var textLines = this.pdf.doc.splitTextToSize(text, width - 2 * padding);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
522 this.pdf.doc.setTextColor(color);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
523 this.pdf.doc.setFontSize(fontSize);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
524 this.pdf.doc.text(x + padding, y + padding, textLines);
1931
8fb1b1a8ea85 client: pdf-gen: improve legend behaviour
Bernhard Reiter <bernhard@intevation.de>
parents: 1928
diff changeset
525 },
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
526 addImage(url, format, position, offset, width, height, border) {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
527 // x/y defaults to offset for topleft corner (normal x/y coordinates)
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
528 let x = offset.x;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
529 let y = offset.y;
1931
8fb1b1a8ea85 client: pdf-gen: improve legend behaviour
Bernhard Reiter <bernhard@intevation.de>
parents: 1928
diff changeset
530
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
531 // if position is on the right, x needs to be calculate with pdf width and
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
532 // the size of the element
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
533 if (["topright", "bottomright"].indexOf(position) !== -1) {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
534 x = this.pdf.width - offset.x - width;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
535 }
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
536 if (["bottomright", "bottomleft"].indexOf(position) !== -1) {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
537 y = this.pdf.height - offset.y - height;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
538 }
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
539
2220
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
540 if (border) {
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
541 this.addRoundedBox(x, y, width, height);
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
542 }
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
543
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
544 let image = new Image();
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
545 image.src = url;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
546 this.pdf.doc.addImage(
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
547 image,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
548 x + border,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
549 y + border,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
550 width - 2 * border,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
551 height - 2 * border
2137
a31c9fa47ab8 client: pdf-gen: add bottleneck details
Bernhard Reiter <bernhard@intevation.de>
parents: 2124
diff changeset
552 );
a31c9fa47ab8 client: pdf-gen: add bottleneck details
Bernhard Reiter <bernhard@intevation.de>
parents: 2124
diff changeset
553 },
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
554 addLegend(position, offset) {
2220
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
555 if (
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
556 this.selectedBottleneck &&
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
557 this.getLayerByName("Bottleneck isolines").isVisible
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
558 ) {
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
559 // transforming into an HTMLImageElement only to find out
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
560 // the width x height of the legend image
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
561 // FUTURE: find a better way to get the width and height
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
562 let legendImage = new Image();
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
563 legendImage.src = this.isolinesLegendImgDataURL;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
564 let aspectRatio = legendImage.width / legendImage.height;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
565 let width = 54;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
566 let height = width / aspectRatio;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
567 let padding = 2;
2220
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
568
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
569 // x/y defaults to offset for topleft corner (normal x/y coordinates)
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
570 let x = offset.x;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
571 let y = offset.y;
2220
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
572
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
573 // if position is on the right, x needs to be calculate with pdf width and
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
574 // the size of the element
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
575 if (["topright", "bottomright"].indexOf(position) !== -1) {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
576 x = this.pdf.width - offset.x - width;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
577 }
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
578 if (["bottomright", "bottomleft"].indexOf(position) !== -1) {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
579 y = this.pdf.height - offset.y - height;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
580 }
2137
a31c9fa47ab8 client: pdf-gen: add bottleneck details
Bernhard Reiter <bernhard@intevation.de>
parents: 2124
diff changeset
581
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
582 this.addRoundedBox(x, y, width, height);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
583 this.pdf.doc.addImage(
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
584 legendImage,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
585 x + padding,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
586 y + padding,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
587 width - 2 * padding,
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
588 height - 2 * padding
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
589 );
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
590 }
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
591 },
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
592 addBottleneckInfo(position, offset) {
2220
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
593 if (
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
594 this.selectedBottleneck &&
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
595 this.getLayerByName("Bottleneck isolines").isVisible
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
596 ) {
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
597 let width = 54;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
598 let height = 13;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
599 let padding = 5;
2220
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
600
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
601 // x/y defaults to offset for topleft corner (normal x/y coordinates)
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
602 let x = offset.x;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
603 let y = offset.y;
2220
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
604
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
605 // if position is on the right, x needs to be calculate with pdf width and
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
606 // the size of the element
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
607 if (["topright", "bottomright"].indexOf(position) !== -1) {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
608 x = this.pdf.width - offset.x - width;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
609 }
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
610 if (["bottomright", "bottomleft"].indexOf(position) !== -1) {
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
611 y = this.pdf.height - offset.y - height;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
612 }
2137
a31c9fa47ab8 client: pdf-gen: add bottleneck details
Bernhard Reiter <bernhard@intevation.de>
parents: 2124
diff changeset
613
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
614 this.addRoundedBox(x, y, width, height);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
615
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
616 this.pdf.doc.setFont("times", "normal");
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
617 this.pdf.doc.setFontSize(9);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
618
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
619 let str, w;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
620
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
621 str = this.$gettext("Bottleneck") + ": ";
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
622 w = this.pdf.doc.getTextWidth(str);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
623 this.pdf.doc.setFontStyle("italic");
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
624 this.pdf.doc.text(x + padding, y + padding, str);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
625 str = this.selectedBottleneck;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
626 this.pdf.doc.setFontStyle("bold");
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
627 this.pdf.doc.text(x + padding + w, y + padding, str);
2220
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
628
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
629 str = this.$gettext("Survey date") + ": ";
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
630 w = this.pdf.doc.getTextWidth(str);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
631 this.pdf.doc.setFontStyle("italic");
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
632 this.pdf.doc.text(x + padding, y + padding + 3, str);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
633 str = this.selectedSurvey.date_info;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
634 this.pdf.doc.setFontStyle("normal");
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
635 this.pdf.doc.text(x + padding + w, y + padding + 3, str);
2220
d926292d81b6 PDF generation: changed form labels/option texts
Markus Kottlaender <markus@intevation.de>
parents: 2219
diff changeset
636
2218
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
637 str = this.$gettext("Ref gauge") + ": ";
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
638 w = this.pdf.doc.getTextWidth(str);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
639 this.pdf.doc.setFontStyle("italic");
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
640 this.pdf.doc.text(x + padding, y + padding + 6, str);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
641 str = this.selectedSurvey.gauge_objname;
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
642 this.pdf.doc.setFontStyle("normal");
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
643 this.pdf.doc.text(x + padding + w, y + padding + 6, str);
631ca0412db9 adjusted positioning of pdf elements
Markus Kottlaender <markus@intevation.de>
parents: 2215
diff changeset
644 }
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
645 }
2212
733cfc3db48a started pdf template administration
Markus Kottlaender <markus@intevation.de>
parents: 2207
diff changeset
646 },
733cfc3db48a started pdf template administration
Markus Kottlaender <markus@intevation.de>
parents: 2207
diff changeset
647 mounted() {
733cfc3db48a started pdf template administration
Markus Kottlaender <markus@intevation.de>
parents: 2207
diff changeset
648 this.$store.dispatch("application/loadPdfTemplates").then(() => {
2214
5a4b0c85e7a8 values in template select are now the actual objects
Markus Kottlaender <markus@intevation.de>
parents: 2212
diff changeset
649 this.form.template = this.pdfTemplates[0];
2212
733cfc3db48a started pdf template administration
Markus Kottlaender <markus@intevation.de>
parents: 2207
diff changeset
650 });
1272
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
651 }
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
652 };
bc55ffaeb639 cleaned up client/src directory
Markus Kottlaender <markus@intevation.de>
parents:
diff changeset
653 </script>