forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			67 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Svelte
		
	
	
	
	
	
| <script lang="ts">
 | |
|   import DownloadButton from "./DownloadButton.svelte"
 | |
|   import ThemeViewState from "../../Models/ThemeViewState"
 | |
|   import { SvgToPdf } from "../../Utils/svgToPdf"
 | |
|   import type { PdfTemplateInfo } from "../../Utils/svgToPdf"
 | |
|   import Translations from "../i18n/Translations"
 | |
|   import { Translation } from "../i18n/Translation"
 | |
|   import { Utils } from "../../Utils"
 | |
|   import { AvailableRasterLayers } from "../../Models/RasterLayers"
 | |
|   import Constants from "../../Models/Constants"
 | |
|   import Locale from "../i18n/Locale"
 | |
|   import { UIEventSource } from "../../Logic/UIEventSource"
 | |
|   import DownloadHelper from "./DownloadHelper"
 | |
| 
 | |
|   export let templateName: string
 | |
|   export let state: ThemeViewState
 | |
|   const template: PdfTemplateInfo = SvgToPdf.templates[templateName]
 | |
|   console.log("template", template)
 | |
|   let mainText: Translation =
 | |
|     typeof template.description === "string"
 | |
|       ? new Translation(template.description)
 | |
|       : template.description
 | |
|   let t = Translations.t.general.download
 | |
|   const downloadHelper = new DownloadHelper(state)
 | |
| 
 | |
|   async function constructPdf(_, title: string, status: UIEventSource<string>) {
 | |
|     title =
 | |
|       title.substring(0, title.length - 4) + "_" + template.format + "_" + template.orientation
 | |
|     const templateUrls = SvgToPdf.templates[templateName].pages
 | |
|     const templates: string[] = await Promise.all(templateUrls.map((url) => Utils.download(url)))
 | |
|     console.log("Templates are", templates)
 | |
|     const bg = state.mapProperties.rasterLayer.data ?? AvailableRasterLayers.maplibre
 | |
|     const creator = new SvgToPdf(title, templates, {
 | |
|       state,
 | |
|       freeComponentId: "belowmap",
 | |
|       createImage: (key: string, width: string, height: string) =>
 | |
|         downloadHelper.createImage(key, width, height),
 | |
|       textSubstitutions: <Record<string, string>>{
 | |
|         "layout.title": state.layout.title,
 | |
|         layoutid: state.layout.id,
 | |
|         title: state.layout.title,
 | |
|         layoutImg: state.layout.icon,
 | |
|         version: Constants.vNumber,
 | |
|         date: new Date().toISOString().substring(0, 16),
 | |
|         background: new Translation(bg.properties.name).txt,
 | |
|       },
 | |
|     })
 | |
| 
 | |
|     const unsub = creator.status.addCallbackAndRunD((s) => {
 | |
|       console.log("SVG creator status:", s)
 | |
|       status?.setData(s)
 | |
|     })
 | |
|     await creator.ExportPdf(Locale.language.data)
 | |
|     unsub()
 | |
|     return undefined
 | |
|   }
 | |
| </script>
 | |
| 
 | |
| <DownloadButton
 | |
|   construct={constructPdf}
 | |
|   extension="pdf"
 | |
|   helperText={t.downloadAsPdfHelper}
 | |
|   metaIsIncluded={false}
 | |
|   {mainText}
 | |
|   mimetype="application/pdf"
 | |
|   {state}
 | |
| />
 |