code: add load font rule

This commit is contained in:
ShawnPhang 2023-08-23 17:49:36 +08:00
parent b664a33d08
commit 50cfa93d19
4 changed files with 45 additions and 33 deletions

View File

@ -53,7 +53,7 @@
const NAME = 'w-text'
import { mapGetters, mapActions } from 'vuex'
// import api from '@/api'
import { fontWithDraw } from '@/utils/widgets/loadFontRule'
export default {
name: NAME,
@ -105,7 +105,7 @@ export default {
computed: {
...mapGetters(['dActiveElement']),
isDraw() {
return this.$route.name === 'Draw'
return this.$route.name === 'Draw' && fontWithDraw
},
},
watch: {

View File

@ -0,0 +1,39 @@
/*
* @Author: ShawnPhang
* @Date: 2023-08-23 17:37:16
* @Description:
* @LastEditors: ShawnPhang <site: book.palxp.com>
* @LastEditTime: 2023-08-23 17:48:34
*/
import api from '@/api'
import { blob2Base64, generateFontStyle } from '@/common/methods/fonts/utils'
export const fontWithDraw = true // true开启false关闭
export const font2style = async (fontContent: any, fontData: any = []) => {
return new Promise((resolve: Function) => {
Promise.all(
// 提取字体子集。只有ttf/otf这种原始字体支持提取如果服务端不支持则关闭该功能以保证页面能加载字体。
Object.keys(fontContent).map(async (key) => {
const font = fontData.find((font: any) => font.value === key) as any
if (font.id) {
try {
const base64 = await api.material.getFontSub({
font_id: font.id,
url: font.url,
content: 'Aa' + fontContent[key],
})
fontContent[key] = base64
} catch (e) {
console.log('字体获取失败', e)
}
}
}),
).then(() => {
const fontStyles = Object.keys(fontContent).reduce((pre, cur) => pre + generateFontStyle(cur, fontContent[cur]).outerHTML, '')
document.head.innerHTML += fontStyles
// document.head.appendChild(fontStyles)
resolve()
})
})
}

View File

@ -15,7 +15,7 @@ import api from '@/api'
import wGroup from '@/components/modules/widgets/wGroup/wGroup.vue'
import Preload from '@/utils/plugins/preload'
import FontFaceObserver from 'fontfaceobserver'
import { blob2Base64, generateFontStyle } from '@/common/methods/fonts/utils'
import { fontWithDraw, font2style } from '@/utils/widgets/loadFontRule'
import designBoard from '@/components/modules/layout/designBoard.vue'
import zoomControl from '@/components/modules/layout/zoomControl.vue'
@ -94,7 +94,7 @@ export default defineComponent({
fontData.forEach((item: any) => {
item.url = list.find((x: any) => x.oid == item.id)?.ttf
})
await this.font2style(fontContent, fontData)
fontWithDraw && (await font2style(fontContent, fontData))
// console.log('1. base64 yes')
const preload = new Preload(imgsData)
await preload.doms()
@ -112,7 +112,7 @@ export default defineComponent({
// console.log(e)
}
loadFlag = true
// console.log('--> now u can start screenshot!')
console.log('--> now u can start screenshot!')
setTimeout(() => {
try {
;(window as any).loadFinishToInject('done')
@ -124,33 +124,6 @@ export default defineComponent({
!loadFlag && (window as any).loadFinishToInject('done')
}, 60000)
},
async font2style(fontContent: any, fontData: any = []) {
return new Promise((resolve: Function) => {
Promise.all(
// ttf/otf
Object.keys(fontContent).map(async (key) => {
const font = fontData.find((font: any) => font.value === key) as any
if (font.id) {
try {
const base64 = await api.material.getFontSub({
font_id: font.id,
url: font.url,
content: 'Aa' + fontContent[key],
})
fontContent[key] = base64
} catch (e) {
console.log('字体获取失败', e)
}
}
}),
).then(() => {
const fontStyles = Object.keys(fontContent).reduce((pre, cur) => pre + generateFontStyle(cur, fontContent[cur]).outerHTML, '')
document.head.innerHTML += fontStyles
// document.head.appendChild(fontStyles)
resolve()
})
})
},
},
})
</script>

View File

@ -3,7 +3,7 @@
* @Date: 2022-01-12 11:26:53
* @Description: 顶部操作按钮组
* @LastEditors: ShawnPhang <site: book.palxp.com>
* @LastEditTime: 2023-07-25 16:02:13
* @LastEditTime: 2023-08-23 17:33:12
-->
<template>
<div class="top-title"><el-input v-model="title" placeholder="未命名的设计" class="input-wrap" /></div>