view client/src/components/Pdftool.vue @ 1928:76ca071cb006

client: pdf-gen: add legend graphic * Add a plain legend graphic to the right upper corner. Take a detour via a HTMLImageElement to get the aspect ration of the legend graphic and calculate the necessary size accordingly.
author Bernhard Reiter <bernhard@intevation.de>
date Mon, 21 Jan 2019 11:37:24 +0100
parents 3d2b55d2d8a6
children 8fb1b1a8ea85
line wrap: on
line source

<template>
  <div
    :class="[
      'box ui-element rounded bg-white text-nowrap',
      { expanded: showPdfTool }
    ]"
  >
    <div style="width: 20rem">
      <h6 class="mb-0 py-2 px-3 border-bottom d-flex align-items-center">
        <font-awesome-icon icon="file-pdf" class="mr-2"></font-awesome-icon>
        <translate>Generate PDF</translate>
        <font-awesome-icon
          icon="times"
          class="ml-auto text-muted"
          @click="$store.commit('application/showPdfTool', false)"
        ></font-awesome-icon>
      </h6>
      <div class="p-3">
        <b><translate>Choose format:</translate></b>
        <select v-model="form.format" class="form-control d-block w-100">
          <option value="landscape"><translate>landscape</translate></option>
          <option value="portrait"><translate>portrait</translate></option>
        </select>
        <select v-model="form.resolution" class="form-control d-block w-100">
          <option value="80">80 dpi</option>
          <option value="120">120 dpi</option>
          <option value="200">200 dpi</option>
        </select>
        <select v-model="form.paperSize" class="form-control d-block w-100">
          <option value="a3"><translate>ISO A3</translate></option>
          <option value="a4"><translate>ISO A4</translate></option>
        </select>
        <!--
        <small class="d-block my-2">
          <input
            type="radio"
            id="pdfexport-downloadtype-download"
            value="download"
            v-model="form.downloadType"
            selected
          />
          <label for="pdfexport-downloadtype-download" class="ml-1 mr-2">
            <translate>Download</translate>
          </label>
          <input
            type="radio"
            id="pdfexport-downloadtype-open"
            value="open"
            v-model="form.downloadType"
          />
          <label for="pdfexport-downloadtype-open" class="ml-1">
            <translate>Open in new window</translate>
          </label>
        </small>
        -->
        <button
          @click="download"
          type="button"
          class="btn btn-sm btn-info d-block w-100"
        >
          <translate>Generate PDF</translate>
        </button>
      </div>
    </div>
  </div>
</template>

<script>
/* This is Free Software under GNU Affero General Public License v >= 3.0
 * without warranty, see README.md and license for details.
 *
 * SPDX-License-Identifier: AGPL-3.0-or-later
 * License-Filename: LICENSES/AGPL-3.0.txt
 *
 * Copyright (C) 2018, 2019 by via donau
 *   – Österreichische Wasserstraßen-Gesellschaft mbH
 * Software engineering by Intevation GmbH
 *
 * Author(s):
 * * Markus Kottländer <markus.kottlaender@intevation.de>
 * * Bernhard E. Reiter <bernhard@intevation.de>
 * * Fadi Abbud <fadi.abbud@intevation.de>
 */
import { mapState } from "vuex";
import jsPDF from "jspdf";
import { getPointResolution } from "ol/proj.js";
import locale2 from "locale2";

var paperSizes = {
  // in millimeter, landscape [width, height]
  a3: [420, 297],
  a4: [297, 210]
};

export default {
  name: "pdftool",
  data() {
    return {
      form: {
        format: "landscape",
        paperSize: "a4",
        downloadType: "download",
        resolution: "120"
      }
    };
  },
  computed: {
    ...mapState("application", ["showPdfTool", "secondaryLogo"]),
    ...mapState("bottlenecks", ["selectedSurvey"]),
    ...mapState("map", ["openLayersMap", "isolinesLegendImgDataURL"]),
    ...mapState("user", ["user"])
  },
  methods: {
    download() {
      // FUTURE: disable button while working on it
      console.log(
        "will generate pdf with",
        this.form.paperSize,
        this.form.format,
        this.form.resolution
      );
      var width, height;

      if (this.form.format !== "portrait") {
        // landscape, default
        width = paperSizes[this.form.paperSize][0];
        height = paperSizes[this.form.paperSize][1];
      } else {
        // switch width and height
        width = paperSizes[this.form.paperSize][1];
        height = paperSizes[this.form.paperSize][0];
      }

      // FUTURE: consider margins

      // dots per mm = dots per inch / (25.4 mm/inch)
      var pixelsPerMapMillimeter = this.form.resolution / 25.4;
      var mapSizeForPrint = [
        // in pixel
        Math.round(width * pixelsPerMapMillimeter),
        Math.round(height * pixelsPerMapMillimeter)
      ];

      // generate PDF and open it
      // our units are milimeters; width 0 x height 0 is left upper corner

      // Step 1 prepare and save current map extend
      // Then add callback "rendercomplete" for Step 3
      //    which will generate the pdf and resets the map view
      // Step 2 which starts rendering a map with the necessary image size

      var map = this.openLayersMap;
      var mapSize = map.getSize(); // size in pixels of the map in the DOM
      // Calculate the extent for the current view state and the passed size.
      // The size is the pixel dimensions of the box into which the calculated
      // extent should fit.
      var mapExtent = map.getView().calculateExtent(mapSize);

      var pdf = new jsPDF(this.form.format, "mm", this.form.paperSize);
      var scalebarSize =
        this.form.format === "portrait" && this.form.paperSize === "a4"
          ? 10
          : 15;
      var northarrowSize = 3;
      var self = this;

      // set a callback for after the next complete rendering of the map
      map.once("rendercomplete", function(event) {
        let canvas = event.context.canvas;

        // because we are using Web Mercator, a pixel represents
        // a differently sizes spot depending on the place of the map.
        // So we use a value calculated from the center of the current view.
        let view = map.getView();
        let proj = view.getProjection();
        let metersPerPixel = // average meters (reality) per pixel (map)
          getPointResolution(proj, view.getResolution(), view.getCenter()) *
          proj.getMetersPerUnit();
        // DEBUG console.log("metersPerPixel = ", metersPerPixel);

        let scaleNominator = Math.round(
          // the x in 1:x map scale
          1000 * pixelsPerMapMillimeter * metersPerPixel
        );
        console.log("scaleNominator = ", scaleNominator);

        var data = canvas.toDataURL("image/jpeg");
        pdf.addImage(data, "JPEG", 0, 0, width, height);
        self.addRoundedBox(
          pdf,
          width - scalebarSize * 5.2,
          height - scalebarSize,
          scalebarSize * 5,
          scalebarSize
        );
        self.addScalebar(
          pdf,
          width - scalebarSize * 5,
          height - scalebarSize / 2,
          scalebarSize * 4,
          scaleNominator
        );
        /*
        self.addText(
          pdf,
          width - scalebarSize * 5,
          height - scalebarSize * 0.6,
          10,
          "black",
          50,
          "Scale 1:" + scaleNominator
        );
        */
        //self.addText(pdf, 150, 20, 10, "black", 70, "some text");
        self.addNorthArrow(pdf, 15, 9, northarrowSize);
        self.addPageInfo(pdf);
        self.addAboutBox(pdf, width, height);

        // addLegend
        // transforming into an HTMLImageElement only to find out
        // the width x height of the legend image
        // FUTURE: find a better way to get the width and height
        let legendImage = new Image();
        legendImage.src = self.isolinesLegendImgDataURL;
        let aspectRatio = legendImage.width / legendImage.height;

        self.addRoundedBox(pdf, width - 54, 0, 54, 50 / aspectRatio + 4);
        pdf.addImage(legendImage, width - 52, 2, 50, 50 / aspectRatio);

        pdf.save("map.pdf");
        // reset to original size
        map.setSize(mapSize);
        map.getView().fit(mapExtent, { size: mapSize });

        // FUTURE: re-enable button when done
      });

      // trigger rendering
      map.setSize(mapSizeForPrint);
      map.getView().fit(mapExtent, { size: mapSizeForPrint });

      // TODO: replace this src with an API reponse after actually generating PDFs
      /*
      let src =
        this.form.format === "landscape"
          ? "/img/PrintTemplate-Var2-Landscape.pdf"
          : "/img/PrintTemplate-Var2-Portrait.pdf";

      let a = document.createElement("a");
      a.href = src;

      if (this.form.downloadType === "download")
        a.download = src.substr(src.lastIndexOf("/") + 1);
      else a.target = "_blank";

      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
      */
    },
    addRoundedBox(doc, x, y, w, h) {
      // draws a rounded background box at (x,y) width x height
      // using jsPDF units
      doc.setDrawColor(255, 255, 255);
      doc.setFillColor(255, 255, 255);
      doc.roundedRect(x, y, w, h, 3, 3, "FD");
    },
    addScalebar(doc, x, y, maxWidth, scaleNominator) {
      // maxWidth in mm
      // scaleNominator is the x in 1:x of the map scale

      // reduce width until we'll find a nice number for printing
      // strategy:
      //           1. check which unit prefix we shall use to get [10:10000[
      //           2. using a mapping for the leading digit to get [1:10[
      //           3. select a smaller number which is nicely dividable
      //           4. scale up again to get length in paper mm and to be shown

      // from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10#Polyfill
      let log10 =
        Math.log10 || // more precise, but unsupported by IE
        function(x) {
          return Math.log(x) * Math.LOG10E;
        };

      let maxLength = maxWidth * scaleNominator;

      let unit = "mm";
      let unitConversionFactor = 1;
      if (maxLength >= 1e7) {
        // >= 10 km
        unit = "km";
        unitConversionFactor = 1e6;
      } else if (maxLength >= 1e4) {
        // >= 10 m
        unit = "m";
        unitConversionFactor = 1e3;
      }

      maxLength /= unitConversionFactor;

      // DEBUG console.log(maxLength, unit);
      let unroundedLength = maxLength;
      let numberOfDigits = Math.floor(log10(unroundedLength));
      let factor = Math.pow(10, numberOfDigits);
      let mapped = unroundedLength / factor;
      // DEBUG console.log(mapped);

      var length = Math.floor(maxLength); // just to have an upper limit

      // manually only use numbers that are very nice to devide by 4
      // note that this is taken into account for rounding later
      if (mapped > 8) {
        length = 8 * factor;
      } else if (mapped > 4) {
        length = 4 * factor;
      } else if (mapped > 2) {
        length = 2 * factor;
      } else {
        length = factor;
      }

      let size = (length * unitConversionFactor) / scaleNominator / 4;
      // DEBUG console.log(length, size);

      doc.setDrawColor(0, 0, 0);
      doc.setFillColor(0, 0, 0);
      doc.rect(x, y, size, 1, "FD");
      doc.setFillColor(255, 255, 255);
      doc.setDrawColor(0, 0, 0);
      doc.rect(x + size, y, size, 1, "FD");
      doc.setFillColor(0, 0, 0);
      doc.setDrawColor(0, 0, 0);
      doc.rect(x + size * 2, y, size * 2, 1, "FD");
      doc.setFontSize(5);
      doc.text(x, y + 3, "0");
      // /4 and could give 2.5. We still round, because of floating point arith
      doc.text(
        x + size,
        y + 3,
        (Math.round((length * 10) / 4) / 10).toString()
      );
      doc.text(x + size * 2, y + 3, Math.round(length / 2).toString());
      doc.text(x + size * 4, y + 3, Math.round(length).toString() + " " + unit);
    },

    addNorthArrow(doc, x1, y1, size) {
      var y2 = y1 + size * 3;
      var x3 = x1 - size * 2;
      var y3 = y1 + size * 5;
      var x4 = x1 + size * 2;
      //white triangle
      doc.setFillColor(255, 255, 255);
      doc.setDrawColor(255, 255, 255);
      doc.triangle(x3 - 0.8, y3 + 1.2, x1, y1 - 1.2, x1, y2 + 0.6, "F");
      doc.triangle(x1, y1 - 1.2, x1, y2 + 0.6, x4 + 0.8, y3 + 1.2, "F");
      //north arrow
      doc.setDrawColor(0, 0, 0);
      doc.setFillColor(255, 255, 255);
      doc.triangle(x3, y3, x1, y1, x1, y2, "FD");
      doc.setFillColor(0, 0, 0);
      doc.triangle(x1, y1, x1, y2, x4, y3, "FD");
      doc.setFontSize(size * 3.1);
      doc.setTextColor(255, 255, 255);
      doc.setFontStyle("bold");
      doc.text(size < 3 ? x1 - 0.5 : x1 - 1.3, y3 + 1, "N");
      doc.setFontSize(size * 3);
      doc.setTextColor(0, 0, 0);
      doc.setFontStyle("normal");
      doc.text(size < 3 ? x1 - 0.5 : x1 - 1.3, y3 + 1, "N");
    },
    // add some text at specific coordinates and determine how many wrolds in single line
    addText(doc, postitionX, positionY, size, color, lineWidth, text) {
      // split the incoming string to an array, each element is a string of words in a single line
      var textLines = doc.splitTextToSize(text, lineWidth);
      // get the longest line to fit the white backround to it
      var longestString = "";
      textLines.forEach(function(element) {
        if (element.length > longestString.length) longestString = element;
      });
      var indexOfMaxString = textLines.indexOf(longestString);
      // white background (rectangular) around the text
      doc.setFillColor(255, 255, 255);
      doc.setDrawColor(255, 255, 255);
      doc.rect(
        postitionX - doc.getStringUnitWidth(textLines[indexOfMaxString]) / size,
        size > 10 ? positionY - size / 1.8 : positionY - size / 2.4,
        doc.getStringUnitWidth(textLines[indexOfMaxString]) * (size / 2.6),
        textLines.length * (size / 2),
        "FD"
      );
      //rounded rectangular
      /* doc.roundedRect(
        postitionX - doc.getStringUnitWidth(textLines[indexOfMaxString]) / size,
        size > 10 ? positionY - size / 1.8 : positionY - size / 2.6,
        doc.getStringUnitWidth(textLines[indexOfMaxString]) * (size / 2.6),
        textLines.length * (size / 2),
        3,
        3,
        "FD"
      ); */
      doc.setTextColor(color);
      doc.setFontSize(size);
      doc.text(postitionX, positionY, textLines);
    },
    addPageInfo(doc) {
      this.addRoundedBox(doc, 0, 0, 110, 8);
      let str =
        this.$gettext("Date of publication:") +
        " " +
        new Date().toLocaleString(locale2) +
        " " +
        this.$gettext("– printed by:") +
        " " +
        this.user;
      this.addText(doc, 5, 5, 9, "black", 100, str);
    },
    addAboutBox(doc, docWidth, docHeight) {
      let top = docHeight - 20;
      this.addRoundedBox(doc, 0, top, 120, 20);
      console.log("this.secondaryLogo", this.secondaryLogo);
      let imageData =
        "data:image/png;base64,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";
      doc.addImage(imageData, "PNG", 5, docHeight - 19, 110, 10);
      /*
      if ("") {
        doc.addImage(this.secondaryLogo, "PNG", 5, docHeight - 19, 50);
      };
      */
      let str =
        "Dislaimer: Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua.";
      this.addText(doc, 5, docHeight - 6, 8, "black", 115, str);
    }
  }
};
</script>