# 截图工具 (Snapshot)
# 截图接口
# 获取截图图片
const pageRender = pdfViewer.getPDFPageRender(pageIndex);
pageRender.getSnapshot(left, top, width, height).then(imageBlob => {
// 获取到图片流。
});
# 获取指定页面截图图片
pdfViewer.takeSnapshot(pageIndex, left, top, width, height).then(imageBlob=>{
// 获取到图片流。
});
# 拷贝图片到剪贴板
pdfViewer.copySnapshot(imageBlob).then(function(){
// 拷贝成功。
});
# 图片存储服务
# SDK图片存储服务接口
# 上传图片接口
pdfViewer.uploadImage(imageBlob).then(function(imgURL){
// 上传成功。
});
请求方法: POST, 接口请求地址: /snapshot/upload?filefield={}
, BODY 为图片流, 返回内容: /snapshot/image/{imageid}
# 下载图片接口
请求方法: GET, 请求地址: /snapshot/image/{imageid}
# 自定义图片存储服务
我们提供了内置的图片存储服务实现,通过内置的实现,可以通过配置指定一部分参数来修改上传图片的行为, 如下所示:
new PDFViewer({
snapshotServer: new SnapshotServer({
// 上传图片接口。
uploadSnapshotAPIPath: 'snapshot/upload',
// 解析服务端响应内容,解析成图片URL,默认的实现为直接return resp。
// 假设服务端返回 {success: true, data: {url: '/snapshot/image/xxx'}},则需要如下实现方式:
render: function(resp) {
return resp;
}
})
})
如果您需要自定义更多的功能,比如添加自定义请求头、请求前的权限校验等等,则可以自行实现一个 SnapshotServer 对象:
new PDFViewer({
snapshotServer: {
render(_) {
return _;
},
uploadImage(imageBlob) {
return fetch(`/snapshot/upload/?filefield=file`, {
method: 'POST',
headers: {
'Content-Type': 'multipart/form-data',
'X-File-Name': 'snapshot.png'
},
body: imageBlob
}).then(response => {
return response.text();
})
}
}
})
# 示例
// 如果需上传图片到指定服务器,则需要创建自定义图片存储服务。
const SnapshotServer = PDFViewCtrl.SnapshotServer;
const pdfui = new PDFUI({
...
viewerOptions: {
snapshotServer: new SnapshotServer({
origin: location.origin,
uploadSnapshotAPIPath: 'snapshot/upload',
payloadFieldName: 'file',
method: 'POST',
render: function(resp) {
return resp;
}
})
...
}
})
var pdfviewer = await pdfui.getPDFViewer();
// 获取指定页面的指定区域截图。
var imageBlob = await pdfviewer.takeSnapshot(0, 0, 0, 200, 200);
// 上传图片到指定服务器。
var uploadResult = await pdfviewer.uploadImage(imageBlob);
// 获取图片并拷贝至剪贴板。
var copyResult = await pdfviewer.copySnapshot(uploadResult);