Pdf.js: PDFJS.getDocument๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ

์— ๋งŒ๋“  2014๋…„ 12์›” 31์ผ  ยท  12์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mozilla/pdf.js

๋‚˜๋Š” ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ(pdf.js ๋ฐ ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Œ)์—์„œ grails ์•ฑ์„ ์‹คํ–‰ ์ค‘์ด๋ฉฐ file: url์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ์ž…๋ ฅ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด์„ ์ „๋‹ฌํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์‹คํŒจํ•  ๊ฒƒ์ด๋ผ๊ณ  ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ ๋งํ•˜๋ฉด "๊ฒฝ๊ณ : ๊ฐ€์งœ ์ž‘์—…์ž ์„ค์ •" ์™ธ์—๋Š” ์•„๋ฌด ๋ง๋„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

this.base64ToBinary = function(dataURI) {
        var BASE64_MARKER = ';base64,';
        var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length;
        var base64 = dataURI.substring(base64Index);
        var raw = window.atob(base64);
        var rawLength = raw.length;
        var array = new Uint8Array(new ArrayBuffer(rawLength));

        for(i = 0; i < rawLength; i++) {
        array[i] = raw.charCodeAt(i);
        }
        return array;
    };

PDFJS.disableWorker = true; // due to CORS

// I convert some base64 data to binary data here which comes back correctly
var data = utilities.base64ToBinary(result);

PDFJS.getDocument(data).then(function (pdf) {
         //nothing console logs or reaches here
         console.log(pdf);
}).catch(function(error){
//no error message is logged either
            console.log("Error occurred", error);
        });

์ œ๊ฐ€ ์„ค์ •์„ ์ œ๋Œ€๋กœ ๋ชปํ•œ๊ฑด์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. pdf.js๋ฅผ ํฌํ•จํ•˜์—ฌ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด viewer.js๋„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ๋˜ํ•œ ํ˜ธํ™˜์„ฑ ํŒŒ์ผ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค ... ์„ค์ •์ด ๋งค์šฐ ๋ช…ํ™•ํ•˜์ง€ ์•Š๊ณ  ์ด ์˜ˆ์ œ http://jsfiddle.net/epistemex/LUNaJ/ ๊ฐ€ ์ž‘๋™ํ•˜๊ณ  ๋‚ด ๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ฐจ์ด์ ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•ด๋‹น ์˜ˆ์ œ์—์„œ ์ œ๊ณต๋œ URL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋™์ผํ•œ ๋‚ด์šฉ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

screen shot 2014-12-31 at 11 59 17 am

1-other 4-information-requested

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

"pdf.js ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ๊ฒฐํ•ฉ๋œ ํŒŒ์ผ์˜ ์ผ๋ถ€์ธ ๊ฒฝ์šฐ์—๋Š” ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." ์‚ฌ์‹ค์ด์ง€๋งŒ grails๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‚ด ์ž์‹ ์˜ ๋ฌธ์ œ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ํ‘œ์ค€ ๋ฐฉ๋ฒ•์„ ๋” ์ •ํ™•ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์–ด์จŒ๋“  ๋ฐ˜๋ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋ฉ์ด ๊ฐ€๋“ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  12 ๋Œ“๊ธ€

์ผ๋ถ€ ์—…๋ฐ์ดํŠธ๋ฅผ ํ†ตํ•ด ์ด ๋ฌธ์ œ๋ฅผ ๋ณด๋‹ค ํฌ๊ด„์ ์œผ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ๊ธฐ๋Šฅ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋‚ด ์ฝ˜์†”์— ํ‘œ์‹œ๋˜๋Š” ๋ชจ๋“  ๊ฒƒ์€ ์Šคํฌ๋ฆฐ์ƒท์— ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์™„์ „ํ•œ ์˜ˆ๋ฅผ ๋ณด๊ณ  ๋กœ์ปฌ์—์„œ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ๋„์›€์„ ๋“œ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. https://github.com/mozilla/pdf.js/blob/master/CONTRIBUTING.md ๋ฅผ ์ฝ๊ณ  ์š”์ฒญ์— ๋”ฐ๋ผ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

@yurydelendik ์–ด๋–ป๊ฒŒ ๋ฐ”์ด์˜ฌ๋ฆฐ ์˜ˆ์ œ๊ฐ€ ์ž‘๋™ํ•˜์ง€๋งŒ ์ •ํ™•ํžˆ ๋™์ผํ•œ ์ฝ”๋“œ๊ฐ€ ๋‚ด ํ™˜๊ฒฝ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‚˜๋Š” ๋‹น์‹ ์„ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค ... ๋‚ด๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜์žˆ๋Š” ์ตœ์„ ์€ Google ํ–‰์•„์›ƒ์ด๋‚˜ ์Šคํฌ๋ฆฐํžˆ์–ด๋กœ๋ฅผ ๋ณด์—ฌ๋“œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์†Œํ•œ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

(๊ฒฝํ—˜์ƒ) ์ถ”์ธก:

  • ๋ ˆ๊ฑฐ์‹œ ์›นํ‚ท/์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„(๋ณดํ†ต compatibility.js๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ˆ˜์ •๋จ)
  • ์ด์ „ PDF.js ๋ฒ„์ „(์ถœ์‹œ๋œ ๋ฒ„์ „ ๋˜๋Š” npm/bower pdfjs-dist๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค)
  • disableWorker/workerSrc์— ๋Œ€ํ•œ ์ž˜๋ชป๋œ ๊ตฌ์„ฑ
  • ๋ฌธ์ œ ๋ณด๊ณ ์ž/๊ฐœ๋ฐœ์ž์˜ ๋‹จ์ˆœ ์‹ค์ˆ˜

pdf.worker.js๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ตœ์‹  ๋ฆด๋ฆฌ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ disableWorker/workerSrc์— ๋Œ€ํ•œ ๋ฌธ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

pdf.worker.js๋Š” PDF ํŒŒ์‹ฑ(์™ธ๋ถ€ ํŽ˜์ด์ง€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ)์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฉ”์ธ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. disableWorker=true์ธ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ํŽ˜์ด์ง€์— ์ž๋™์œผ๋กœ ๋กœ๋“œ๋˜๊ณ (workerSrc ์œ„์น˜์—์„œ) PDF ๊ตฌ๋ฌธ ๋ถ„์„์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ UI๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. https://github.com/mozilla/pdf.js/blob/master/src/display/api.js#L65 ์ฐธ์กฐ

์•„, ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ƒˆ์Šต๋‹ˆ๋‹ค... ๋ฌธ์„œ์— ์ด๋ฅผ ๊ธฐ๋กํ•ด ๋‘๊ฑฐ๋‚˜ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ workerSrc๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ—ค๋“œ์— ์žˆ๋Š” ๋งˆ์ง€๋ง‰ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋‚ด๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€๋งŒ ์•ฑ์ด grails์ด๊ฑฐ๋‚˜ ์ผ๋ถ€ ๊ฒฐํ•ฉ๋œ ํŒŒ์ผ uri๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ๋˜ํ•œ ๋งˆ์ง€๋ง‰ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ์— ์˜ฌ๋ฐ”๋ฅธ ์†Œ์Šค๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์•ˆ์ •์ ์œผ๋กœ ๊ฐ€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ๊ฐ src์—์„œ pdf.js๋ฅผ ์ฐพ๋Š” ํ—ค๋“œ์˜ ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ๋ฐ˜๋ณตํ•œ ๋‹ค์Œ ๋งˆ์ง€๋ง‰ ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋Œ€์‹  ์˜ฌ๋ฐ”๋ฅธ ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ grails์— ๋Œ€ํ•ด ์•„๋Š” ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” workerSrc๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ๋ฐ˜๋ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

pdf.js ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ๊ฒฐํ•ฉ๋œ ํŒŒ์ผ์˜ ์ผ๋ถ€์ธ ๊ฒฝ์šฐ์—๋Š” ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋‹ซ์Šต๋‹ˆ๋‹ค.

"pdf.js ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ๊ฒฐํ•ฉ๋œ ํŒŒ์ผ์˜ ์ผ๋ถ€์ธ ๊ฒฝ์šฐ์—๋Š” ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." ์‚ฌ์‹ค์ด์ง€๋งŒ grails๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‚ด ์ž์‹ ์˜ ๋ฌธ์ œ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ํ‘œ์ค€ ๋ฐฉ๋ฒ•์„ ๋” ์ •ํ™•ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์–ด์จŒ๋“  ๋ฐ˜๋ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋ฉ์ด ๊ฐ€๋“ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰