Javascript 使用JSZip压缩字体文件(例如:ArialMT.ttf)不起作用

Javascript 使用JSZip压缩字体文件(例如:ArialMT.ttf)不起作用,javascript,vue.js,jszip,Javascript,Vue.js,Jszip,压缩图像和HTML文件的工作很好,但当添加CSS的字体文件;字体文件大小为1kb,无法打开 我试着在没有任何其他文件的情况下压缩字体,但仍然存在同样的问题 let zip = new JSZip() let imageURLCount = 0 let fontFileCount = 0 let imageURLs = [ 'http:site.com/image1.jpg', 'http:site.com/image2.jpg', 'http:site.com/image3.jpg',

压缩图像和HTML文件的工作很好,但当添加CSS的字体文件;字体文件大小为1kb,无法打开

我试着在没有任何其他文件的情况下压缩字体,但仍然存在同样的问题

let zip = new JSZip()
let imageURLCount = 0
let fontFileCount = 0

let imageURLs = [
 'http:site.com/image1.jpg',
 'http:site.com/image2.jpg',
 'http:site.com/image3.jpg',
 'http:site.com/image4.jpg'
]

let fontFiles = [
 'http:site.com/fontFile1.ttf',
 'http:site.com/fontFile2.ttf',
 'http:site.com/fontFile3.ttf',
 'http:site.com/fontFile4.ttf'
]

// zip images
imageURLs.forEach((url, i) => {
  JSZipUtils.getBinaryContent(url, (error, data) => {
     if (error) {
        throw error
     }
     // zip file name
     imageFileName = 'image_'+i+'.jpg'

     // create images folder
     zip.folder('images')
        .file(imageFileName, data,{binary: true})

     imageURLCount++
     if (imageURLCount === imageURLs.length) {
        zipComplete(imageURLCount,fontFileCount)
     }
  })
}) // end imageURLs[] forEach 

// zip font files
fontFiles.forEach((fontFile, i) => {
  JSZipUtils.getBinaryContent(fontFile, (error, data) => {
     if (error) {
        throw error
     }

     // zip file name
     fileName = 'font_'+i+'.ttf'
     zip.file(fileName, data, {binary:true})
     fontFileCount++
     if (fontFileCount === fontFiles.length) {
        zipComplete(imageURLCount,fontFileCount)
     }
  })
}) // end fontFiles[] forEach 

// PS: zipComplete(imageURLCount,fontFileCount) checks if both arrays looped to the end and then trigger the 'file-saver' SaveAs()

我该如何压缩字体,还是不可能使用JSZip压缩字体?

我本想编辑您的示例并在代码中发现问题,但结果证明没有什么问题。下面是一个工作示例,它成功地压缩了一个.ttf文件,然后下载了zip文件

我猜问题在于从.ttf URI返回的内容

let zip=new JSZip()
设imageURLCount=0
让fontFileCount=0
让ImageURL=[]
让fontFiles=[
'https://fontlibrary.org/assets/fonts/symbola/cf81aeb303c13ce765877d31571dc5c7/7d8d51a2e1b57d59075325384458fac6/SymbolaRegular.ttf'
]
//压缩字体文件
forEach((fontFile,i)=>{
JSZipUtils.getBinaryContent(fontFile,(错误,数据)=>{
如果(错误){
抛出错误
}
//压缩文件名
文件名='font_'+i+'.ttf'
zip.file(文件名、数据、{
二进制:对
})
fontFileCount++
if(fontFileCount==fontFiles.length){
zipComplete(imageURLCount、fontFileCount)
}
})
})//end fontFiles[]forEach
函数zipComplete(imageURLCount、fontFileCount){
zip.generateAsync({
类型:“blob”
})
.然后(功能(内容){
//请参阅FileSaver.js
saveAs(内容,“example.zip”);
});
}
//PS:zipComplete(imageURLCount,fontFileCount)检查两个数组是否循环到末尾,然后触发“文件保护程序”SaveAs()


是否检查变量
data
是否实际包含字体二进制数据,而不是其他内容,例如url无效或404'ed情况下错误页面的html?在
imageURLs.forEach((url,i)=>{})中,从不构造
zip。您是否缺少示例中的代码?@PatrickEvans当我控制台时。我得到的日志(数据):
ArrayBuffer(97344){}[[Int8Array]]:Int8Array(97344)[79,84,84,79,][[Int16Array]]:Int16Array(48672)[2158320308,][Int32Array]:Int32Array(24336)[1330926671,-2147480320,2157312,][Uint8Array]:Uint8Array(97344)[79,84,]Bytellength:(…)
@BlueWater86抱歉我错过了那部分(现在添加)。奇怪的是,我可以压缩图像、文本、远程服务器HTML、CSS和JS,但不能压缩字体。这是一个巨大的功能,所以我只想展示图像和字体“压缩”是以同样的方式处理的,而不是粘贴整个东西。干杯是否可能是zip函数SaveAs()在加载所有字体数据之前运行?如何加载字体?XHR?谢谢!这给了我希望:)至少我知道问题不在JSZip。应该像您一样在项目外部运行代码