Data URI 형식의 PDF를 IE11로 미리보기
IE11에서 미리 볼 수없는 이유
IE에서는 Data URI 형식으로 이미지 이외는 지정할 수 없다
htps : // msd 응. 미 c 로소 ft. 코 m / 자 jp / ぃ b 등 ry / c848897 (v = vs. 85). 아 spx
그래서 PDF.js 를 사용하여 미리보기 표시
PDF.js는 PDF를 HTML5 형식으로 변환하여 표시하므로 표시되기까지 조금 시간이 걸리는 인상
킨톤 설정
양식 설정 필드 및 필드 코드
양식 설정 필드 및 필드 코드
※ 첨부 파일 필드에 저장된 PDF 파일 하나를 스페이스 필드에 미리보기 표시
Chrome 등의 경우
object 태그에 blob이나 Data URI를 지정하는 것으로 표시할 수 있으므로 매우 간단
↓ 샘플은 blob
화면 샘플
샘플 코드
(function() {
'use strict';
function getFile(url) {
var df = new $.Deferred();
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.responseType = 'blob';
xhr.onload = function(e) {
if (this.status === 200) {
df.resolve(this.response);
}
};
xhr.send();
return df.promise();
}
kintone.events.on('app.record.detail.show', function(event) {
var record = event.record;
var space = kintone.app.record.getSpaceElement('space');
var fileKey = record.file.value[0].fileKey;
var fileUrl = '/k/v1/file.json?fileKey=' + fileKey;
var promise = getFile(fileUrl);
promise.done(function(pdfData) {
var url = window.URL || window.webkitURL;
var imageUrl = url.createObjectURL(pdfData);
var preview = '<object data="' + imageUrl + '" type="application/pdf" width="100%" height="100%">';
preview += '</object>';
$(space).append(preview).css('height', '500');
});
});
})();
JS/CSS 설정
(function() {
'use strict';
function getFile(url) {
var df = new $.Deferred();
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.responseType = 'blob';
xhr.onload = function(e) {
if (this.status === 200) {
df.resolve(this.response);
}
};
xhr.send();
return df.promise();
}
kintone.events.on('app.record.detail.show', function(event) {
var record = event.record;
var space = kintone.app.record.getSpaceElement('space');
var fileKey = record.file.value[0].fileKey;
var fileUrl = '/k/v1/file.json?fileKey=' + fileKey;
var promise = getFile(fileUrl);
promise.done(function(pdfData) {
var url = window.URL || window.webkitURL;
var imageUrl = url.createObjectURL(pdfData);
var preview = '<object data="' + imageUrl + '" type="application/pdf" width="100%" height="100%">';
preview += '</object>';
$(space).append(preview).css('height', '500');
});
});
})();
IE11의 경우
우선 이번 샘플에서는 1페이지째만을 표시
열심히 하면 PDF내의 문자를 선택(복사)할 수도 있는 모양
화면 샘플
샘플 코드
(function() {
'use strict';
function getFile(url) {
var df = new $.Deferred();
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
if (this.status === 200) {
df.resolve(new Uint8Array(this.response));
}
};
xhr.send();
return df.promise();
}
kintone.events.on('app.record.detail.show', function(event) {
var record = event.record;
var space = kintone.app.record.getSpaceElement('space');
var fileKey = record.file.value[0].fileKey;
var fileUrl = '/k/v1/file.json?fileKey=' + fileKey;
var promise = getFile(fileUrl);
promise.done(function(pdfData) {
// pdf.worker.jsファイルへのパスを指定
PDFJS.workerSrc = '//www.dropbox.com/s/xxxxxx/pdf.worker.js?dl=1';
PDFJS.getDocument(pdfData).then(function(pdf) {
return pdf.getPage(1);
}).then(function(page) {
var scale = 1.0;
var viewport = page.getViewport(scale);
var canvas = $('<canvas />');
var context = $(canvas)[0].getContext('2d');
$(canvas)[0].width = viewport.width;
$(canvas)[0].height = viewport.height;
var renderContext = {
canvasContext: context,
viewport: viewport
};
page.render(renderContext);
$(space).append(canvas);
});
});
});
})();
JS/CSS 설정
(function() {
'use strict';
function getFile(url) {
var df = new $.Deferred();
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
if (this.status === 200) {
df.resolve(new Uint8Array(this.response));
}
};
xhr.send();
return df.promise();
}
kintone.events.on('app.record.detail.show', function(event) {
var record = event.record;
var space = kintone.app.record.getSpaceElement('space');
var fileKey = record.file.value[0].fileKey;
var fileUrl = '/k/v1/file.json?fileKey=' + fileKey;
var promise = getFile(fileUrl);
promise.done(function(pdfData) {
// pdf.worker.jsファイルへのパスを指定
PDFJS.workerSrc = '//www.dropbox.com/s/xxxxxx/pdf.worker.js?dl=1';
PDFJS.getDocument(pdfData).then(function(pdf) {
return pdf.getPage(1);
}).then(function(page) {
var scale = 1.0;
var viewport = page.getViewport(scale);
var canvas = $('<canvas />');
var context = $(canvas)[0].getContext('2d');
$(canvas)[0].width = viewport.width;
$(canvas)[0].height = viewport.height;
var renderContext = {
canvasContext: context,
viewport: viewport
};
page.render(renderContext);
$(space).append(canvas);
});
});
});
})();
※ PDF.js의 빌드는 여기
※pdf.worker.js는 파일 사이즈가 크고 kintone에 등록할 수 없기 때문에 Dropbox 등을 사용합시다
kintone 개발자 라이센스
kintone은 5 사용자, 1 년 무료 개발자 라이센스를 제공하므로 관심이 있다면 클릭! 클릭!
Reference
이 문제에 관하여(Data URI 형식의 PDF를 IE11로 미리보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YoshihikoTakeuchi/items/fe721a4a6b9654e8d2f3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Data URI 형식의 PDF를 IE11로 미리보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/YoshihikoTakeuchi/items/fe721a4a6b9654e8d2f3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)