-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
104 lines (88 loc) · 2.95 KB
/
Copy pathscript.js
File metadata and controls
104 lines (88 loc) · 2.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// TIFFインスタンスとページ情報
let tiffInstance = null;
let currentPage = 0;
let totalPages = 0;
// ファイルアップロードイベントリスナー
fileInput.addEventListener("change", (event) => {
const file = event.target.files[0];
if (file && file.type === "image/tiff") {
const reader = new FileReader();
reader.onload = () => {
loadTiff(reader.result);
};
reader.readAsArrayBuffer(file);
} else {
alert("Please upload a valid TIFF file.");
}
});
// TIFF読み込み関数
function loadTiff(arrayBuffer) {
try {
tiffInstance = new Tiff({ buffer: arrayBuffer });
currentPage = 0;
totalPages = tiffInstance.countDirectory();
updateControls();
renderPage();
} catch (error) {
console.error("Error loading TIFF:", error);
alert("Failed to load the TIFF file.");
}
}
// 現在のページを描画
function renderPage() {
if (!tiffInstance) return;
tiffInstance.setDirectory(currentPage);
const canvas = tiffInstance.toCanvas();
const context = tiffCanvas.getContext("2d");
// キャンバスのアスペクト比を保持
const imageWidth = canvas.width;
const imageHeight = canvas.height;
// キャンバスのサイズを元の画像サイズに基づいて設定
tiffCanvas.width = imageWidth;
tiffCanvas.height = imageHeight;
// 描画
context.clearRect(0, 0, imageWidth, imageHeight);
context.drawImage(canvas, 0, 0, imageWidth, imageHeight);
// ページ情報を更新
pageInfo.textContent = `Page ${currentPage + 1} of ${totalPages}`;
}
// コントロールボタンの状態を更新
function updateControls() {
prevPageButton.disabled = currentPage === 0;
nextPageButton.disabled = currentPage >= totalPages - 1;
savePdfButton.disabled = totalPages === 0;
}
// ページ切り替えボタンのイベント
prevPageButton.addEventListener("click", () => {
if (currentPage > 0) {
currentPage--;
renderPage();
updateControls();
}
});
nextPageButton.addEventListener("click", () => {
if (currentPage < totalPages - 1) {
currentPage++;
renderPage();
updateControls();
}
});
// PDF保存ボタンのイベント
savePdfButton.addEventListener("click", () => {
if (!tiffInstance) return;
const { jsPDF } = window.jspdf;
const pdf = new jsPDF();
// 各ページをPDFに追加
for (let i = 0; i < totalPages; i++) {
tiffInstance.setDirectory(i);
const canvas = tiffInstance.toCanvas();
if (i > 0) pdf.addPage();
pdf.addImage(canvas.toDataURL("image/png"), "PNG", 0, 0, 210, 297); // A4サイズにフィット
}
// Blob形式でPDFデータを取得
const pdfBlob = pdf.output("blob");
// BlobからURLを作成
const pdfUrl = URL.createObjectURL(pdfBlob);
// 新しいタブでPDFを表示
window.open(pdfUrl, "_blank");
});