Pdf.js: ๋ฌด์ž‘์œ„ / ๋ช…๋ฐฑํ•œ "๊ตต๊ฒŒ"/ ์†์ƒ

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

PDF ํŒŒ์ผ์— ์—ฐ๊ฒฐ :
default.pdf

๊ตฌ์„ฑ :

  • ์›น ๋ธŒ๋ผ์šฐ์ € ๋ฐ ํ•ด๋‹น ๋ฒ„์ „ : ๋ฒ„์ „ 49.0.2623.87 (64 ๋น„ํŠธ) [๋ฌธ์ œ๋Š” ๋ธŒ๋ผ์šฐ์ €์— ํ•œ์ •๋˜์ง€ ์•Š์Œ]
  • ์šด์˜ ์ฒด์ œ ๋ฐ ํ•ด๋‹น ๋ฒ„์ „ : Linux Ubuntu 15.10 [OS ํŠน์ • ์—†์Œ]
  • PDF.js ๋ฒ„์ „ : [all / 1.3.91]
  • ํ™•์žฅ : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํฌํ•จ ๋œ pdf.js

๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ๋‹จ๊ณ„ :

  1. ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ทฐ์–ด ์—ด๊ธฐ
  2. ๋•Œ๋•Œ๋กœ ๋””์Šคํ”Œ๋ ˆ์ด๊ฐ€ ์ •์ƒ์ด๊ณ , ๋•Œ๋•Œ๋กœ ์ž„์˜์˜ "๊ตต๊ฒŒ"๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋นˆ๋„๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ๋‚˜ํƒ€๋‚จ
  4. ์ด๊ฒƒ์€ "PDFJS.disableWorker = true;"๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. (์ด ๋ฌธ์ œ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋จ)
  5. _every_ view์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋Œ€๋Ÿ‰ ๋‹ค์šด๋กœ๋“œ ๋•Œ๋ฌธ์— ์ž‘์—…์ž๋ฅผ ๋น„ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  6. ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ๋ฌธ์ž์—ด์—์„œ ์ฝ˜ํ…์ธ ๊ฐ€๋กœ๋“œ ๋จ
  7. ๋ฌธ์ž์—ด ๋‚ด์šฉ์ด Ok์™€ ์†์ƒ๋œ ๋ทฐ ์‚ฌ์ด์—์„œ ์ผ๊ด€์„ฑ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
  8. ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€ ๋ฌธ์„œ์—์„œ ํ•œ ํŽ˜์ด์ง€ ์•ž๋’ค๋กœ ์ด๋™ํ•˜๋ฉด ํ•ญ์ƒ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? (์Šคํฌ๋ฆฐ ์ƒท ์ถ”๊ฐ€)
ok

๋ฌด์—‡์ด ์ž˜๋ชป ๋˜์—ˆ๋‚˜์š”? (์Šคํฌ๋ฆฐ ์ƒท ์ถ”๊ฐ€)
corrupt

1-other 4-chrome-specific

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

๋ชจ๋“  ๋ทฐ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋Œ€๋Ÿ‰ ๋‹ค์šด๋กœ๋“œ ๋•Œ๋ฌธ์— ์ž‘์—…์ž๋ฅผ ๋น„ํ™œ์„ฑํ™” ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ด ๋ถ€๋ถ„์„ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

getDocument๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋‹จ์ผ PDFWorker ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๊ธ€๊ผด์ด ์†์ƒ๋˜๋Š” ์›์ธ์„ ๋งํ•˜๊ธฐ๋Š” ์–ด๋ ต์ง€๋งŒ ์ž‘์—… ์˜ˆ์ œ์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์žˆ์œผ๋ฉด ์•ฝ๊ฐ„์˜ ๋น›์„ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ์˜ˆ์ œ๋ฅผ ์ƒ์„ฑ / ๊ฒŒ์‹œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์‰ฝ๊ฒŒ ๊ฒŒ์‹œ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ž‘์—…์ž๊ฐ€ ํ™œ์„ฑํ™” ๋œ ์ƒํƒœ์—์„œ ์‹คํ–‰ํ•˜๋ฉด 100 % ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋น„ํ™œ์„ฑํ™” ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•˜๋ฉด ์œ„์— ํ‘œ์‹œ๋œ ๋ฌธ์ œ๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ €๋Š” "์™œ"์ž‘์—…์ž๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์—ฌ "์ž‘์—…์ž๋ฅผ ํ™œ์„ฑํ™”"๋ผ๋Š” ์‘๋‹ต์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋งŽ์€ ์ž‘์€ PDF๋ฅผ ์ƒ๋‹นํžˆ ๋น ๋ฅด๊ฒŒ ํ‘œ์‹œํ•˜๊ณ  pdf_worker.js ์šฉ 1.2Mb ๋‹ค์šด๋กœ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋””์Šคํ”Œ๋ ˆ์ด๋Š” ์‹ค์šฉ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์›น ์ž‘์—…์ž ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์ž‘์—…์ž๊ฐ€ ํ˜ธ์ถœ ๋œ .js ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์บ์‹œ ํ•  ์ˆ˜์žˆ๋Š” ์˜ต์…˜์ด ์žˆ๋Š”์ง€ ํ™•์ธํ–ˆ์ง€๋งŒ ์•„๋ฌด๊ฒƒ๋„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์ดˆ๊ธฐ ์ถ”์ธก (ํšจ๊ณผ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ)์€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ฐ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด๋กœ๋“œ๋˜๋ฉด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง€์›Œ์ง€๋Š” ์ „์—ญ ๋ฒ”์œ„๊ฐ€ ์–ด๋”˜๊ฐ€์—์žˆ์–ด ์Šคํฌ๋ฆฝํŠธ ๋œ ์ž‘์—…์ž๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ์žฌ์‚ฌ์šฉ๋˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ (!) ๋ฌธ์ œ๊ฐ€ FIRST pdf ๋””์Šคํ”Œ๋ ˆ์ด์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋ฌด์—‡์„๋ณด์•„์•ผํ• ์ง€ ์•Œ๊ธฐ ์œ„ํ•ด ์•ฝ๊ฐ„์˜ ์†์‹ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” "์™œ"์ž‘์—…์ž๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์—ฌ "์ž‘์—…์ž๋ฅผ ํ™œ์„ฑํ™”"๋ผ๋Š” ์‘๋‹ต์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋งŽ์€ ์ž‘์€ PDF๋ฅผ ์ƒ๋‹นํžˆ ๋น ๋ฅด๊ฒŒ ํ‘œ์‹œํ•˜๊ณ  pdf_worker.js ์šฉ 1.2Mb ๋‹ค์šด๋กœ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋””์Šคํ”Œ๋ ˆ์ด๋Š” ์‹ค์šฉ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@oddjobz ๋‚˜๋Š” ์—ฌ์ „ํžˆ ์šฐ๋ ค๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์žฅ์• ์ธ ์ž‘์—…์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด _still_ pdf.worker.js๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์ง€๋งŒ ์ฃผ ์Šค๋ ˆ๋“œ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์ •์  ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์บ์‹ฑํ•˜๊ณ  ์ถ”๊ฐ€ ๋…ธ๋ ฅ์—†์ด ๊ฐ ์š”์ฒญ์— ๋Œ€ํ•ด 1.2Mb ๋‹ค์šด๋กœ๋“œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PDFWorker๋Š” ๋‹จ์ผ ํŽ˜์ด์ง€์—์„œ ์›น ์ž‘์—…์ž์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์บ์‹ฑํ•˜๋Š” ๋ฐ ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค (์˜ˆ : ์—ฌ๋Ÿฌ getDocuments ์ˆ˜ํ–‰์‹œ).

์ด ๋ฌธ์ œ๊ฐ€ ์†”๋ฃจ์…˜์— ๋Œ€ํ•œ ์ฝ”๋“œ์—†์ด ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ PDF.js๋Š” ํ‘œ์ค€ ๋ธŒ๋ผ์šฐ์ € (๊ธฐ๋ณธ ๊ตฌ์„ฑ)๊ฐ€์žˆ๋Š” ํ‘œ์ค€ ์›น ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉํ•  ๋•Œ ์›น ์ž‘์—…์ž ์ฝ”๋“œ๋ฅผ ์บ์‹œํ•ฉ๋‹ˆ๋‹ค.

๊ธ€์Ž„์š”, ์ œ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋Š” ์ฝ”๋“œ์™€ ๋‹น์‹ ์ด ๊ฐ€์ง€๊ณ ์žˆ๋Š” ์ฝ”๋“œ์˜ ์ฐจ์ด์ ์€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์–ด๋”˜๊ฐ€์— ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ, ์ž‘์—…์ž๊ฐ€ ๋น„ํ™œ์„ฑํ™” ๋œ ์ƒํƒœ์—์„œ pdf_worker.js๋Š” ์ฒซ ๋ฒˆ์งธ ํžˆํŠธ "only"์—์„œ ํ•œ ๋ฒˆ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ์ž‘์—…์ž๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋ชจ๋“  ์ƒˆ ๋ฌธ์„œ์— ์ฝ”๋“œ๋ฅผ๋กœ๋“œํ•˜๊ณ  ๋‚ด๊ฐ€ํ•˜๋Š” ์ผ์€ ์บ์‹ฑ์— ์˜ํ–ฅ์„์ฃผ์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (์ฆ‰, ์บ์‹œ๋˜์ง€ ์•Š์Œ) Chrome ๊ฐœ๋ฐœ์ž๊ฐ€ ์›น ์ž‘์—…์ž ๋ฐ ์บ์‹œ ๋œ ์ฝ”๋“œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์บ์‹œ๋ฅผ ํ•ด์ œํ–ˆ๋‹ค๊ณ  ์˜์‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ณผ ์ˆ˜์žˆ๋Š” ํ•œ ๋ชจ๋“  ํ—ค๋”๋Š” ์บ์‹ฑ์„ ์œ„ํ•ด ์žˆ์–ด์•ผํ•˜์ง€๋งŒ ์บ์‹ฑ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๋‹ค๋ฅธ ๊ฒƒ๋“ค์€ _is_ ์บ์‹œ ๋จ)

์„ธ ๊ฐ€์ง€ ๊ด€๋ จ ๋น„ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
ใ…. ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๊ฐ€์žˆ๋Š” ๊ธฐ๋ณธ ์ฝ”๋“œ ๋ธ”๋ก
๋น„. ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋Š” Onload
์”จ. DIV์—์„œ PDF๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋…๋ฆฝํ˜• ํด๋ž˜์Šค

๋ฉ”์ธ ์ฝ”๋“œ ๋ธ”๋ก;

<script type="text/javascript" src="js/compatibility.js"></script>
<script type="text/javascript" src="js/pdf.js"></script>

์˜จ๋กœ๋“œ ์ฝ”๋“œ;

    PDFJS.disableWorker = true;
    PDFJS.verbosity = PDFJS.VERBOSITY_LEVELS.debug;
    PDFJS.workerSrc = "/js/pdf.worker.js";

ํด๋ž˜์Šค ์ •์˜;

JS.require('JS.Class',function(Class) {

    CLASS.PDFViewer = new Class({

        locked  : false,
        page        : 0,
        pages   : 0,
        pdf     : null,
        doc_id  : null,

        initialize: function(prefix) {
            this.canvas   = prefix+'-canvas';           // Canvas element ID we'll be rendering to
            this.prefix   = prefix;
            this.id_page  = '#'+this.canvas+'-page';    // Ident of page number
            this.id_pages = '#'+this.canvas+'-pages';   // Ident of page count
            this.setfocus(null);                        // Element to focus after render
        },
        reset:      function() { this.now_showing = null; console.log("PDF Reset")},
        set:        function(doc_id) { this.doc_id = doc_id; console.log("Docid:",doc_id) },
        load:       function() { this.fetch(this.doc_id); },
        set_doc:    function() {},
        setfocus: function(field_id) { this.focuson = field_id; },

        decode: function(base64) {
            var raw = atob(base64);
            var uint8Array = new Uint8Array(raw.length);
            for (var i = 0; i < raw.length; i++) {
                uint8Array[i] = raw.charCodeAt(i);
                }
          return uint8Array;
        },

        full_screen: function() {
            if( $('#'+this.prefix+'-hide-me').is(':visible') ) {
                $('#'+this.prefix+'-hide-me').hide();
                $('#'+this.prefix+'-full-screen').removeClass("col-sm-7");
                $('#'+this.prefix+'-full-screen').addClass("col-sm-12");
            } else {
                $('#'+this.prefix+'-hide-me').show();
                $('#'+this.prefix+'-full-screen').removeClass("col-sm-12");
                $('#'+this.prefix+'-full-screen').addClass("col-sm-7");
            }
            this.turn_page();
        },
        focus: function() {
            if(this.focuson) {
                console.log("SetFocus>>",this.focuson);
                setTimeout("$('"+this.focuson+"').focus()",100);
                this.focuson = null;
            }
        },
        display: function(pdf) {
            this.pdf = pdf;
            $(this.id_pages).text(this.pdf.numPages);
            this.pages = this.pdf.numPages;
            this.page = 1;
            this.turn_page();
        },
        fetch: function(rid) {
            if(this.locked) return false;
            var self = this;
            var src = '/images/default.pdf';
            function success(data) {
                if(!LIB.check_error(data)) return false;
                if(data.pdf) src = self.decode(data.pdf);
                self.locked = true;
                PDFJS.getDocument(src).then(function(pdf){ self.display(pdf); });
                return true;
            }
            ionman.call('nac.rpc.pdf_spec',{'rid': rid},success)
            return true;
        },
        turn_page: function() {
        var self = this;
            self.pdf.getPage(self.page).then(function(page) {
                var canvas = document.getElementById(self.canvas);
        var ctx = canvas.getContext('2d');
        var unscaledViewport = page.getViewport(1.0);
                canvas.width = $('#'+self.canvas).width();
                var scale = canvas.width / unscaledViewport.width;
                var viewport = page.getViewport(scale);
                canvas.height = viewport.height;
            var renderContext = { canvasContext: ctx, viewport: viewport };
        page.render(renderContext).promise.then(function(){
                setTimeout(function(){
                    self.locked = false;
                        self.focus();
                    },250);
                });
                $(self.id_page).text(self.page);
            });
        },
        next: function() {
            if( this.page == this.pages) return;
            this.page += 1;
            this.turn_page();
        },
        prev: function() {
            if( this.page == 1) return;
            this.page -= 1;
            this.turn_page();
        }
    });

๊ทธ๋ž˜์„œ ๋‚˜๋Š”ํ•ฉ๋‹ˆ๋‹ค.

var viewer = CLASS.PDFViewer('pdf');
viewer.fetch();

๊ทธ๋ฆฌ๊ณ  ๊ธฐ๋ณธ ๋ฌธ์„œ๋Š” ID๊ฐ€ "pdf-canvas"์ธ DIV์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์‹œ๋„ํ•ด ๋ด…์‹œ๋‹ค :

  1. Chrome์—์„œ http://mozilla.github.io/pdf.js/web/viewer.html ์„ ์—ฝ๋‹ˆ ๋‹ค
  2. ๋„คํŠธ์›Œํฌ ํŽ˜์ด์ง€์—์„œ devtools๋ฅผ ์—ด๊ณ  ๋ถ„ํ•  ์ฝ˜์†”์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค (์ด ํƒญ์—์„œ 'esc'๋ฅผ ๋ˆ„๋ฆ„).
  3. ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค (์˜ˆ์™ธ ์ค‘๋‹จ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ƒˆ๋กœ ๊ณ ์นจ).
  4. "์บ์‹œ ๋น„ํ™œ์„ฑํ™”"๊ฐ€ ๊บผ์ ธ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค (๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์„ ํƒ ์ทจ์†Œํ•˜๊ณ  ์ƒˆ๋กœ ๊ณ ์นจ).
  5. ์ฝ˜์†”์—์„œ PDFJS.getDocument('http://mozilla.github.io/pdf.js/web/compressed.tracemonkey-pldi-09.pdf')
  6. ๋‘ ๋ฒˆ์งธ "pdf.worker.js"์˜ ์ƒํƒœ๋Š” "200 OK (from cache)"์ž…๋‹ˆ๋‹ค.

screen shot 2016-03-31 at 10 51 26 am

์ฝ”๋“œ ์กฐ๊ฐ์€ ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋”˜๊ฐ€์— ์ž‘์€ ์˜ˆ์ œ๋ฅผ ๋ฐฐํฌํ•˜์‹ญ์‹œ์˜ค (์˜ˆ : github ํŽ˜์ด์ง€).

๊ทธ๋ž˜, ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋ณธ๋‹ค .. ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค PDF.js์˜ ์ตœ์‹  ๋ฒ„์ „ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค .. ์ฐจ์ด๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด Varnish๊ฐ€ ๋‚ด ์›น ์„œ๋ฒ„์— ๋Œ€ํ•ด ๋‚ด๋†“์€ ํ—ค๋”๋ฅผ ๋น„๊ตํ•˜์—ฌ ์บ์‹ฑ์ด ์•„๋‹Œ ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” Chrome ๊ฐœ๋ฐœ์ž๊ฐ€ ์›น ์ž‘์—…์ž ๋ฐ ์บ์‹œ ๋œ ์ฝ”๋“œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์บ์‹ฑ์„ ํ•ด์ œํ–ˆ๋‹ค๊ณ  ์˜์‹ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ต์…˜๊ณผ disableWorker ์˜ต์…˜ ์‚ฌ์ด์— ์—ฐ๊ฒฐ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. pdf.worker.js๋Š” ์ฐธ ๋˜๋Š” ๊ฑฐ์ง“ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์š”์ฒญ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์ œ๋Š” ์บ์‹ฑ๊ณผ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์‹œ์ง€๊ฐ€ disableWorker ๋ชจ๋“œ์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค (์‹ค์ œ๋กœ ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ๋ ˆ๊ฑฐ์‹œ ๋ธŒ๋ผ์šฐ์ € ๋ฐ ๋””๋ฒ„๊น… ์šฉ์ด์„ฑ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋งŒ ์ƒ์„ฑ๋จ). ๋ฌธ์ œ๊ฐ€ ๋ˆˆ์— ๋ณด์ด๋Š” ์ตœ์†Œํ•œ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๊ฐ–๋„๋ก ๋ฌธ์ œ ๋ฒ”์œ„๋ฅผ ์ขํžˆ๋Š” ๋ฐ ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค (์˜จ๋ผ์ธ ์•ก์„ธ์Šค ๊ฐ€๋Šฅ).

์ข‹์•„, ์ด๊ฒƒ์€ ํฅ๋ฏธ๋กœ์šด .. ๋”๋ฏธ ์ธ์ฆ์„œ (์—ฌ๊ธฐ์„œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„! = localhost)์—์„œ localhost : 8443 ์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์บ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ ํšจํ•œ ์ƒ์šฉ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ผ์ด๋ธŒ ์„œ๋ฒ„ ํฌํŠธ 443์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ ํ•  ๋•Œ ์บ์‹œ (!)๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์›น ์›Œ์ปค๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. (ํ•˜์ง€๋งŒ ์–ด๋”˜๊ฐ€์— ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค ...)

์ œ๊ฐ€ ๋ฏฟ์„ ์ˆ˜ ์žˆ์„์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค .. ๊ทธ๋ž˜์„œ ์Šคํฌ๋ฆฐ ์ƒท์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค ...

live

dev

์บ์‹œ ๋น„ํ™œ์„ฑํ™”๋Š” ํ™•์‹คํžˆ _not_ ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค ...
(์›น ์„œ๋ฒ„ ๊ตฌ์„ฑ์€ ๋™์ผ ํ•จ)

์—ฌ๊ธฐ์„œ ํ•  ์ผ์ด ๋” ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด ์ด๊ฒƒ์€ PDF.js์˜ ๋ฒ„๊ทธ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€ ์•Š๊ณ  ์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌํ˜„์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด (๊ฐ„ํ—์  ์ธ?) ์‹คํŒจ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜์žˆ๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค. ์˜จ๋ผ์ธ ๋ฐ๋ชจ๋ฅผ ๋งŒ๋“ค ๊ฒ ์ง€๋งŒ ์ฝ”๋”ฉ๊ณผ ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์‚ฌ์šฉ์ž ์ง€์ • ๋‚ด์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ Github์—์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋‹ค์šด๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.
screencapture 7

@ subhadip-codeclouds ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ๋ฌธ์ œ๋ฅผ ์—ด๊ณ  ์š”์ฒญ ๋œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

@ subhadip-codeclouds์ด PDF๋Š” ์–ด๋””์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

Chrome๊ณผ Ubuntu์—์„œ ๋™์ผํ•œ ๊ธ€๊ผด ๋ Œ๋”๋ง ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (๋‹ค๋ฅธ ํ”Œ๋žซํผ์„ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค). ๋งˆ์Šคํ„ฐ์˜ ์ตœ์‹  pdf.js๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋•Œ๋กœ๋Š” PDF๊ฐ€ @oddjobz ์˜ PDF์ฒ˜๋Ÿผ

๋‚˜๋Š” ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ๋˜๋Š” ๊ทธ๊ฒƒ์„ ์•ˆ์ •์ ์œผ๋กœ ์žฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ง๋กœ ๋ชจ๋ฅธ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๋‹ค. React๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์  ๋‹จ์ผ ํŽ˜์ด์ง€ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ข…์ข… ํƒญ์„ ํด๋ฆญํ•˜๋ฉด iframe์ด ์ƒ์„ฑ๋˜๊ณ  iframe ๋‚ด์— pdf.js๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. React์™€ ๋‚ด ์›น ์‚ฌ์ดํŠธ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ๊ฐ์•ˆํ•  ๋•Œ iframe์ด ์ƒ์„ฑ๋˜๊ณ  ํŒŒ๊ดด๋ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฒฐ๊ตญ์—๋Š” ํ•ญ์ƒ ๊ธ€๊ผด ๋ Œ๋”๋ง ์†์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•œ PDF์—์„œ ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค๋ฅธ PDF์—์„œ๋„ ๋ฌด์ž‘์œ„๋กœ ๋ฐœ์ƒํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€๋Š” ํ•ญ์ƒ ๊ดœ์ฐฎ๊ณ  ์ผ๋ถ€๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ์•„ ๋‚ด๊ธฐ ์œ„ํ•ด ์ผœ๊ฑฐ๋‚˜ ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ (์˜ˆ : ๋””๋ฒ„๊ทธ ํ”Œ๋ž˜๊ทธ)? ์ฝ˜์†”์— ์˜ค๋ฅ˜๋‚˜ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์‹œ์ž‘์‹œ ๊ฑฐ์˜ ํ•ญ์ƒ ๊ธ€๊ผด ๋ Œ๋”๋ง ์†์ƒ์œผ๋กœ ๋๋‚˜๋Š” PDF์ž…๋‹ˆ๋‹ค.
https://datalanche-sec-public.s3.amazonaws.com/filings/0001047469-15-008315/a2226328zex-31_2.htm.pdf

ํ•˜๋‚˜ ๋”. ๋™์ผํ•œ URL๋กœ Chrome์—์„œ ์ƒˆ ํƒญ์„ ์—ด๋ฉด PDF๊ฐ€ ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋™์ผํ•œ ํƒญ์— ๋จธ๋ฌด๋ฅด๊ณ  ์™„์ „ํžˆ ๋‹ค๋ฅธ ์›น ์‚ฌ์ดํŠธ๋กœ ์ด๋™ ํ•œ ๋‹ค์Œ ๋’ค๋กœ ๋‹จ์ถ”๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‚ด ์›น ์‚ฌ์ดํŠธ๋กœ ์ด๋™ํ•˜๋ฉด ๊ธ€๊ผด์ด ์†์ƒ๋œ PDF๊ฐ€ ์—ฌ์ „ํžˆ ์†์ƒ๋ฉ๋‹ˆ๋‹ค. ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜ ๋“  ํƒญ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ / ๋˜๋Š” ์บ์‹œ๊ฐ€ ์†์ƒ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Chrome์˜ ์บ์‹ฑ ๋ฌธ์ œ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์ž์„ธํ•œ ๋‚ด์šฉ์€ https://github.com/mozilla/pdf.js/issues/7751#issuecomment-256683285 ์ฐธ์กฐ).

์ด๊ฒƒ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€

๋•Œ๋•Œ๋กœ (์„ค๋ช… ํ•  ์ˆ˜์—†๋Š”) ์ด๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋งค์šฐ ๋“œ๋ฌผ๊ณ  ์‹ค์ œ๋กœ ์ถฉ๋ถ„ํžˆ ๋“œ๋ฌผ์ง€๋งŒ ๊ฑฑ์ •์„ ๋ฉˆ์ท„์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฐ€์ง„ ๋ฌธ์ œ๋Š” ์ค‘๋ณต ์ž‘์—…์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ž‘์—…์ด ์•„์ง ์ง„ํ–‰์ค‘์ธ ๋™์•ˆ pdf ๋ฌธ์„œ (์˜ˆ : ๋‹ค์Œ ํŽ˜์ด์ง€)์—์„œ ์ž‘์—… ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด ์†”๋ฃจ์…˜์€ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ์ž‘์—…์„ ๋ž˜ํ•‘ ํ•œ ๋‹ค์Œ ์‹œ์ž‘ ๋ฐ ์ข…๋ฃŒ ์ง€์ ์— ๋งˆ์Šคํ„ฐ ์ž ๊ธˆ์„ ์‚ฝ์ž…ํ•˜์—ฌ pdf ๊ด€๋ จ ์ž‘์—…์ด ์ถฉ๋Œํ•˜์ง€ ์•Š๋„๋กํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ "๋‚˜๋ฅผ ์œ„ํ•ด ์ˆ˜์ • ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค". ๋‚˜๋Š” pdf ํ•ญ๋ชฉ์ด ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ ๋˜๋Š” ์ž‘์—…์ž ํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰๋˜๋ฏ€๋กœ ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๊ณ  ๋ชจํ˜ธํ•˜๊ฒŒ ๊ฐ€์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ๊ธˆ ์ „ ์ด์—ˆ์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์Šค๋ ˆ๋”ฉ์ด ์˜ต์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ ์†”๋ฃจ์…˜์„ ๋ฐœ๊ฒฌํ–ˆ๋Š”๋ฐ ์„ฑ๋Šฅ์— ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ์ฃผ์—ˆ์ง€๋งŒ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ญ์ƒ ๋‚˜์—๊ฒŒ ๋ฐœ์ƒํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†์„ ์ •๋„๋กœ ๋ฌด์ž‘์œ„์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด ๊ฒฝ์šฐ์—๋„ ์Šค๋ ˆ๋”ฉ์œผ๋กœ ์ธํ•œ ๋ฉ”๋ชจ๋ฆฌ ์†์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์ง€๋งŒ Javascript๊ฐ€ ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

Javascript๊ฐ€ ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€. @oddjobz๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ” (?)๋Š” ํ•œ ๋ฒˆ์— ๋‘˜ ์ด์ƒ์˜ HTML5 ์บ”๋ฒ„์Šค์— ์น ํ•  ๋•Œ Chrome์— ๋ฒ„๊ทธ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฉฐ ๊ฒฐํ•จ์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์—†์œผ๋ฉด ์ถ”์ธกํ•˜๊ธฐ ์–ด๋ ต๊ณ  Chromium ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์˜๋ฏธ์žˆ๋Š” ๋ณด๊ณ ์„œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ œ ์ƒ๊ฐ์— (๋ฉ”๋ชจ๋ฆฌ์—์„œ) "์›น ์ž‘์—…์ž"๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ํšจ๊ณผ์ ์œผ๋กœ ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด ๊ธฐ๋Šฅ์„ ๋„๊ณ  "ํฐ"PDF๋ฅผ ๋ณด๋ ค๊ณ ํ•˜๋ฉด ์ด ๊ธฐ๋Šฅ์ด ์‚ฌ์šฉ๋˜๋Š” "์ด์œ "๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค ... :)

"์›น ์ž‘์—…์ž"๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ธฐ๋Šฅ์„ ๋„๊ณ  "ํฐ"PDF๋ฅผ ๋ณด๋ ค๊ณ ํ•˜๋ฉด์ด ๊ธฐ๋Šฅ์ด ์‚ฌ์šฉ๋˜๋Š” "์ด์œ "๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

OP๋Š”์ด ๊ธฐ๋Šฅ์„ ๋„๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Web Workers๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์ด๋Š” ๋ธŒ๋ผ์šฐ์ €๋กœ ๋น„๋‚œ์„ ์ด๋™์‹œํ‚ค๊ณ  JavaScript "์Šค๋ ˆ๋”ฉ"๊ณผ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

์•ฝ๊ฐ„ ๋ฏธ๋ฌ˜ํ•˜๊ณ  Javascript๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ์ด์ง€๋งŒ Chrome์€ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ์ด๋ฉฐ ์›น ์ž‘์—…์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‘ ๊ฐœ์˜ Chrome ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋‘˜ ์‚ฌ์ด์˜ ํ†ต์‹ ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์Šคํ„ฐ ๋งŒ DOM ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ UI ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ์„ธ์„œ ์ง‘์•ฝ์  ์ธ ์ž‘์—…์„ ์œ„ํ•ด ํ•˜์œ„ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ์Šค๋ ˆ๋“œ ๋‚˜ ํƒญ์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์›น ์›Œ์ปค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜๋ฉด ๋” ์žฌ๋ฏธ์žˆ์–ด ์ง€๋ฏ€๋กœ ํŽ˜์ด์ง€ ์ƒˆ๋กœ ๊ณ ์นจ ํ›„์—๋„ ํšจ๊ณผ์ ์œผ๋กœ ์‚ด์•„๋‚จ์Šต๋‹ˆ๋‹ค (์ฆ‰, ์ง€์†์ ์ž…๋‹ˆ๋‹ค). ๋‚˜๋Š” ์ด๊ฒƒ์œผ๋กœ ์ธํ•ด ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ด…๋‹ˆ๋‹ค ...

๋ฌผ๋ก ์ž…๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๋‚ด ์˜๊ฒฌ์€ ์Šค๋ ˆ๋”ฉ์—†์ด (์ฆ‰, ๋‚ด ์Šค๋ ˆ๋“œ ์ˆ˜์ค€ ์ž ๊ธˆ์„ ๊ตฌํ˜„ํ•˜์—ฌ)์ด ๋ฌธ์ œ์˜ 99 %๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. (๋‚˜๋ฅผ ์œ„ํ•ด).

@oddjobz , @rpedela ํ•˜๋“œ์›จ์–ด / gpu ๊ฐ€์†์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ๋ฌธ์ œ๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

@yurydelendik , yup, ๊ทธ๊ฒƒ์€ ๋‚ด๊ฐ€ ์‹œ๋„ํ•œ ์ฒซ ๋ฒˆ์งธ ์ผ ์ค‘ ํ•˜๋‚˜์˜€์Šต๋‹ˆ๋‹ค. (์ฐจ์ด ์—†์Œ)

@yurydelendik , ๋‚ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด 6 ๊ฐœ์›” ์ด์ƒ ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚จ์•„์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ "๋‹ค๋ฅด๊ณ "๊ฐ€์žฅ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ์‚ฌ์šฉ์ž ์˜ค๋ฅ˜ ๋˜๋Š” ๊ฐ€๋” ์ด์ƒํ•œ ๋ฌธ์„œ๊ฐ€๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฐ€์ง„ ๋ฌธ์ œ๋Š” ์ผ๊ด€ ์ ์ด์ง€๋Š” ์•Š์ง€๋งŒ 100 % ์žฌํ˜„ ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ ์ž‘์—… ๊ฐ„์˜ ์ค‘๋ณต์œผ๋กœ ์ธํ•ด (IMHO) ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ด์ „ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ์‹œ์ž‘๋œ ํ”„๋กœ์„ธ์Šค-์Šค๋ ˆ๋”ฉ ์—ฌ๋ถ€, ์ด์ „ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ์‹œ์ž‘๋˜๋Š” ์ž‘์—…์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋™ ์ž ๊ธˆ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ์žฌํ˜„ ๋œ ์˜ˆ๋Š” ๋ฌธ์„œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์•ž์œผ๋กœ ์Šค์บ”ํ•˜๊ณ  ์ด์ „ ํŽ˜์ด์ง€๊ฐ€ ๋ Œ๋”๋ง์„ ์™„์ „ํžˆ ์™„๋ฃŒํ•˜๊ธฐ ์ „์— "๋‹ค์Œ"์ฒ˜๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ์ด์ง€๋งŒ Chrome์€ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ์ด๋ฉฐ ์›น ์ž‘์—…์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‘ ๊ฐœ์˜ Chrome ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ  ๋‘˜ ์‚ฌ์ด์˜ ํ†ต์‹ ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์Šคํ„ฐ ๋งŒ DOM ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์–ป๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ UI ์Šค๋ ˆ๋“œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ์„ธ์„œ ์ง‘์•ฝ์  ์ธ ์ž‘์—…์„ ์œ„ํ•ด ํ•˜์œ„ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"์›น ์ž‘์—…์ž"๋ผ๋Š” ์šฉ์–ด๊ฐ€ ํฌํ•จ ๋œ์ด ๋ฌธ์žฅ์€ ํ˜ผ๋ž€ ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์ง„์ˆ ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ฐธ์กฐ๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์›น ์›Œ์ปค๋Š” ์„ค๊ณ„ ์ƒ DOM์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ PDF.js๋Š” ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ํŽ˜์ธํŒ…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Chrome์˜ ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? DOM์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ์›น ์›Œ์ปค๊ฐ€ ์•„๋‹Œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์˜ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ „ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ์‹œ์ž‘๋œ ์ž‘์—…-์Šค๋ ˆ๋”ฉ ์—ฌ๋ถ€, ์ด์ „ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ์‹œ์ž‘๋˜๋Š” ์ž‘์—…์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋™ ์ž ๊ธˆ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ปจํ…์ŠคํŠธ์—์„œ "์ž‘์—…"์ด๋ž€ ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? API์˜ render() ํ˜ธ์ถœ์˜ ์ˆ˜๋ช…์ž…๋‹ˆ๊นŒ?

@oddjobz ๋ฐฉ๊ธˆ ์Šค๋ ˆ๋“œ๋ฅผ ๋‹ค์‹œ ์ฝ์—ˆ์œผ๋ฉฐ ์„œ๋กœ ๋‹ค๋ฅธ ๊ธฐ๊ฐ„์— ์ถฉ๋Œํ•˜๋Š” ์ง„์ˆ ์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ตฌ์„ฑ ์„น์…˜๋„ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Mac OSX์˜ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋กœ์ปฌ๋กœ ๋ณต์ œ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ‘œ์ค€ ๋ทฐ์–ด (์‚ฌ์šฉ์ž ์ง€์ • ๋ทฐ์–ด๊ฐ€ ์•„๋‹˜)๋กœ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ์ „ํžˆ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ ์ฐธ๊ฐ€์ž๋ฅผ ํ˜ผ๋™ํ•˜์ง€ ์•Š๋„๋ก์ด ๋ฒ„๊ทธ๋ฅผ ์œ ํšจํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋ถˆ์™„์ „ํ•œ ๊ฒƒ์œผ๋กœ ์ข…๋ฃŒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@oddjobz , @rpedela , @badams , @pholisma , @ subhadip-codeclouds ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ์ •ํ™•ํ•œ ๊ตฌ์„ฑ๊ณผ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜์žˆ๋Š” ์ •ํ™•ํ•œ ๋‹จ๊ณ„ (PDF ํฌํ•จ)๊ฐ€ ํฌํ•จ ๋œ ๋ณ„๋„์˜ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋งž์ถค ์†”๋ฃจ์…˜ ์ธ ๊ฒฝ์šฐ ๊ณต๊ฐœ ๋งํฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ข‹์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฌธ์ œ์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ˆ˜์ • ๋œ ๋ถ€๋ถ„์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ์ž ๊ธˆ์„์œ„ํ•œ ๋ฃจํ‹ด์ด ์žˆ์Šต๋‹ˆ๋‹ค.

this.locked = true;
PDFJS.getDocument(path+doc_id).then(function(pdf) {
    $('#pdf-canvas-pages').text(pdf.numPages);
    self.pages = pdf.numPages;
    self.page = 1;
    self.pdf = pdf;
    pdf.getPage(1).then(function(page) { self.turnpage(); });
})

turnpage: function() {
    var self = this;
    self.pdf.getPage(self.page).then(function(page) {
        var canvas = document.getElementById('pdf-canvas');
        var ctx = canvas.getContext('2d');
        var unscaledViewport = page.getViewport(1);
        canvas.width = $('#pdf-canvas').width();
        var scale = canvas.width / unscaledViewport.width;
        var viewport = page.getViewport(scale);
        canvas.height = viewport.height;
        var renderContext = { canvasContext: ctx, viewport: viewport };
        page.render(renderContext);
        $('#pdf-canvas-page').text(self.page);
        self.locked = false;
    });
},

์˜ˆ, ์ด๊ฒƒ์ด ์ œ๊ฐ€ ๊ทธ ์‹œ์ ์— ์š”์ ์„ ๋ฐ€์ง€ ์•Š์€ ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋งํ•  ๊ฒƒ๋„์—†๊ณ  ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐ›์•„๋“ค์ด๋Š” ๊ฒƒ์กฐ์ฐจ ์ฃผ์ €ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์Šค ๋‹ˆํŽซ ๋ฌธ์ œ๋Š” https://github.com/mozilla/pdf.js/pull/6571 ์—์„œ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์Œ, ์ œ๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์€ 2016 ๋…„ ์ค‘๋ฐ˜ ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๊ณ ์ณ ์กŒ๋‹ค๊ณ  (๋ฐ˜๋ณต์ ์œผ๋กœ) ๋งํ–ˆ๋˜ ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ถ„๋ช…ํžˆ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค)

์–ด์จŒ๋“ , ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๋ณด๋Š” ์‚ฌ๋žŒ์ด๋ผ๋ฉด ์œ„์™€ ๊ฐ™์ด ์ž๋ฌผ์‡ ๋ฅผ ๊ฝ‚์•„์„œ ์ฐจ์ด๊ฐ€ ๋‚˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. .. ๋‘ ์ค„๋ฟ์ž…๋‹ˆ๋‹ค ...

@yurydelendik ์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž (์ฃผ๋กœ Windows 7์„ ์‚ฌ์šฉ)์—๊ฒŒ ๊ฝค ์ผ๊ด€๋˜๊ฒŒ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์ง€๋งŒ OSX์—์„œ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ 100 % ์ผ๊ด€๋˜๊ฒŒ ์žฌํ˜„ ํ•  ์ˆ˜๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํžˆ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

<iframe
    style="height: 650px; width: 600px"
    src="/path/to/pdfjs/web/viewer.html?file=/path/to/file.pdf"
/>

๋ฌธ์„œ์— ๋‹ค๋ฅธ ๊ตต์€ ํ…์ŠคํŠธ๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€, ์ดˆ๊ธฐ ํ™•๋Œ€ / ์ถ•์†Œ ์ˆ˜์ค€ (ํ™•๋Œ€ ๋ฐ ์ถ•์†Œํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ)๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ์š”์ธ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๊ฒƒ์€ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ธ์‡„ํ•˜๋ฉด pdf๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋ฉด ์™„๋ฒฝํ•˜๊ฒŒ ๋ Œ๋”๋ง๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค (pdf.js๊ฐ€ ์ œ๊ณต๋œ ํŒŒ์ผ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค).

์šฐ๋ฆฌ๋Š”์ด ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํŒŒ์ผ์„ ์‚ฌ์šฉ์ž ์ปดํ“จํ„ฐ์— ์ง์ ‘ ๋‹ค์šด๋กœ๋“œํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์ง€๋งŒ ์–ด์ œ ํ•˜๋ฃจ ์ข…์ผ์ด ๋ฒ„๊ทธ๋ฅผ ์ซ“๋Š” ๋ฐ ์ด๋ฏธ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์ง€ ๋งŒ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ƒ๊ฐํ•ด ๋‚ด๊ธฐ ์œ„ํ•ด ์‹œ๊ฐ„์„ ํ• ์•  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@badams , ๋‹ค์Œ / ์ด์ „ ํŽ˜์ด์ง€์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ™•๋Œ€ / ์ถ•์†Œ๋„ ๋‚˜์—๊ฒŒ ์ˆ˜์ • ์‚ฌํ•ญ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ ๋Œ€๋‹ดํ•จ์ด ๋ฌธ์ œ์˜ ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ด๋Š” ์ธ์ƒ์„ ๋ฐ›์•˜๋‹ค.

๋‚˜๋Š” ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ƒ๊ฐํ•ด ๋‚ด๊ธฐ ์œ„ํ•ด ์‹œ๊ฐ„์„ ํ• ์•  ํ•  ๊ฒƒ์ด๋‹ค.

@badams ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๊ณ ์ž๊ฐ€ ์ปดํ“จํ„ฐ์—์„œ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ชจ๋“  ๋ณ€ํ˜•์„ ์ทจํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•˜๊ณ  ์˜จ๋ผ์ธ์œผ๋กœ ๊ฒŒ์‹œ ๋œ ์ „์ฒด ์˜ˆ์ œ๊ฐ€ ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค (github repo์˜ gh-pages ๋ธŒ๋žœ์น˜์—์„œ ์ „์ฒด ์˜ˆ์ œ๋ฅผ ๊ฒŒ์‹œ ํ•  ์ˆ˜ ์žˆ์Œ).

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„,

์ด ๋ชจ๋“  ์ด์•ผ๊ธฐ๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฏธ ์ˆ˜์ •์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์–ด๋–ค ์ข…๋ฅ˜์˜ ๊ตฌํ˜„์„ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

๋ฌธ์•ˆ ์ธ์‚ฌ,
ํƒ€๋ฅด ์‹œ์‹œ์˜ค ํŽ˜๋ ˆ์ด๋ผ

์ด ๋ชจ๋“  ์ด์•ผ๊ธฐ๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„๋ฌด๋„ ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ๋Š” ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๊ธฐ์œ„ํ•œ ์ •ํ™•ํ•œ ๋‹จ๊ณ„๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— (๋ฐ ์˜๊ฒฌ์— ์ž˜๋ชป๋œ ๊ถŒ์žฅ ์‚ฌํ•ญ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—) ๋‹ซํ˜”์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ 100 % ์žฌํ˜„ ๋  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, 10 ๋ฒˆ์— ํ•œ ๋ฒˆ ์ด์ƒ ๋‚˜ํƒ€๋‚˜๊ฒŒํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

PDF.js๊ฐ€ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰๋˜๊ฑฐ๋‚˜ ์ฝ”๋“œ์— ๋ฒ„๊ทธ๊ฐ€์žˆ์„ ์ˆ˜์žˆ๋Š” ๊ฐ€๋Šฅํ•œ ํ•ญ๋ชฉ :

  • HTTP ์„œ๋ฒ„ ๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTTP ๋ฒ”์œ„ ์š”์ฒญ์„ ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•จ
  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ธ€๊ผด๋กœ๋“œ ๋˜๋Š” ์บ”๋ฒ„์Šค ์ž‘์—…์„ ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ง€์ • ์†”๋ฃจ์…˜์ด ์œ„์˜ ์ž‘์—…๊ณผ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

FWIW pdf.js (v1.7.376) ๋ฐฐํฌ์™€ ํ•จ๊ป˜ ๋“œ๋ฌผ๊ฒŒ ์ด๋Ÿฌํ•œ ์†์ƒ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ”์œ„ ์š”์ฒญ ์ฒ˜๋ฆฌ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‹ ๋ขฐํ•  ์ˆ˜์žˆ๋Š” ์žฌํ˜„ ๋‹จ๊ณ„๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์œผ๋ฉด๋ณด๊ณ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ...

์ด ๋ฌธ์ œ๋Š” Chrome์—์„œ๋งŒ ๋ฐœ์ƒํ–ˆ์œผ๋ฉฐ ํ™•๋Œ€ / ์ถ•์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” showPreviousViewOnLoad ๋ฅผ false ํ–ˆ๊ณ  ๋‹ค์‹œ๋Š”์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@TZanke showPreviousViewOnLoad ์ œ๊ฑฐํ•˜๋ฉด ํ™•๋Œ€ / ์ถ•์†Œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ์ด์œ ๋ฅผ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ!

@tonyjin pdf.js autozoom์€ ํ™•๋Œ€ / ์ถ•์†Œ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ ๋กœ์ปฌ ์ €์žฅ์†Œ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ๋กœ๋“œ ํ•œ ํ›„์—๋Š” ์ž๋™ ํ™•๋Œ€ / ์ถ•์†Œ๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  ๋Œ€์‹  ์ด์ „์— ๊ณ„์‚ฐ ๋œ ํ™•๋Œ€ / ์ถ•์†Œ ๊ฐ’์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ ๋‹ค์‹œ๋กœ๋“œํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ showPreviousViewOnLoad ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ์ž๋™ ํ™•๋Œ€ ๊ธฐ๋Šฅ์ด ๋งค๋ฒˆ ์‹œ์ž‘๋˜๊ณ  ํŽ˜์ด์ง€๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ™•๋Œ€๋˜๋ฉฐ ๋ Œ๋”๋ง ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@TZanke- ๊ท€ํ•˜์˜ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์•ˆํƒ€๊น๊ฒŒ๋„ ๋ฌธ์ œ๊ฐ€ ๊ฐ€๋” ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค .. :(

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