| import { BoleOss, Message } from '@bole-core/core'; | 
| import { RichEditorUtils } from '@bole-core/components'; | 
| import { OssManager } from '../oss'; | 
| import { ElLoading } from 'element-plus'; | 
|   | 
| pdfjsLib.GlobalWorkerOptions.workerSrc = | 
|   'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.11.338/pdf.worker.js'; | 
|   | 
| export async function resolvePdfByUrl(url: string) { | 
|   let pdf = await pdfjsLib.getDocument(url).promise; | 
|   | 
|   return pdf; | 
| } | 
|   | 
| export type ConvertPdfToImageItem = BoleOss.PutObjectResult & { | 
|   width: number; | 
|   height: number; | 
| }; | 
|   | 
| export async function convertPdfToImage(pdfUrl: string) { | 
|   let loadingInstance: ReturnType<typeof ElLoading.service>; | 
|   try { | 
|     loadingInstance = ElLoading.service({ | 
|       fullscreen: true, | 
|       lock: false, | 
|       background: 'transparent', | 
|     }); | 
|     const pdf = await resolvePdfByUrl(pdfUrl); | 
|     let tasks: Promise<ConvertPdfToImageItem>[] = []; | 
|     for (let i = 0; i < pdf.numPages; i++) { | 
|       const page = await pdf.getPage(i + 1); | 
|       const viewport = page.getViewport({ scale: 1 }); | 
|       tasks.push( | 
|         new Promise(async (resolve, reject) => { | 
|           try { | 
|             let base64 = await generateBase64ByPage(page); | 
|             let file = RichEditorUtils.base64ToFile(base64); | 
|             let res = await OssManager.asyncUpload({ | 
|               file: file, | 
|             }); | 
|             resolve({ | 
|               ...res, | 
|               width: viewport.width, | 
|               height: viewport.height, | 
|             }); | 
|           } catch (error) { | 
|             reject(error); | 
|           } | 
|         }) | 
|       ); | 
|     } | 
|     return Promise.all(tasks); | 
|   } catch (error) { | 
|     Message.errorMessage(error); | 
|     throw new Error(error); | 
|   } finally { | 
|     if (loadingInstance) { | 
|       loadingInstance.close(); | 
|     } | 
|   } | 
| } | 
|   | 
| async function generateBase64ByPage(page) { | 
|   const viewport = page.getViewport({ scale: 1 }); | 
|   let canvas = document.createElement('canvas'); | 
|   const context = canvas.getContext('2d'); | 
|   canvas.height = viewport.height; | 
|   canvas.width = viewport.width; | 
|   const renderContext = { | 
|     canvasContext: context, | 
|     viewport: viewport, | 
|   }; | 
|   await page.render(renderContext).promise; | 
|   let base64 = canvas.toDataURL('image/png'); | 
|   canvas = null; | 
|   return base64; | 
| } |