Javascript 使用pdf.js在浏览器中渲染JBIG2图像

Javascript 使用pdf.js在浏览器中渲染JBIG2图像,javascript,pdf,pdf.js,jbig2,Javascript,Pdf,Pdf.js,Jbig2,我正在尝试在浏览器中渲染JBIG2图像。此脚本是pdf.js的一部分,它似乎可以执行以下操作: 只是它没有使用说明,因为它通常作为pdf.js的依赖项执行(用于完整的pdf呈现,我不希望也不需要) 有人知道我将如何使用此脚本在网页上呈现JBIG2图像吗?PDF规范中使用的JBIG2是完整JBIG2规范(所谓的嵌入式配置文件)的子集。例如,在pdf中,您可以有一个jbig2流,它只能引用单个共享符号字典。完整的规范没有这个限制,它还定义了一种将所有部分组合在一起的格式(pdfjs中缺少所有这些内

我正在尝试在浏览器中渲染JBIG2图像。此脚本是pdf.js的一部分,它似乎可以执行以下操作:

只是它没有使用说明,因为它通常作为pdf.js的依赖项执行(用于完整的pdf呈现,我不希望也不需要)


有人知道我将如何使用此脚本在网页上呈现JBIG2图像吗?

PDF规范中使用的JBIG2是完整JBIG2规范(所谓的嵌入式配置文件)的子集。例如,在pdf中,您可以有一个jbig2流,它只能引用单个共享符号字典。完整的规范没有这个限制,它还定义了一种将所有部分组合在一起的格式(pdfjs中缺少所有这些内容)


总之,您所寻找的在技术上是可能的(需要一些努力),但并不简单。

由于没有人帮助您解决这一问题,至少让我分享一下我在这个问题上的进展:

<script src="arithmetic_decoder.js"></script>
<script src="util.js"></script>
<script src="jbig2.js"></script>
<script>
    var jbig2 = new Jbig2Image();
    httpRequest = new XMLHttpRequest();
    httpRequest.responseType = 'arraybuffer';
    httpRequest.onreadystatechange = function() {
        if (httpRequest.readyState === 4) {
            if (httpRequest.status === 200) {
                var data = jbig2.parseChunks([{
                    data:new Uint8Array(httpRequest.response),
                    start:0,
                    end:httpRequest.response.byteLength
                }]);
                for (var i = 0; i < data.length; i++)
                    data[i] ^= 0xFF;
                console.log(data);
            } else {
                alert('There was a problem with the request.');
            }
        }
    };
    httpRequest.open('GET', "sample.jbig2");
    httpRequest.send(); 
</script>

var jbig2=新Jbig2Image();
httpRequest=新的XMLHttpRequest();
httpRequest.responseType='arraybuffer';
httpRequest.onreadystatechange=函数(){
if(httpRequest.readyState==4){
if(httpRequest.status==200){
var data=jbig2.parseChunks([{
数据:新的UINT8阵列(httpRequest.response),
起点:0,
结束:httpRequest.response.bytellength
}]);
对于(变量i=0;i
因此,这使所有相关的依赖关系变得清晰,它包含了我认为应该调用
parseChunks
函数的方式(我确信Uint8Array部分与XMLHttpRequest中的arraybuffer结合在一起,不确定我是否应该首先将其切片或诸如此类)。返回到数据的数组看起来像某种像素数组,但缺少关于宽度或高度的任何信息,我不确定如何继续。此外,您提供的示例
.jbig2
文件在STDU查看器(我能找到的查看
.jbig2
文件的唯一免费应用程序)中出现损坏错误,因此我无法检查图像是否大部分为白色(结果数据似乎表明)手工绘制结果也不是一个好主意,因为我没有任何宽度或高度。如果您希望绘制它,那么方法当然是一个
canvas
元素(理想情况下,您应该构建一个pixeldataarray,然后使用它)


现在,让我概述一种方法,让您“了解”解决方案的其余部分。最有效的方法可能是分叉pdf.js,添加日志记录,生成一个只包含一个jbig2图像的pdf,然后观察上面的数组如何精确地绘制到画布上(以及如何/在何处确定维度)

您能在服务器端处理它吗

关于使用Java或工具的stackoverflow有一篇很好的文章


你试过什么了吗?是的,我试过弄清楚它是如何工作的,但弄糊涂了。你能提供你要显示的图像供我们测试吗?下面是一个JBIG2图像流示例:此提交可能会提供一些PDFJS如何使用此解码器的线索:我要呈现的JBIG2已经为PDF流制作,因此,它们与PDF嵌入式JBIG2s相同。此外,它们只包含通用区域编码,没有符号编码(因此没有全局文件)