kintone のグラフを画像としてダウンロード
はじめに
kintone のグラフを画像としてダウンロード、クリップボードにコピーするブックマークレットを紹介します。
できること
kintone アプリのグラフ表示画面を開いてブックマークレットを実行するとダウンロード用とコピー用のリンクを表示します。クリックでそれぞれの処理を実行します。
ブックマークレットの作成
ブックマークレット化の手順は次のページを参考にしてください。
コード
(async () => { const getDatetime = () => { const date = new Date(); const YYYY = date.getFullYear(); const MM = (date.getMonth() + 1).toString().padStart(2, "0"); const DD = date.getDate().toString().padStart(2, "0"); const HH = date.getHours().toString().padStart(2, "0"); const mm = date.getMinutes().toString().padStart(2, "0"); const ss = date.getSeconds().toString().padStart(2, "0");
return `${YYYY}-${MM}-${DD}_${HH}-${mm}-${ss}`; };
const loadImage = (image, src) => new Promise((resolve) => { image.onload = () => resolve(); image.src = src; });
const svg = document.querySelector("#chart-container-gaia svg"); const svgString = new XMLSerializer().serializeToString(svg); const imgSrc = `data:image/svg+xml;charset=utf-8;base64,${btoa( unescape(encodeURIComponent(svgString)) )}`;
const canvas = document.createElement("canvas"); canvas.width = svg.width.baseVal.value; canvas.height = svg.height.baseVal.value;
const img = new Image(); await loadImage(img, imgSrc);
const ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
const div = document.createElement("div"); div.style.backgroundColor = "white"; div.style.textAlign = "center";
const downloadLink = document.createElement("a"); downloadLink.appendChild(document.createTextNode("[ DOWNLOAD ]")); downloadLink.href = canvas.toDataURL("image/png"); const filename = `${kintone.app.getId()}-${getDatetime()}.png`; downloadLink.setAttribute("download", filename);
const clipboardCopy = document.createElement("a"); clipboardCopy.appendChild(document.createTextNode("[ COPY to CLIPBOARD ]")); clipboardCopy.onclick = async () => { const blob = await new Promise((resolve) => canvas.toBlob(resolve)); await navigator.clipboard.write([new ClipboardItem({ [blob.type]: blob })]); };
div.appendChild(downloadLink); div.appendChild(clipboardCopy);
svg.parentNode.insertBefore(div, svg);})();
面倒な人用
ブックマークレットの作成が面倒な人は「 グラフのダウンロード 」をブックマックバーにドラッグ・アンド・ドロップしてください。