๋๋ ๋ก์ปฌ ํธ์คํธ(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์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋์ผํ ๋ด์ฉ์ ๋งํฉ๋๋ค.
์ผ๋ถ ์ ๋ฐ์ดํธ๋ฅผ ํตํด ์ด ๋ฌธ์ ๋ฅผ ๋ณด๋ค ํฌ๊ด์ ์ผ๋ก ๋ง๋ค์์ต๋๋ค. ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ์ค๋ฅ ๊ธฐ๋ฅ๋ ์๋ํ์ง ์์ผ๋ฉฐ ๋ด ์ฝ์์ ํ์๋๋ ๋ชจ๋ ๊ฒ์ ์คํฌ๋ฆฐ์ท์ ํ์๋๋ ๊ฒ์ ๋๋ค.
์์ ํ ์๋ฅผ ๋ณด๊ณ ๋ก์ปฌ์์ ๋ฌธ์ ๋ฅผ ์ฌํํ ์ ์์ ๋๊น์ง ๋์์ ๋๋ฆด ์ ์์ต๋๋ค. https://github.com/mozilla/pdf.js/blob/master/CONTRIBUTING.md ๋ฅผ ์ฝ๊ณ ์์ฒญ์ ๋ฐ๋ผ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ญ์์ค.
@yurydelendik ์ด๋ป๊ฒ ๋ฐ์ด์ฌ๋ฆฐ ์์ ๊ฐ ์๋ํ์ง๋ง ์ ํํ ๋์ผํ ์ฝ๋๊ฐ ๋ด ํ๊ฒฝ์์ ์๋ํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋๋ ๋น์ ์ ์ํด ๊ทธ๊ฒ์ ์ฌํ ํ ์ ์์ต๋๋ค ... ๋ด๊ฐ ์๊ฐํ ์์๋ ์ต์ ์ Google ํ์์์ด๋ ์คํฌ๋ฆฐํ์ด๋ก๋ฅผ ๋ณด์ฌ๋๋ฆด ์ ์์ต๋๋ค.
์ต์ํ ๊ฐ๋ฅ์ฑ์ ์ค ์ ์์ต๋๊น?
(๊ฒฝํ์) ์ถ์ธก:
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๋ฅผ ์ฌ์ฉํ๋ ๋ด ์์ ์ ๋ฌธ์ ๋ฅผ ์ ์ธํ๊ณ ๋ ํ์ค ๋ฐฉ๋ฒ์ ๋ ์ ํํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ์ด์จ๋ ๋ฐ๋ณตํด์ผ ํฉ๋๋ค. ๊ตฌ๋ฉ์ด ๊ฐ๋ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
"pdf.js ์ด๋ฆ์ด ๋ณ๊ฒฝ๋๊ฑฐ๋ ๊ฒฐํฉ๋ ํ์ผ์ ์ผ๋ถ์ธ ๊ฒฝ์ฐ์๋ ๋์์ด ๋์ง ์์ต๋๋ค." ์ฌ์ค์ด์ง๋ง grails๋ฅผ ์ฌ์ฉํ๋ ๋ด ์์ ์ ๋ฌธ์ ๋ฅผ ์ ์ธํ๊ณ ๋ ํ์ค ๋ฐฉ๋ฒ์ ๋ ์ ํํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ์ด์จ๋ ๋ฐ๋ณตํด์ผ ํฉ๋๋ค. ๊ตฌ๋ฉ์ด ๊ฐ๋ํฉ๋๋ค.