浏览器端代码获取资源

如何获取本地国标文件

很少把自己的代码发上来,因为一方面都是旁门左道,不是真正能够独当一面的成果。另一方面只是一时使用,过了这个阶段或者环境变了就没法用了。这次贴上来主要是可能觉得有人会需要。

现在国标已经被整理可以全文检索和预览了。之前使用的技术方案是能够通过简单的前端客户端脚本直接进行下载文本版本的。后来可能这个工作外包给了其它公司,而这个公司不再提供文本版本下载,只能浏览,并且对资源进行和混淆。

这个代码能够通过浏览器,将混淆后的资源导出为正常可浏览的图片,以求能够在离线的情况下继续浏览阅读。

代码分为三个部分,需要分别运行

1、导出图片资源

2、导出页面资源

3、导出最终页面图片

其中第二步需要修改引用第一步下载图片资源的文件名,在MS edge中,aLink.download的指定没有生效,因此只能在运行第二部分代码之前修改文件名为浏览器下载图片时的文件名

第三步需要一个web服务器以解决页面资源访问许可的问题。另外,此部分代码中引用了domtoimage https://github.com/tsayen/dom-to-image ,在此致谢。

导出过程中有时因带宽或者服务器响应能力问题会遗漏部分资源,需要针对性重新下载。

最终我使用pdfill pdftools 将图片结果合并成pdf文件存档。

希望对各位有所帮助

//导出图片素材
$(".page").each((i,a)=>window.initImage(a.id))
let appurl=location.href.substr(0,location.href.lastIndexOf("/"));
let imgurlscode=$.unique($(".page>span").map((i,a)=>a.style.backgroundImage));
let imgurls=imgurlscode.map((i,a)=>appurl+"/"+a.substr(a.indexOf('"')+1,a.lastIndexOf('"')-a.indexOf('"')-1));
imgurls.each((i,a)=>{
    //if(i!=26)return;
let aLink = document.createElement('a')
aLink.download = 'imgs'+i+'.png' // 文件名后缀需要和dataurl表示的相同,否则可能乱码
aLink.href = a;
aLink.click();
});
//导出页面素材,注意修改图片素材名称
let imgurlslocal=imgurlscode.map((i,a)=>"GBT13923-2022_1191-1684-"+i+".png");//??此处填写下载的图片名称前缀
let bodystr=$(".pdfViewer")[0].outerHTML;
imgurlscode.each((i,a)=>bodystr=bodystr.replaceAll(a.replaceAll('"',"""),"url(""+imgurlslocal[i]+"")"));
let e="<html><head><script src=\"http://localhost:20080/test/domtoimage.min2.6.js\"></script>"+$("style")[1].outerHTML+"</head><body>"+bodystr+"</body></html>";
let aLink = document.createElement('a')
aLink.download = 'fileName_ele.html' // 文件名后缀需要和dataurl表示的相同,否则可能乱码
aLink.href = "data:image/jpeg;base64,"+window.btoa(e);
aLink.click();

  //导出图片结果          
        let pages=Array.from(document.querySelectorAll(".pdfViewer>.page")).reverse();
    function savetopng(ps){
        if(ps.length==0)return;
        let ele=ps.pop();
        const node = document.getElementById(ele.id);
        domtoimage.toPng(node).then(
            function(e){
                let aLink = document.createElement('a')
                aLink.download = 'fileName_'+ele.id+'.png' // 文件名后缀需要和dataurl表示的相同,否则可能乱码
                aLink.href = e
                aLink.click();
                savetopng(ps);
            }
        );
    }
    savetopng(pages);

 

posted @ 2022-08-18 10:02  首席吐槽官秦寿  阅读(47)  评论(0编辑  收藏  举报