laundree/laundree

View on GitHub
src/utils/pdf.js

Summary

Maintainability
A
1 hr
Test Coverage
// @flow
import type { LocaleType } from '../locales'
import qr from 'qr-image'
import {locales} from '../locales'
import PdfDocument from 'pdfkit'
import path from 'path'

export async function createInvitePdf (laundryId: string, code: string, locale: LocaleType) {
  const doc = new PdfDocument({size: [2 * 240, 2 * 320]})
  const link = `https://laundree.io/s/${laundryId}/${code}`
  const logoWidth = 150
  const logoX = (doc.page.width - logoWidth) / 2
  doc
    .image(path.join(__dirname, '..', '..', 'public', 'images', 'logo.png'), logoX, 40, {width: logoWidth})
    .fontSize(13)
    .moveDown(6)
    .text(locales[locale]['pdf.invite.text.1'], {align: 'justify'})
    .moveDown()
    .text(locales[locale]['pdf.invite.text.2'])
  const svgOrigWith = 87.8
  const newWidth = 175
  const translateX = (doc.page.width - newWidth) / 2
  const qrImage = qr.svgObject(link)
  doc
    .save()
    .translate(translateX, 250)
    .scale(newWidth / svgOrigWith)
    .path('M0,20.3v83.8h87.8V20.3H0z M76.9,92.9c0,0.9-0.7,1.6-1.6,1.6H12.5c-0.9,0-1.6-0.7-1.6-1.6 V31.6c0-0.9,0.7-1.6,1.6-1.6h62.7c0.9,0,1.6,0.7,1.6,1.6V92.9z')
    .path('M82,15.2c0,1.4-1.1,2.6-2.6,2.6c-1.4,0-2.6-1.1-2.6-2.6c0-1.4,1.1-2.6,2.6-2.6 C80.9,12.7,82,13.8,82,15.2L82,15.2z M82,15.2')
    .path('M82,15.2c0,1.4-1.1,2.6-2.6,2.6c-1.4,0-2.6-1.1-2.6-2.6c0-1.4,1.1-2.6,2.6-2.6 C80.9,12.7,82,13.8,82,15.2L82,15.2z M82,15.2')
    .path('M73.8,15.2c0,1.4-1.1,2.6-2.6,2.6c-1.4,0-2.6-1.1-2.6-2.6c0-1.4,1.1-2.6,2.6-2.6 C72.7,12.7,73.8,13.8,73.8,15.2L73.8,15.2z M73.8,15.2')
    .path('M10.9,15.2c0,1.4-1.1,2.6-2.6,2.6c-1.4,0-2.6-1.1-2.6-2.6c0-1.4,1.1-2.6,2.6-2.6 C9.7,12.7,10.9,13.8,10.9,15.2L10.9,15.2z M10.9,15.2')
    .rect(0, 0, 87.8, 9)
    .fill('#4388a3')
    .translate(12, 30.5)
    .scale(64 / qrImage.size)
    .path(qrImage.path)
    .fill('#4388a3')
    .restore()
    .moveDown(18)
    .text(locales[locale]['pdf.invite.text.3'])
    .end()
  return doc
}