fix:gs loading issue
This commit is contained in:
@@ -33,6 +33,38 @@ export function getCachedGsModule(): GhostscriptModule | null {
|
|||||||
return cachedGsModule;
|
return cachedGsModule;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function loadGsModule(): Promise<GhostscriptModule> {
|
||||||
|
const gsBaseUrl = getWasmBaseUrl('ghostscript')!;
|
||||||
|
const normalizedUrl = gsBaseUrl.endsWith('/') ? gsBaseUrl : `${gsBaseUrl}/`;
|
||||||
|
|
||||||
|
const gsJsUrl = `${normalizedUrl}gs.js`;
|
||||||
|
const response = await fetch(gsJsUrl);
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error(`Failed to fetch gs.js: HTTP ${response.status}`);
|
||||||
|
}
|
||||||
|
const jsText = await response.text();
|
||||||
|
const blob = new Blob([jsText], { type: 'application/javascript' });
|
||||||
|
const blobUrl = URL.createObjectURL(blob);
|
||||||
|
|
||||||
|
try {
|
||||||
|
const gsModule = await import(/* @vite-ignore */ blobUrl);
|
||||||
|
const ModuleFactory = gsModule.default;
|
||||||
|
|
||||||
|
return (await ModuleFactory({
|
||||||
|
locateFile: (path: string) => {
|
||||||
|
if (path.endsWith('.wasm')) {
|
||||||
|
return `${normalizedUrl}gs.wasm`;
|
||||||
|
}
|
||||||
|
return `${normalizedUrl}${path}`;
|
||||||
|
},
|
||||||
|
print: (text: string) => console.log('[GS]', text),
|
||||||
|
printErr: (text: string) => console.error('[GS Error]', text),
|
||||||
|
})) as GhostscriptModule;
|
||||||
|
} finally {
|
||||||
|
URL.revokeObjectURL(blobUrl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export async function convertToPdfA(
|
export async function convertToPdfA(
|
||||||
pdfData: Uint8Array,
|
pdfData: Uint8Array,
|
||||||
level: PdfALevel = 'PDF/A-2b',
|
level: PdfALevel = 'PDF/A-2b',
|
||||||
@@ -51,35 +83,7 @@ export async function convertToPdfA(
|
|||||||
if (cachedGsModule) {
|
if (cachedGsModule) {
|
||||||
gs = cachedGsModule;
|
gs = cachedGsModule;
|
||||||
} else {
|
} else {
|
||||||
const gsBaseUrl = getWasmBaseUrl('ghostscript')!;
|
gs = await loadGsModule();
|
||||||
let packageBaseUrl = gsBaseUrl;
|
|
||||||
if (packageBaseUrl.endsWith('/assets/')) {
|
|
||||||
packageBaseUrl = packageBaseUrl.slice(0, -8);
|
|
||||||
} else if (packageBaseUrl.endsWith('/assets')) {
|
|
||||||
packageBaseUrl = packageBaseUrl.slice(0, -7);
|
|
||||||
}
|
|
||||||
const normalizedPkgUrl = packageBaseUrl.endsWith('/')
|
|
||||||
? packageBaseUrl
|
|
||||||
: `${packageBaseUrl}/`;
|
|
||||||
const normalizedAssetsUrl = gsBaseUrl.endsWith('/')
|
|
||||||
? gsBaseUrl
|
|
||||||
: `${gsBaseUrl}/`;
|
|
||||||
|
|
||||||
const libUrl = `${normalizedPkgUrl}dist/index.js`;
|
|
||||||
const module = await import(/* @vite-ignore */ libUrl);
|
|
||||||
const loadWASM = module.loadGhostscriptWASM || module.default;
|
|
||||||
|
|
||||||
gs = (await loadWASM({
|
|
||||||
baseUrl: normalizedAssetsUrl,
|
|
||||||
locateFile: (path: string) => {
|
|
||||||
if (path.endsWith('.wasm')) {
|
|
||||||
return `${normalizedAssetsUrl}gs.wasm`;
|
|
||||||
}
|
|
||||||
return path;
|
|
||||||
},
|
|
||||||
print: (text: string) => console.log('[GS]', text),
|
|
||||||
printErr: (text: string) => console.error('[GS Error]', text),
|
|
||||||
})) as GhostscriptModule;
|
|
||||||
cachedGsModule = gs;
|
cachedGsModule = gs;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -404,35 +408,7 @@ export async function convertFontsToOutlines(
|
|||||||
if (cachedGsModule) {
|
if (cachedGsModule) {
|
||||||
gs = cachedGsModule;
|
gs = cachedGsModule;
|
||||||
} else {
|
} else {
|
||||||
const gsBaseUrl = getWasmBaseUrl('ghostscript')!;
|
gs = await loadGsModule();
|
||||||
let packageBaseUrl = gsBaseUrl;
|
|
||||||
if (packageBaseUrl.endsWith('/assets/')) {
|
|
||||||
packageBaseUrl = packageBaseUrl.slice(0, -8);
|
|
||||||
} else if (packageBaseUrl.endsWith('/assets')) {
|
|
||||||
packageBaseUrl = packageBaseUrl.slice(0, -7);
|
|
||||||
}
|
|
||||||
const normalizedPkgUrl = packageBaseUrl.endsWith('/')
|
|
||||||
? packageBaseUrl
|
|
||||||
: `${packageBaseUrl}/`;
|
|
||||||
const normalizedAssetsUrl = gsBaseUrl.endsWith('/')
|
|
||||||
? gsBaseUrl
|
|
||||||
: `${gsBaseUrl}/`;
|
|
||||||
|
|
||||||
const libUrl = `${normalizedPkgUrl}dist/index.js`;
|
|
||||||
const module = await import(/* @vite-ignore */ libUrl);
|
|
||||||
const loadWASM = module.loadGhostscriptWASM || module.default;
|
|
||||||
|
|
||||||
gs = (await loadWASM({
|
|
||||||
baseUrl: normalizedAssetsUrl,
|
|
||||||
locateFile: (path: string) => {
|
|
||||||
if (path.endsWith('.wasm')) {
|
|
||||||
return `${normalizedAssetsUrl}gs.wasm`;
|
|
||||||
}
|
|
||||||
return path;
|
|
||||||
},
|
|
||||||
print: (text: string) => console.log('[GS]', text),
|
|
||||||
printErr: (text: string) => console.error('[GS Error]', text),
|
|
||||||
})) as GhostscriptModule;
|
|
||||||
cachedGsModule = gs;
|
cachedGsModule = gs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -73,34 +73,10 @@ async function preloadGhostscript(): Promise<void> {
|
|||||||
console.log('[Preloader] Starting Ghostscript WASM preload...');
|
console.log('[Preloader] Starting Ghostscript WASM preload...');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const gsBaseUrl = getWasmBaseUrl('ghostscript')!;
|
const { loadGsModule, setCachedGsModule } =
|
||||||
|
await import('./ghostscript-loader.js');
|
||||||
|
|
||||||
let packageBaseUrl = gsBaseUrl;
|
const gsModule = await loadGsModule();
|
||||||
if (packageBaseUrl.endsWith('/assets/')) {
|
|
||||||
packageBaseUrl = packageBaseUrl.slice(0, -8);
|
|
||||||
} else if (packageBaseUrl.endsWith('/assets')) {
|
|
||||||
packageBaseUrl = packageBaseUrl.slice(0, -7);
|
|
||||||
}
|
|
||||||
const normalizedUrl = packageBaseUrl.endsWith('/')
|
|
||||||
? packageBaseUrl
|
|
||||||
: `${packageBaseUrl}/`;
|
|
||||||
|
|
||||||
const libUrl = `${normalizedUrl}dist/index.js`;
|
|
||||||
const module = await import(/* @vite-ignore */ libUrl);
|
|
||||||
const loadGsWASM = module.loadGhostscriptWASM || module.default;
|
|
||||||
const { setCachedGsModule } = await import('./ghostscript-loader.js');
|
|
||||||
|
|
||||||
const gsModule = await loadGsWASM({
|
|
||||||
baseUrl: `${normalizedUrl}assets/`,
|
|
||||||
locateFile: (path: string) => {
|
|
||||||
if (path.endsWith('.wasm')) {
|
|
||||||
return `${normalizedUrl}assets/gs.wasm`;
|
|
||||||
}
|
|
||||||
return path;
|
|
||||||
},
|
|
||||||
print: () => {},
|
|
||||||
printErr: () => {},
|
|
||||||
});
|
|
||||||
setCachedGsModule(gsModule as any);
|
setCachedGsModule(gsModule as any);
|
||||||
preloadState.ghostscript = PreloadStatus.READY;
|
preloadState.ghostscript = PreloadStatus.READY;
|
||||||
console.log('[Preloader] Ghostscript WASM ready');
|
console.log('[Preloader] Ghostscript WASM ready');
|
||||||
|
|||||||
Reference in New Issue
Block a user