使用pdf.js在浏览器中呈现JBIG2图像

时间:2014-03-08 17:16:12

标签: javascript pdf pdf.js jbig2

我正在尝试在浏览器中呈现JBIG2图像。这个脚本是pdf.js的一部分,似乎是这样做的: https://github.com/mozilla/pdf.js/blob/master/src/core/jbig2.js

只有它没有关于其用法的说明,因为它通常作为pdf.js的依赖项执行(对于完整的PDF渲染,我不想要或不需要。)

有人能弄明白我如何使用这个脚本在网页上呈现JBIG2图像吗?

3 个答案:

答案 0 :(得分:1)

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

<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>

所以,这会使所有相关的依赖关系变得清晰,它包含我认为应该调用parseChunks函数的方式(我确信Uint8Array部分与XMLHttpRequest中的arraybuffer结合使用,不确定是否我不应该首先切片或类似的东西)。返回数据的数组看起来像某种像素数组,但缺少有关宽度或高度的任何信息我不知道如何继续。此外,您提供的示例.jbig2文件在STDU查看器(我可以找到查看.jbig2文件的唯一免费应用程序)中出现损坏错误,因此我无法检查图像是否大部分为白色(如结果数据似乎暗示)也不是手工绘制结果似乎是一个好主意,因为我没有任何宽度或高度。如果你想绘制它的方式当然是一个canvas元素(理想情况下你应该构造一个pixeldataarray然后使用putImageData)。

现在,让我概述一种方法,让您“找出”解决方案的其余部分。什么最好的工作可能是分支pdf.js,添加日志记录,生成一个只有一个jbig2图像的pdf,然后观察上面的数组如何被绘制到画布(以及如何/在何处确定尺寸)。

答案 1 :(得分:0)

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

总而言之,您所寻求的是技术上可行的(需要付出一些努力),但这并不简单。

答案 2 :(得分:0)

你能处理它的服务器端吗?

有关使用Java或工具的stackoverflow的好文章

Print PDF that contains JBIG2 images