Использование pdf.js для рендеринга изображения JBIG2 в браузере

Я пытаюсь сделать изображение JBIG2 в браузере. Этот скрипт, который является частью pdf.js, похоже, делает это: https://github.com/mozilla/pdf.js/blob/master/src/core/jbig2.js

Только у него нет инструкций по его использованию, поскольку он обычно выполняется как зависимость pdf.js (для полного рендеринга PDF, который мне не нужен или не нужен).

Может кто-нибудь выяснить, как я использовал бы этот скрипт для рендеринга изображения JBIG2 на веб-странице?

3 ответа

Поскольку никто не помог вам с этим, позвольте мне хотя бы поделиться своим прогрессом в этой проблеме:

<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 элемент (в идеале вы должны создать pixeldataarray, а затем использовать putImageData).

Теперь позвольте мне наметить для вас способ "разобраться" с остальным решением. Вероятно, лучше всего подойдет pdf.js, добавление журналирования, создание pdf только с одним изображением jbig2, а затем наблюдение за тем, как именно указанный массив выводится на холст (и как / где определяются размеры).

JBIG2, используемый в спецификации PDF, является подмножеством полной спецификации JBIG2 (так называемый встроенный профиль). Например, в pdf у вас может быть поток jbig2, который может ссылаться только на один словарь общих символов. Полная спецификация не имеет этого ограничения, и она также определяет формат для объединения всех частей (все это отсутствует в pdfjs).

Таким образом, то, что вы ищете, технически возможно (с некоторыми усилиями), но это не просто.

Не могли бы вы обработать это на стороне сервера?

Есть хороший пост о стековерсии потока об использовании Java или инструментов

Распечатать PDF, содержащий изображения JBIG2

Другие вопросы по тегам