シェイプまたはシェイプベースのオブジェクトを取得した後、shape.toImageSrc() APIを使用して画像ソースを取得できます。
次のサンプルコードを使用して、シェイプの画像ソースを取得することができます:
window.onload = async () => {
const loadingTip = addLoadingTip();
let spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
const res = await fetch('$DEMOROOT$/ja/sample/features/shapes/shape-toImage/spread.json');
await spread.fromJSON(await res.json());
loadingTip.remove();
bindShapesEvent(spread);
initPanel(spread);
}
function bindShapesEvent(spread) {
let shapeName;
spread.bind(GC.Spread.Sheets.Events.ShapeSelectionChanged, function (event, args) {
let shape = args.shape;
if (!shape) {
return;
}
let url = shape.toImageSrc();
shapeName = shape.name();
let imgElement = document.getElementById("selectShapeImage");
let img = new Image();
img.onload = function() {
if (img.width <= 250 && img.height <= 250) {
imgElement.style.width = "auto";
imgElement.style.height = "auto";
imgElement.src = url;
} else {
if (img.width > img.height) {
imgElement.style.width = "250px";
imgElement.style.height = "auto";
} else {
imgElement.style.width = "auto";
imgElement.style.height = "250px";
}
imgElement.src = url;
}
};
img.src = url;
});
document.getElementById("downloadButton").addEventListener("click", function () {
let imgElement = document.getElementById("selectShapeImage");
let imgUrl = imgElement.src;
let a = document.createElement("a");
a.href = imgUrl;
a.download = shapeName + ".png";
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
});
}
function initPanel(spread) {
let sheet = spread.getActiveSheet();
let shape = sheet.shapes.all()[0];
shape.isSelected(true);
let url = shape.toImageSrc();
let imgElement = document.getElementById("selectShapeImage");
imgElement.src = url;
}
function addLoadingTip() {
const div = document.createElement('div');
div.style.position = 'absolute';
div.style.inset = '0';
div.style.display = 'flex';
div.style.alignItems = 'center';
div.style.justifyContent = 'center';
div.style.background = 'white';
div.style.zIndex = '100';
div.textContent = 'Loading data from server ...';
document.body.appendChild(div);
return div;
}
function _getElementById(id) {
return document.getElementById(id);
}
<!doctype html>
<html style="height:100%;font-size:14px;">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="spreadjs culture" content="ja-jp" />
<link rel="stylesheet" type="text/css"
href="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css">
<script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets/dist/gc.spread.sheets.all.min.js"
type="text/javascript"></script>
<script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets-shapes/dist/gc.spread.sheets.shapes.min.js"
type="text/javascript"></script>
<script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets-resources-ja/dist/gc.spread.sheets.resources.ja.min.js" type="text/javascript"></script>
<script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script>
<script src="app.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<div class="sample-tutorial">
<div id="ss" class="sample-spreadsheets"></div>
<div class="options-container">
<div class="option-row">
シェイプを選択する:
</div>
<div class="option-row">
<img id="selectShapeImage" src="" alt="Original Image">
</div>
<div class="option-row">
<input type="button" id="downloadButton" value="画像にエクスポート">
</div>
</div>
</div>
</body>
</html>
.sample-tutorial {
position: relative;
height: 100%;
overflow: hidden;
}
.sample-spreadsheets {
width: calc(100% - 280px);
height: 100%;
overflow: hidden;
float: left;
}
.options-container {
float: right;
width: 280px;
padding: 12px;
height: 100%;
box-sizing: border-box;
background: #fbfbfb;
overflow: auto;
}
.option-row {
font-size: 14px;
padding-left: 5px;
}
.divide-line {
width: 100%;
height: 1px;
background: #cbcbcb;
margin-top: 10px;
margin-bottom: 3px;
}
.title {
text-align: center;
font-weight: bold;
}
label {
display: block;
margin-top: 15px;
margin-bottom: 5px;
}
p {
padding: 2px 10px;
background-color: #F4F8EB;
}
input {
width: 160px;
margin-left: 10px;
display: inline;
}
select {
width: 160px;
margin-left: 10px;
display: inline;
}
textarea {
width: 160px;
margin-left: 10px;
}
body {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}