mirror of
https://github.com/palxiao/poster-design.git
synced 2025-07-15 16:02:19 +08:00
code: add load font rule
This commit is contained in:
parent
b664a33d08
commit
50cfa93d19
@ -53,7 +53,7 @@
|
|||||||
const NAME = 'w-text'
|
const NAME = 'w-text'
|
||||||
|
|
||||||
import { mapGetters, mapActions } from 'vuex'
|
import { mapGetters, mapActions } from 'vuex'
|
||||||
// import api from '@/api'
|
import { fontWithDraw } from '@/utils/widgets/loadFontRule'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: NAME,
|
name: NAME,
|
||||||
@ -105,7 +105,7 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
...mapGetters(['dActiveElement']),
|
...mapGetters(['dActiveElement']),
|
||||||
isDraw() {
|
isDraw() {
|
||||||
return this.$route.name === 'Draw'
|
return this.$route.name === 'Draw' && fontWithDraw
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
39
src/utils/widgets/loadFontRule.ts
Normal file
39
src/utils/widgets/loadFontRule.ts
Normal 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()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
@ -15,7 +15,7 @@ import api from '@/api'
|
|||||||
import wGroup from '@/components/modules/widgets/wGroup/wGroup.vue'
|
import wGroup from '@/components/modules/widgets/wGroup/wGroup.vue'
|
||||||
import Preload from '@/utils/plugins/preload'
|
import Preload from '@/utils/plugins/preload'
|
||||||
import FontFaceObserver from 'fontfaceobserver'
|
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 designBoard from '@/components/modules/layout/designBoard.vue'
|
||||||
import zoomControl from '@/components/modules/layout/zoomControl.vue'
|
import zoomControl from '@/components/modules/layout/zoomControl.vue'
|
||||||
|
|
||||||
@ -94,7 +94,7 @@ export default defineComponent({
|
|||||||
fontData.forEach((item: any) => {
|
fontData.forEach((item: any) => {
|
||||||
item.url = list.find((x: any) => x.oid == item.id)?.ttf
|
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')
|
// console.log('1. base64 yes')
|
||||||
const preload = new Preload(imgsData)
|
const preload = new Preload(imgsData)
|
||||||
await preload.doms()
|
await preload.doms()
|
||||||
@ -112,7 +112,7 @@ export default defineComponent({
|
|||||||
// console.log(e)
|
// console.log(e)
|
||||||
}
|
}
|
||||||
loadFlag = true
|
loadFlag = true
|
||||||
// console.log('--> now u can start screenshot!')
|
console.log('--> now u can start screenshot!')
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
try {
|
try {
|
||||||
;(window as any).loadFinishToInject('done')
|
;(window as any).loadFinishToInject('done')
|
||||||
@ -124,33 +124,6 @@ export default defineComponent({
|
|||||||
!loadFlag && (window as any).loadFinishToInject('done')
|
!loadFlag && (window as any).loadFinishToInject('done')
|
||||||
}, 60000)
|
}, 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>
|
</script>
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* @Date: 2022-01-12 11:26:53
|
* @Date: 2022-01-12 11:26:53
|
||||||
* @Description: 顶部操作按钮组
|
* @Description: 顶部操作按钮组
|
||||||
* @LastEditors: ShawnPhang <site: book.palxp.com>
|
* @LastEditors: ShawnPhang <site: book.palxp.com>
|
||||||
* @LastEditTime: 2023-07-25 16:02:13
|
* @LastEditTime: 2023-08-23 17:33:12
|
||||||
-->
|
-->
|
||||||
<template>
|
<template>
|
||||||
<div class="top-title"><el-input v-model="title" placeholder="未命名的设计" class="input-wrap" /></div>
|
<div class="top-title"><el-input v-model="title" placeholder="未命名的设计" class="input-wrap" /></div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user