1

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

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

谁能弄清楚我将如何使用此脚本在网页上呈现 JBIG2 图像?

4

3 回答 3

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 中的数组缓冲区相结合,不确定我是否应该先将其切片或任何类似的东西)。返回数据的数组看起来像某种像素数组,但缺少有关宽度或高度的任何信息,我不知道如何继续。.jbig2此外,您提供的示例文件在 STDU 查看器(我能找到的唯一一个查看.jbig2文件的免费应用程序)中出现损坏错误,因此我无法检查图像是否大部分为白色(正如结果数据似乎暗示的那样),也无法绘制手工结果似乎是个好主意,因为我没有任何宽度或高度。如果你想画它,当然要走的路是canvas元素(理想情况下,您应该构造一个像素数据数组,然后使用putImageData)。

现在,让我概述一种方法,让您“找出”解决方案的其余部分。最有效的方法可能是分叉 pdf.js、添加日志记录、仅使用单个 jbig2 图像生成 pdf,然后观察上述数组是如何准确地绘制到画布上的(以及确定尺寸的方式/位置)。

于 2014-03-16T02:01:19.120 回答
0

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

关于使用 Java 或工具的 stackoverflow 上有一篇很好的帖子

打印包含 JBIG2 图像的 PDF

于 2014-03-18T15:07:06.233 回答
0

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

总之,您正在寻找的东西在技术上是可行的(需要付出一些努力),但这并不简单。

于 2014-03-10T21:34:50.353 回答