{"id":14350,"date":"2026-06-03T15:00:57","date_gmt":"2026-06-03T06:00:57","guid":{"rendered":"https:\/\/rakkokeyword.com\/techo\/?p=14350"},"modified":"2026-06-03T15:00:57","modified_gmt":"2026-06-03T06:00:57","slug":"tool-pdf-form","status":"publish","type":"post","link":"https:\/\/rakkokeyword.com\/techo\/tool-pdf-form\/","title":{"rendered":"PDF\u5165\u529b\u30d5\u30a9\u30fc\u30e0\u4f5c\u6210\u30c4\u30fc\u30eb"},"content":{"rendered":"\n<div id=\"pdftool_wrapper\" style=\"width: 100%; box-sizing: border-box; background: #ffffff; color: #333333; font-family: sans-serif; position: relative; padding-bottom: 40px;\">\n    \n    <!-- \u5fc5\u8981\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u8aad\u307f\u8fbc\u307f -->\n    <script src=\"https:\/\/media-api.qcdgv19414.rakkoserver.net\/lib\/pdf.min.js\"><\/script>\n    <script src=\"https:\/\/media-api.qcdgv19414.rakkoserver.net\/lib\/pdf-lib.min.js\"><\/script>\n\n    <!-- \u30b9\u30bf\u30a4\u30eb\u30b7\u30fc\u30c8 -->\n    <style>\n        .pdftool_h2 { font-size: 16px; font-weight: bold; margin: 10px 0; border-bottom: 1px solid #ccc; padding-bottom: 5px; }\n        .pdftool_btn { background-color: #13284B; color: #ffffff; border: none; padding: 10px 15px; cursor: pointer; min-height: 40px; font-size: 14px; display: inline-flex; align-items: center; justify-content: center; text-decoration: none; box-sizing: border-box; transition: opacity 0.2s; border-radius: 4px; }\n        .pdftool_btn:hover { opacity: 0.8; }\n        .pdftool_btn_secondary { background-color: #666666; }\n        .pdftool_btn_danger { background-color: #d93025; }\n        \n        .pdftool_toolbar { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 25px; padding: 10px; background: #f5f5f5; border-radius: 8px; }\n        .pdftool_dropzone { width: 100%; border: 2px dashed #999; background: #fafafa; text-align: center; padding: 40px 10px; box-sizing: border-box; margin-bottom: 20px; border-radius: 8px; transition: background-color 0.2s; }\n        .pdftool_dropzone:hover { background: #e8e8e8; }\n        .pdftool_workspace { display: none; flex-direction: column; align-items: center; width: 100%; }\n        \n        \/* \u30d5\u30a1\u30a4\u30eb\u60c5\u5831\u30fb\u7ba1\u7406\u30d0\u30fc *\/\n        #pdftool_file_info_area { \n            display: flex; \n            justify-content: space-between; \n            align-items: center; \n            width: 100%; \n            margin-bottom: 20px; \n            padding: 12px 16px; \n            background: #f8f9fa; \n            border: 1px solid #e5e7eb; \n            border-radius: 8px; \n            box-shadow: 0 2px 4px rgba(0,0,0,0.02);\n            gap: 10px;\n            box-sizing: border-box;\n        }\n        .pdftool_filename_text { \n            font-size: 14px; \n            color: #333; \n            font-weight: bold; \n            word-break: break-all; \n            margin: 0 !important; \n        }\n        .pdftool_btn_small { \n            height: 28px; \n            font-size: 12px; \n            padding: 0 12px; \n            background-color: #dfe3e8; \n            color: #555; \n            border: none; \n            font-weight: normal; \n            border-radius: 4px; \n            cursor: pointer; \n            transition: all 0.2s; \n            white-space: nowrap; \n        }\n        .pdftool_btn_small:hover { \n            background-color: #d1d5db; \n            color: #333; \n        }\n\n        @media (max-width: 480px) {\n            #pdftool_file_info_area { flex-direction: column; align-items: flex-start; }\n            #pdftool_reselect_btn { width: 100%; }\n        }\n        \n        \/* PDF\u30d7\u30ec\u30d3\u30e5\u30fc\u9818\u57df\u3092\u4e2d\u592e\u5bc4\u305b\u3067\u5e83\u304f\u53d6\u308b *\/\n        .pdftool_canvas_wrapper { width: 100%; display: flex; justify-content: center; overflow: auto; background: #eef2f5; padding: 20px; border-radius: 8px; box-sizing: border-box; }\n        .pdftool_sidebar { width: 100%; margin-bottom: 30px; }\n        \n        .pdftool_canvas_container { position: relative; max-width: 100%; border: 1px solid #ccc; background: #ffffff; display: inline-block; box-shadow: 0 4px 12px rgba(0,0,0,0.15); }\n        .pdftool_overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; overflow: hidden; }\n        \n        \/* \u8981\u7d20\u306e\u9ad8\u3055\u3068\u30dc\u30c3\u30af\u30b9\u30e2\u30c7\u30eb\u306e\u7d71\u4e00 *\/\n        .pdftool_element { position: absolute; border: 1px dashed transparent; box-sizing: border-box; cursor: move; display: flex; align-items: center; justify-content: flex-start; }\n        .pdftool_element:hover { border: 1px dashed #666; background: rgba(255,255,255,0.7); }\n        .pdftool_element.selected { border: 2px solid #13284B; background: rgba(255,255,255,0.9); z-index: 10; box-shadow: 0 0 5px rgba(19,40,75,0.5); }\n        .pdftool_element input[type=\"text\"] { height: 100%; border: none; background: transparent; font-size: inherit; color: inherit; padding: 4px 6px; box-sizing: border-box; outline: none; margin: 0; }\n        .pdftool_element input[type=\"checkbox\"] { width: 1.2em; height: 1.2em; cursor: pointer; margin: 0; flex-shrink: 0; }\n        \n        .pdftool_toast { position: fixed; bottom: 20px; right: 20px; background: #333; color: #fff; padding: 12px 20px; z-index: 9999; display: none; font-size: 14px; box-shadow: 0 4px 10px rgba(0,0,0,0.3); border-radius: 4px; }\n        .pdftool_navigation { display: flex; align-items: center; justify-content: center; gap: 15px; margin: 15px 0 25px 0; }\n        \n        \/* \u30d7\u30ed\u30d1\u30c6\u30a3\u30d1\u30cd\u30eb *\/\n        #pdftool_properties_panel { display: none; background: #f8f9fa; border: 1px solid #ced4da; padding: 10px 15px; border-radius: 6px; width: 100%; box-sizing: border-box; align-items: center; flex-wrap: wrap; gap: 15px; box-shadow: 0 2px 4px rgba(0,0,0,0.05); min-height: 54px; }\n        #pdftool_properties_empty { background: #f8f9fa; border: 1px dashed #ced4da; padding: 12px; text-align: center; border-radius: 6px; font-size: 13px; color: #666; width: 100%; box-sizing: border-box; height: 54px; line-height: 28px; }\n    <\/style>\n\n    <div id=\"pdftool_dropzone_area\" class=\"pdftool_dropzone\">\n        <p style=\"font-weight: bold; margin-bottom: 15px;\">PDF\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044<\/p>\n        <button type=\"button\" id=\"pdftool_btn_select_pdf\" class=\"pdftool_btn\" style=\"margin-bottom: 15px;\">PDF\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e<\/button>\n        <p style=\"font-size: 12px; color: #666; margin: 0 0 5px 0;\">\u203b\u3053\u3053\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u30c9\u30e9\u30c3\u30b0\uff06\u30c9\u30ed\u30c3\u30d7\u3059\u308b\u304b\u3001\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u3066\u9078\u629e<\/p>\n        <p style=\"font-size: 12px; color: #666; margin: 0;\">\u203b20MB\u307e\u3067\u306e\u300c.pdf\u300d\u30d5\u30a1\u30a4\u30eb\u306e\u307f\u5bfe\u5fdc<\/p>\n        <input type=\"file\" id=\"pdftool_file_input\" accept=\"application\/pdf\" style=\"display: none;\">\n    <\/div>\n\n    <div id=\"pdftool_workspace_area\" class=\"pdftool_workspace\">\n        \n        <div id=\"pdftool_file_info_area\">\n            <p class=\"pdftool_filename_text\">\u73fe\u5728\u306ePDF\uff1a<span id=\"pdftool_current_filename\"><\/span><\/p>\n            <button class=\"pdftool_btn_small\" id=\"pdftool_reselect_btn\" type=\"button\">\u5225\u306ePDF<\/button>\n        <\/div>\n\n        <div style=\"width: 100%;\">\n            <div class=\"pdftool_toolbar\" style=\"width: 100%; box-sizing: border-box; justify-content: center;\">\n                <button class=\"pdftool_btn\" id=\"pdftool_btn_add_form_text\" style=\"font-weight: bold;\">+ \u5165\u529b\u9805\u76ee\u3092\u8ffd\u52a0<\/button>\n                <button class=\"pdftool_btn\" id=\"pdftool_btn_add_form_check\" style=\"font-weight: bold;\">+ \u30c1\u30a7\u30c3\u30af\u9805\u76ee\u3092\u8ffd\u52a0<\/button>\n            <\/div>\n\n            <div class=\"pdftool_navigation\">\n                <button class=\"pdftool_btn pdftool_btn_secondary\" id=\"pdftool_btn_prev\" style=\"min-height: 30px; padding: 5px 15px;\">\u524d\u3078<\/button>\n                <span style=\"font-size: 15px; font-weight: bold;\">\u30da\u30fc\u30b8: <span id=\"pdftool_page_num\">1<\/span> \/ <span id=\"pdftool_page_count\">1<\/span><\/span>\n                <button class=\"pdftool_btn pdftool_btn_secondary\" id=\"pdftool_btn_next\" style=\"min-height: 30px; padding: 5px 15px;\">\u6b21\u3078<\/button>\n            <\/div>\n        <\/div>\n\n        <div class=\"pdftool_sidebar\">\n            <div id=\"pdftool_properties_panel\">\n                <div style=\"font-size: 13px; font-weight: bold; color: #13284B; display: flex; align-items: center; gap: 5px; height: 32px;\">\n                    <span style=\"display: inline-block; width: 6px; height: 6px; background: #13284B; border-radius: 50%;\"><\/span>\n                    \u8981\u7d20\u306e\u8a2d\u5b9a:\n                <\/div>\n                \n                <div style=\"display: flex; align-items: center; gap: 15px; flex-wrap: nowrap; height: 32px;\">\n                    <div style=\"display: flex; align-items: center; gap: 5px; flex-shrink: 0; white-space: nowrap; height: 32px;\">\n                        <label style=\"font-size: 12px; color: #555; height: 32px; line-height: 32px; margin: 0;\">\u30b5\u30a4\u30ba<\/label>\n                        <input type=\"number\" id=\"pdftool_prop_fontsize\" value=\"12\" style=\"width: 50px; height: 32px; padding: 0 6px; border: 1px solid #ccc; border-radius: 4px; font-size: 12px; box-sizing: border-box; margin: 0;\">\n                    <\/div>\n                    <div style=\"display: flex; align-items: center; gap: 5px; flex-shrink: 0; white-space: nowrap; height: 32px;\">\n                        <label style=\"font-size: 12px; color: #555; height: 32px; line-height: 32px; margin: 0;\">\u6587\u5b57\u8272<\/label>\n                        <select id=\"pdftool_prop_color\" style=\"height: 32px; padding: 0 22px 0 8px; border: 1px solid #ccc; border-radius: 4px; font-size: 12px; box-sizing: border-box; margin: 0; appearance: none; -webkit-appearance: none; background-color: #fff; background-image: url('data:image\/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2210%22%20height%3D%226%22%20viewBox%3D%220%200%2010%206%22%3E%3Cpath%20d%3D%22M0%200l5%206%205-6z%22%20fill%3D%22%23999999%22%2F%3E%3C%2Fsvg%3E'); background-repeat: no-repeat; background-position: right 6px center; background-size: 8px 5px; cursor: pointer;\">\n                            <option value=\"0,0,0\">\u9ed2<\/option>\n                            <option value=\"102,102,102\">\u30b0\u30ec\u30fc<\/option>\n                            <option value=\"30,144,255\">\u9752<\/option>\n                        <\/select>\n                    <\/div>\n                <\/div>\n\n                <div style=\"display: flex; gap: 10px; margin-left: auto; height: 32px; align-items: center;\">\n                    <button class=\"pdftool_btn pdftool_btn_secondary\" id=\"pdftool_btn_align_left\" style=\"height: 32px; min-height: 32px; line-height: 32px; font-size: 12px; padding: 0 10px; background-color: #5a6e85; margin: 0; display: inline-flex; align-items: center;\" title=\"\u4e00\u756a\u8fd1\u3044\u4ed6\u306e\u8981\u7d20\u306e\u5de6\u7aef\u306b\u63c3\u3048\u307e\u3059\">\u5de6\u7aef\u3092\u63c3\u3048\u308b<\/button>\n                    <button class=\"pdftool_btn pdftool_btn_danger\" id=\"pdftool_btn_delete_element\" style=\"height: 32px; min-height: 32px; line-height: 32px; font-size: 12px; padding: 0 10px; margin: 0; display: inline-flex; align-items: center;\">\u524a\u9664<\/button>\n                <\/div>\n            <\/div>\n            \n            <div id=\"pdftool_properties_empty\" style=\"background: #f8f9fa; border: 1px dashed #ced4da; padding: 12px; text-align: center; border-radius: 6px; font-size: 13px; color: #666; width: 100%; box-sizing: border-box; height: 54px; line-height: 28px;\">\n                \u8981\u7d20\u3092\u9078\u629e\u3059\u308b\u3068\u8a2d\u5b9a\u30e1\u30cb\u30e5\u30fc\u304c\u8868\u793a\u3055\u308c\u307e\u3059\n            <\/div>\n        <\/div>\n\n        <div class=\"pdftool_canvas_wrapper\">\n            <div class=\"pdftool_canvas_container\" id=\"pdftool_canvas_container\">\n                <canvas id=\"pdftool_canvas\"><\/canvas>\n                <div id=\"pdftool_overlay\" class=\"pdftool_overlay\"><\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"pdftool_toolbar\" style=\"margin-top: 40px; margin-bottom: 20px; padding: 30px 20px; justify-content: center; width: 100%; background: #eef2f5;\">\n            <p class=\"pdftool_h2\" style=\"width: 100%; text-align: center; border:none; margin-top: 0; margin-bottom: 20px; color: #13284B;\">\u30a8\u30af\u30b9\u30dd\u30fc\u30c8<\/p>\n            <button class=\"pdftool_btn\" id=\"pdftool_btn_export_interactive\" style=\"font-weight: bold; padding: 15px 30px; width: 100%; max-width: 300px;\">\u5165\u529b\u3067\u304d\u308bPDF\u3068\u3057\u3066\u4fdd\u5b58<\/button>\n            <button class=\"pdftool_btn pdftool_btn_secondary\" id=\"pdftool_btn_export_flatten\" style=\"padding: 15px 30px; width: 100%; max-width: 300px;\">\u5b8c\u6210\u3057\u305fPDF\u3068\u3057\u3066\u4fdd\u5b58<\/button>\n        <\/div>\n    <\/div>\n\n    <div id=\"pdftool_toast\" class=\"pdftool_toast\"><\/div>\n\n<\/div>\n\n<script>\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n    \/\/ --- HTML\u30a8\u30b9\u30b1\u30fc\u30d7\u95a2\u6570 ---\n    function pdftool_escapeHTML(str) {\n        if (!str) return '';\n        return String(str).replace(\/[&<>\"']\/g, function(match) {\n            switch (match) {\n                case '&': return '&' + 'amp;';\n                case '<': return '<' + 'lt;';\n                case '>': return '>' + 'gt;';\n                case '\"': return '&' + 'quot;';\n                case \"'\": return '&' + '#39;';\n            }\n        });\n    }\n\n    \/\/ --- \u72b6\u614b\u7ba1\u7406\u5909\u6570 ---\n    const pdftool_state = {\n        pdfDoc: null,\n        pdfBytes: null,\n        fileName: '', \/\/ \u30d5\u30a1\u30a4\u30eb\u540d\u3092\u4fdd\u6301\n        pageNum: 1,\n        pageRendering: false,\n        pageNumPending: null,\n        scale: 1.0, \n        elements: [], \n        selectedId: null,\n        dragState: null,\n        elementCounter: 0,\n        lastExportTime: 0\n    };\n\n    \/\/ --- DOM\u8981\u7d20\u53d6\u5f97 ---\n    const DOM = {\n        workspaceArea: document.getElementById('pdftool_workspace_area'),\n        dropzone: document.getElementById('pdftool_dropzone_area'),\n        fileInput: document.getElementById('pdftool_file_input'),\n        btnSelectPdf: document.getElementById('pdftool_btn_select_pdf'),\n        workspace: document.getElementById('pdftool_workspace_area'),\n        currentFilename: document.getElementById('pdftool_current_filename'),\n        reselectBtn: document.getElementById('pdftool_reselect_btn'),\n        canvas: document.getElementById('pdftool_canvas'),\n        ctx: document.getElementById('pdftool_canvas').getContext('2d'),\n        overlay: document.getElementById('pdftool_overlay'),\n        pageNum: document.getElementById('pdftool_page_num'),\n        pageCount: document.getElementById('pdftool_page_count'),\n        propertiesPanel: document.getElementById('pdftool_properties_panel'),\n        propertiesEmpty: document.getElementById('pdftool_properties_empty'),\n        propFontSize: document.getElementById('pdftool_prop_fontsize'),\n        propColor: document.getElementById('pdftool_prop_color'),\n        toast: document.getElementById('pdftool_toast'),\n        container: document.getElementById('pdftool_canvas_container')\n    };\n\n    \/\/ PDF.js worker \u8a2d\u5b9a\n    if (typeof pdfjsLib !== 'undefined') {\n        pdfjsLib.GlobalWorkerOptions.workerSrc = 'https:\/\/media-api.qcdgv19414.rakkoserver.net\/lib\/pdf.worker.min.js';\n    }\n\n    \/\/ --- \u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3 ---\n    function pdftool_showToast(message, isError = false) {\n        DOM.toast.innerHTML = pdftool_escapeHTML(message);\n        DOM.toast.style.background = isError ? '#d93025' : '#333333';\n        DOM.toast.style.display = 'block';\n        setTimeout(() => { DOM.toast.style.display = 'none'; }, 5000);\n    }\n\n    function pdftool_rgbStringToObj(rgbStr) {\n        const parts = rgbStr.split(',');\n        return { r: parseInt(parts[0])\/255, g: parseInt(parts[1])\/255, b: parseInt(parts[2])\/255 };\n    }\n\n    function hasMultibyteChar(str) {\n        if (!str) return false;\n        return \/[^\\x00-\\x7F]\/.test(str);\n    }\n\n    \/\/ \u30a6\u30a3\u30f3\u30c9\u30a6\u30ea\u30b5\u30a4\u30ba\u6642\u306bPDF\u306e\u8868\u793a\u30b9\u30b1\u30fc\u30eb\u3092\u518d\u8a08\u7b97\n    let pdftool_resizeTimer;\n    window.addEventListener('resize', () => {\n        if (!pdftool_state.pdfDoc) return;\n        clearTimeout(pdftool_resizeTimer);\n        pdftool_resizeTimer = setTimeout(() => {\n            if (!pdftool_state.pageRendering) {\n                pdftool_renderPage(pdftool_state.pageNum);\n            }\n        }, 300);\n    });\n\n    \/\/ --- PDF\u8aad\u307f\u8fbc\u307f\u51e6\u7406 ---\n    function pdftool_handleFileSelect(file) {\n        if (!file || (file.type !== 'application\/pdf' && !file.name.toLowerCase().endsWith('.pdf'))) {\n            pdftool_showToast('\u30a8\u30e9\u30fc: PDF\u30d5\u30a1\u30a4\u30eb\u306e\u307f\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002', true);\n            return;\n        }\n        if (file.size > 20 * 1024 * 1024) {\n            pdftool_showToast('\u30a8\u30e9\u30fc: \u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u306f20MB\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002', true);\n            return;\n        }\n\n        const reader = new FileReader();\n        reader.onload = async function(e) {\n            try {\n                pdftool_state.pdfBytes = new Uint8Array(e.target.result);\n                pdftool_state.fileName = file.name;\n                \n                \/\/ \u65e2\u5b58\u306e\u8981\u7d20\u3084\u72b6\u614b\u3092\u30ea\u30bb\u30c3\u30c8\n                pdftool_state.elements = [];\n                pdftool_state.elementCounter = 0;\n                pdftool_deselectElement();\n                DOM.overlay.innerHTML = '';\n                DOM.currentFilename.textContent = file.name; \/\/ \u30d5\u30a1\u30a4\u30eb\u540d\u3092UI\u306b\u30bb\u30c3\u30c8\n                \n                pdftool_state.pdfDoc = await pdfjsLib.getDocument({data: pdftool_state.pdfBytes}).promise;\n                DOM.pageCount.textContent = pdftool_state.pdfDoc.numPages;\n                pdftool_state.pageNum = 1;\n                \n                DOM.dropzone.style.display = 'none';\n                DOM.workspace.style.display = 'flex';\n                \n                pdftool_renderPage(pdftool_state.pageNum);\n                pdftool_showToast('PDF\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3057\u305f\u3002');\n            } catch (err) {\n                console.error(err);\n                pdftool_showToast('\u30a8\u30e9\u30fc: PDF\u306e\u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002', true);\n            }\n        };\n        reader.readAsArrayBuffer(file);\n    }\n\n    \/\/ --- PDF\u63cf\u753b\u51e6\u7406 ---\n    function pdftool_renderPage(num) {\n        pdftool_state.pageRendering = true;\n        pdftool_state.pdfDoc.getPage(num).then(function(page) {\n            \n            const unscaledViewport = page.getViewport({scale: 1.0});\n            const maxWidth = DOM.workspaceArea.clientWidth - 40; \n            let optimalScale = maxWidth \/ unscaledViewport.width;\n            \n            if (optimalScale > 2.0) optimalScale = 2.0; \n            if (optimalScale < 0.3) optimalScale = 0.3;\n            \n            pdftool_state.scale = optimalScale;\n\n            const viewport = page.getViewport({scale: pdftool_state.scale});\n            DOM.canvas.height = viewport.height;\n            DOM.canvas.width = viewport.width;\n\n            DOM.container.style.width = viewport.width + 'px';\n            DOM.container.style.height = viewport.height + 'px';\n\n            const renderContext = {\n                canvasContext: DOM.ctx,\n                viewport: viewport\n            };\n            const renderTask = page.render(renderContext);\n\n            renderTask.promise.then(function() {\n                pdftool_state.pageRendering = false;\n                if (pdftool_state.pageNumPending !== null) {\n                    pdftool_renderPage(pdftool_state.pageNumPending);\n                    pdftool_state.pageNumPending = null;\n                }\n                pdftool_renderOverlay();\n            });\n        });\n        DOM.pageNum.textContent = num;\n    }\n\n    function pdftool_queueRenderPage(num) {\n        if (pdftool_state.pageRendering) {\n            pdftool_state.pageNumPending = num;\n        } else {\n            pdftool_renderPage(num);\n        }\n    }\n\n    \/\/ --- \u8981\u7d20\u7ba1\u7406\u30fb\u63cf\u753b\u51e6\u7406 ---\n    function pdftool_addElement(type) {\n        if (!pdftool_state.pdfDoc) {\n             pdftool_showToast('\u5148\u306bPDF\u3092\u8aad\u307f\u8fbc\u3093\u3067\u304f\u3060\u3055\u3044\u3002', true);\n             return;\n        }\n\n        const overlayRect = DOM.overlay.getBoundingClientRect();\n        \n        \/\/ \u8ffd\u52a0\u6642\u306b\u3082\u6700\u5c0f\u30b5\u30a4\u30ba\u3092\u4e0b\u56de\u3089\u306a\u3044\u3088\u3046\u306b\u8a2d\u5b9a\n        let minWPercent = (type === 'form_text') ? (160 \/ overlayRect.width) * 100 : (120 \/ overlayRect.width) * 100;\n        let minHPercent = (type === 'form_text') ? (28 \/ overlayRect.height) * 100 : (24 \/ overlayRect.height) * 100;\n\n        pdftool_state.elementCounter++;\n        const id = 'elem_' + pdftool_state.elementCounter;\n        \n        const widthPercent = Math.max((type === 'form_text') ? 60 : 25, minWPercent); \n        const heightPercent = Math.max(5, minHPercent); \n        \n        \/\/ \u540c\u3058\u30da\u30fc\u30b8\u306b\u8981\u7d20\u304c\u3042\u308c\u3070\u3001\u524d\u56de\u306eX\u4f4d\u7f6e\u3092\u7d99\u627f\u3057\u3001Y\u3092\u5c11\u3057\u4e0b\u306b\u914d\u7f6e\u3059\u308b\n        const currentPageElements = pdftool_state.elements.filter(e => e.page === pdftool_state.pageNum);\n        let startX = 30;\n        let startY = 40;\n        if (currentPageElements.length > 0) {\n            const lastElem = currentPageElements[currentPageElements.length - 1];\n            startX = lastElem.x;\n            startY = lastElem.y + lastElem.height + 1.5; \/\/ \u5c11\u3057\u4e0b\u306b\u914d\u7f6e\n            if (startY > 90) startY = 40; \/\/ \u4e0b\u306b\u306f\u307f\u51fa\u305d\u3046\u306a\u3089\u4e0a\u306b\u623b\u3059\n        }\n        \n        const newElem = {\n            id: id,\n            type: type, \/\/ 'form_text', 'form_check'\n            page: pdftool_state.pageNum,\n            x: startX, \/\/ %\n            y: startY, \/\/ %\n            width: widthPercent, \/\/ %\n            height: heightPercent, \/\/ %\n            fontSize: 14,\n            color: '0,0,0',\n            value: (type === 'form_check') ? 'false' : '',\n            labelValue: (type === 'form_text') ? '\u9805\u76ee\u540d' : '\u30c1\u30a7\u30c3\u30af\u9805\u76ee'\n        };\n        pdftool_state.elements.push(newElem);\n        \n        pdftool_renderOverlay();\n        pdftool_selectElement(id);\n    }\n\n    function pdftool_renderOverlay() {\n        DOM.overlay.innerHTML = '';\n        const currentPageElements = pdftool_state.elements.filter(e => e.page === pdftool_state.pageNum);\n        \n        currentPageElements.forEach(elem => {\n            const elNode = document.createElement('div');\n            elNode.className = 'pdftool_element' + (pdftool_state.selectedId === elem.id ? ' selected' : '');\n            elNode.dataset.id = elem.id;\n            \n            elNode.style.left = elem.x + '%';\n            elNode.style.top = elem.y + '%';\n            elNode.style.width = elem.width + '%';\n            elNode.style.height = elem.height + '%';\n            elNode.style.color = 'rgb(' + elem.color + ')';\n            elNode.style.padding = '0 5px';\n            \n            const displayFontSize = elem.fontSize * pdftool_state.scale;\n            elNode.style.fontSize = displayFontSize + 'px';\n\n            if (elem.type === 'form_text') {\n                \/\/ \u30e9\u30d9\u30eb\u5e45\u3092\u6587\u5b57\u9577\u306b\u5408\u308f\u305b\u3066\u53ef\u5909\u306b\u3057\u30018px\u306e\u9593\u9694\u3092\u3042\u3051\u308b\n                const labelInput = document.createElement('input');\n                labelInput.type = 'text';\n                labelInput.value = elem.labelValue || '';\n                labelInput.placeholder = '\u9805\u76ee\u540d';\n                labelInput.style.flex = '0 0 auto';\n                \/\/ em\u5358\u4f4d\u3067\u5e45\u3092\u6587\u5b57\u6570\u306b\u9023\u52d5\u3055\u305b\u308b\uff08\u6700\u4f4e3\u6587\u5b57\u5206\u78ba\u4fdd\uff09\n                labelInput.style.width = (elem.labelValue ? Math.max(elem.labelValue.length, 3) : 3) + 'em';\n                labelInput.style.maxWidth = 'calc(100% - 60px)'; \/\/ \u53f3\u5074\u306e\u5165\u529b\u67a0\u5206\u3092\u78ba\u4fdd\n                labelInput.style.textOverflow = 'ellipsis';\n                labelInput.style.background = 'transparent';\n                labelInput.style.padding = '0';\n                labelInput.style.marginRight = '8px'; \/\/ \u5165\u529b\u6b04\u3068\u306e\u9593\u9694\u3092\u9069\u5ea6\u306b\u72ed\u304f\n                labelInput.addEventListener('input', (e) => {\n                    elem.labelValue = e.target.value;\n                    e.target.style.width = (e.target.value.length > 0 ? e.target.value.length : 3) + 'em';\n                });\n                elNode.appendChild(labelInput);\n\n                const input = document.createElement('input');\n                input.type = 'text';\n                input.value = elem.value || '';\n                input.placeholder = '\u30d5\u30a9\u30fc\u30e0\u5165\u529b\u67a0';\n                input.style.flex = '1 1 50px';\n                input.style.minWidth = '50px'; \/\/ \u7e2e\u307f\u3059\u304e\u9632\u6b62\n                input.style.height = '100%';\n                input.style.backgroundColor = 'rgba(200, 220, 255, 0.4)';\n                input.style.border = '1px solid rgba(19, 40, 75, 0.3)';\n                input.style.borderRadius = '2px';\n                input.addEventListener('input', (e) => {\n                    elem.value = e.target.value;\n                });\n                elNode.appendChild(input);\n                \n            } else if (elem.type === 'form_check') {\n                \/\/ \u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u3068\u30e9\u30d9\u30eb\u3092\u81ea\u7136\u306b\u4e26\u3079\u308b\n                const chk = document.createElement('input');\n                chk.type = 'checkbox';\n                chk.checked = elem.value === 'true';\n                chk.style.marginRight = '6px';\n                \/\/ \u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u306f\u89aa\u306e align-items: center \u306b\u4efb\u305b\u308b\n                chk.addEventListener('change', (e) => {\n                    elem.value = e.target.checked ? 'true' : 'false';\n                });\n                elNode.appendChild(chk);\n                \n                const labelInput = document.createElement('input');\n                labelInput.type = 'text';\n                labelInput.value = elem.labelValue || '';\n                labelInput.placeholder = '\u30e9\u30d9\u30eb\u3092\u5165\u529b';\n                labelInput.style.flex = '1';\n                labelInput.style.background = 'transparent';\n                labelInput.style.padding = '0';\n                labelInput.style.textOverflow = 'ellipsis';\n                \/\/ \u30e9\u30d9\u30eb\u6587\u5b57\u306e\u30d9\u30fc\u30b9\u30e9\u30a4\u30f3\u3092\u8996\u899a\u7684\u306b\u63c3\u3048\u308b\u305f\u3081\u306b1px\u4e0b\u3052\u308b\n                labelInput.style.position = 'relative';\n                labelInput.style.top = '1px';\n                labelInput.addEventListener('input', (e) => {\n                    elem.labelValue = e.target.value;\n                });\n                elNode.appendChild(labelInput);\n            }\n\n            \/\/ \u53f3\u4e0b\u306e\u30ea\u30b5\u30a4\u30ba\u7528\u30cf\u30f3\u30c9\u30eb\n            const resizeHandle = document.createElement('div');\n            resizeHandle.className = 'pdftool_resize_handle';\n            resizeHandle.style.position = 'absolute';\n            resizeHandle.style.right = '0';\n            resizeHandle.style.bottom = '0';\n            resizeHandle.style.width = '12px';\n            resizeHandle.style.height = '12px';\n            resizeHandle.style.background = '#13284B';\n            resizeHandle.style.cursor = 'se-resize';\n            resizeHandle.style.display = (pdftool_state.selectedId === elem.id) ? 'block' : 'none';\n            \n            resizeHandle.addEventListener('mousedown', (e) => pdftool_handleResizeStart(e, elem.id));\n            elNode.appendChild(resizeHandle);\n\n            elNode.addEventListener('mousedown', pdftool_handleDragStart);\n            elNode.addEventListener('click', (e) => {\n                if(pdftool_state.dragState) return; \n                pdftool_selectElement(elem.id);\n            });\n            \n            elNode.addEventListener('touchstart', (e) => {\n                if(e.target.tagName.toLowerCase() === 'input') return;\n                const touch = e.touches[0];\n                pdftool_handleDragStart({\n                    clientX: touch.clientX,\n                    clientY: touch.clientY,\n                    target: e.target,\n                    stopPropagation: () => e.stopPropagation()\n                });\n            }, {passive: false});\n\n            DOM.overlay.appendChild(elNode);\n        });\n    }\n\n    \/\/ --- \u9078\u629e\u30fb\u30d7\u30ed\u30d1\u30c6\u30a3\u64cd\u4f5c ---\n    function pdftool_selectElement(id) {\n        pdftool_state.selectedId = id;\n        \n        const elements = document.querySelectorAll('.pdftool_element');\n        elements.forEach(el => {\n            if (el.dataset.id === id) {\n                el.classList.add('selected');\n                const handle = el.querySelector('.pdftool_resize_handle');\n                if(handle) handle.style.display = 'block';\n            } else {\n                el.classList.remove('selected');\n                const handle = el.querySelector('.pdftool_resize_handle');\n                if(handle) handle.style.display = 'none';\n            }\n        });\n        \n        const elem = pdftool_state.elements.find(e => e.id === id);\n        if (elem) {\n            DOM.propFontSize.value = elem.fontSize;\n            DOM.propColor.value = elem.color;\n            DOM.propertiesPanel.style.display = 'flex';\n            DOM.propertiesEmpty.style.display = 'none';\n        }\n    }\n\n    function pdftool_deselectElement() {\n        pdftool_state.selectedId = null;\n        const elements = document.querySelectorAll('.pdftool_element');\n        elements.forEach(el => {\n            el.classList.remove('selected');\n            const handle = el.querySelector('.pdftool_resize_handle');\n            if(handle) handle.style.display = 'none';\n        });\n        DOM.propertiesPanel.style.display = 'none';\n        DOM.propertiesEmpty.style.display = 'block';\n    }\n    \n    \/\/ --- \u30c9\u30e9\u30c3\u30b0\u51e6\u7406 ---\n    function pdftool_handleDragStart(e) {\n        if(e.target.tagName.toLowerCase() === 'input') return;\n        if(e.stopPropagation) e.stopPropagation();\n        \n        let targetElement = e.target;\n        while(targetElement && !targetElement.classList.contains('pdftool_element')){\n            targetElement = targetElement.parentElement;\n        }\n        if(!targetElement) return;\n\n        const id = targetElement.dataset.id;\n        pdftool_selectElement(id);\n        \n        const elem = pdftool_state.elements.find(e => e.id === id);\n        if(!elem) return;\n\n        pdftool_state.dragState = {\n            id: id,\n            startX: e.clientX,\n            startY: e.clientY,\n            startElemX: elem.x,\n            startElemY: elem.y,\n            type: 'move'\n        };\n\n        document.addEventListener('mousemove', pdftool_handleDragMove);\n        document.addEventListener('mouseup', pdftool_handleDragEnd);\n        \n        document.addEventListener('touchmove', pdftool_handleTouchMove, {passive: false});\n        document.addEventListener('touchend', pdftool_handleTouchEnd);\n    }\n    \n    function pdftool_handleResizeStart(e, id) {\n        if(e.stopPropagation) e.stopPropagation();\n        if(e.preventDefault) e.preventDefault();\n        \n        const elem = pdftool_state.elements.find(e => e.id === id);\n        if(!elem) return;\n\n        pdftool_state.dragState = {\n            id: id,\n            startX: e.clientX,\n            startY: e.clientY,\n            startWidth: elem.width,\n            startHeight: elem.height,\n            type: 'resize'\n        };\n\n        document.addEventListener('mousemove', pdftool_handleDragMove);\n        document.addEventListener('mouseup', pdftool_handleDragEnd);\n    }\n\n    function pdftool_handleDragMove(e) {\n        if (!pdftool_state.dragState) return;\n        if(e.preventDefault) e.preventDefault();\n\n        const overlayRect = DOM.overlay.getBoundingClientRect();\n        const dx = e.clientX - pdftool_state.dragState.startX;\n        const dy = e.clientY - pdftool_state.dragState.startY;\n\n        const dxPercent = (dx \/ overlayRect.width) * 100;\n        const dyPercent = (dy \/ overlayRect.height) * 100;\n\n        const elem = pdftool_state.elements.find(el => el.id === pdftool_state.dragState.id);\n        if (elem) {\n            if (pdftool_state.dragState.type === 'move') {\n                let newX = pdftool_state.dragState.startElemX + dxPercent;\n                let newY = pdftool_state.dragState.startElemY + dyPercent;\n                \n                newX = Math.max(0, Math.min(newX, 100 - elem.width));\n                newY = Math.max(0, Math.min(newY, 100 - elem.height));\n\n                elem.x = newX;\n                elem.y = newY;\n            } else if (pdftool_state.dragState.type === 'resize') {\n                let newW = pdftool_state.dragState.startWidth + dxPercent;\n                let newH = pdftool_state.dragState.startHeight + dyPercent;\n                \n                \/\/ \u30d4\u30af\u30bb\u30eb\u63db\u7b97\u3067\u306e\u6700\u5c0f\u30b5\u30a4\u30ba\u5236\u9650\u3092\u304b\u3051\u308b\n                let minWPx = elem.type === 'form_text' ? 160 : 120;\n                let minHPx = elem.type === 'form_text' ? 28 : 24;\n                \n                let minWPercent = (minWPx \/ overlayRect.width) * 100;\n                let minHPercent = (minHPx \/ overlayRect.height) * 100;\n                \n                elem.width = Math.max(minWPercent, Math.min(newW, 100 - elem.x));\n                elem.height = Math.max(minHPercent, Math.min(newH, 100 - elem.y));\n            }\n            \n            const elNode = document.querySelector(`.pdftool_element[data-id=\"${elem.id}\"]`);\n            if (elNode) {\n                elNode.style.left = elem.x + '%';\n                elNode.style.top = elem.y + '%';\n                elNode.style.width = elem.width + '%';\n                elNode.style.height = elem.height + '%';\n            }\n        }\n    }\n\n    function pdftool_handleDragEnd() {\n        if(!pdftool_state.dragState) return;\n        pdftool_state.dragState = null;\n        \n        document.removeEventListener('mousemove', pdftool_handleDragMove);\n        document.removeEventListener('mouseup', pdftool_handleDragEnd);\n    }\n    \n    function pdftool_handleTouchMove(e) {\n        if(!pdftool_state.dragState) return;\n        if(e.cancelable) e.preventDefault();\n        const touch = e.touches[0];\n        pdftool_handleDragMove({\n            clientX: touch.clientX,\n            clientY: touch.clientY,\n            preventDefault: () => {}\n        });\n    }\n    \n    function pdftool_handleTouchEnd(e) {\n        pdftool_handleDragEnd();\n        document.removeEventListener('touchmove', pdftool_handleTouchMove);\n        document.removeEventListener('touchend', pdftool_handleTouchEnd);\n    }\n\n    \/\/ --- PDF-lib \u65e5\u672c\u8a9e\u5bfe\u5fdc\u30fb\u6587\u5b57\u5316\u3051\u56de\u907f\u51e6\u7406 ---\n    async function drawTextWithFallback(page, pdfDoc, text, options, colorStr) {\n        if (!text) return;\n        \n        if (!hasMultibyteChar(text)) {\n            try {\n                page.drawText(text, options);\n                return;\n            } catch (e) {\n            }\n        }\n        \n        const fontSize = options.size || 12;\n        const canvas = document.createElement('canvas');\n        const ctx = canvas.getContext('2d');\n        const scale = 4;\n        const font = `${fontSize * scale}px sans-serif`;\n        \n        ctx.font = font;\n        const textMetrics = ctx.measureText(text);\n        const imgWidth = Math.ceil(textMetrics.width) + (10 * scale);\n        const imgHeight = fontSize * 1.5 * scale;\n        \n        canvas.width = imgWidth;\n        canvas.height = imgHeight;\n        \n        ctx.font = font;\n        ctx.fillStyle = `rgb(${colorStr})`;\n        \n        \/\/ \u30d9\u30fc\u30b9\u30e9\u30a4\u30f3\u3092\u660e\u793a\u7684\u306b\u6307\u5b9a\u3057\u3066\u30ad\u30e3\u30f3\u30d0\u30b9\u306b\u63cf\u753b\n        ctx.textBaseline = 'bottom';\n        const baselineOffset = fontSize * 1.2 * scale; \/\/ \u753b\u50cf\u306e\u4e0a\u304b\u30891.2em\u306e\u4f4d\u7f6e\u3092\u30d9\u30fc\u30b9\u30e9\u30a4\u30f3\u3068\u3059\u308b\n        ctx.fillText(text, 2 * scale, baselineOffset);\n        \n        const dataUrl = canvas.toDataURL('image\/png');\n        const base64Data = dataUrl.replace(\/^data:image\\\/png;base64,\/, \"\");\n        const binaryString = window.atob(base64Data);\n        const bytes = new Uint8Array(binaryString.length);\n        for (let i = 0; i < binaryString.length; i++) {\n            bytes[i] = binaryString.charCodeAt(i);\n        }\n        \n        const pngImage = await pdfDoc.embedPng(bytes);\n        \/\/ PDF\u306eY\u5ea7\u6a19(options.y)\u304c\u30d9\u30fc\u30b9\u30e9\u30a4\u30f3\u306a\u306e\u3067\u3001\u305d\u3053\u304b\u3089\u753b\u50cf\u306e\u30d9\u30fc\u30b9\u30e9\u30a4\u30f3\u5206\u3060\u3051\u4e0b\u3052\u308b\n        page.drawImage(pngImage, {\n            x: options.x - 2,\n            y: options.y - (fontSize * 0.3),\n            width: imgWidth \/ scale,\n            height: imgHeight \/ scale\n        });\n    }\n\n    \/\/ --- \u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u51e6\u7406 ---\n    async function pdftool_exportPDF(isFlatten) {\n        if (!pdftool_state.pdfDoc) {\n             pdftool_showToast('PDF\u30d5\u30a1\u30a4\u30eb\u304c\u8aad\u307f\u8fbc\u307e\u308c\u3066\u3044\u307e\u305b\u3093\u3002', true);\n             return;\n        }\n\n        const now = Date.now();\n        if (now - pdftool_state.lastExportTime < 3000) {\n            pdftool_showToast('\u51e6\u7406\u4e2d\u3067\u3059\u3002\u5c11\u3057\u5f85\u3063\u3066\u304b\u3089\u518d\u5ea6\u304a\u8a66\u3057\u304f\u3060\u3055\u3044\u3002', true);\n            return;\n        }\n        pdftool_state.lastExportTime = now;\n        pdftool_showToast('PDF\u3092\u751f\u6210\u3057\u3066\u3044\u307e\u3059... (\u30c7\u30fc\u30bf\u91cf\u306b\u3088\u308a\u6570\u79d2\u304b\u304b\u308a\u307e\u3059)');\n\n        try {\n            const pdfDoc = await PDFLib.PDFDocument.load(pdftool_state.pdfBytes);\n            const form = pdfDoc.getForm();\n            const pages = pdfDoc.getPages();\n\n            for (const elem of pdftool_state.elements) {\n                if (elem.page > pages.length) continue;\n                \n                const page = pages[elem.page - 1];\n                const { width, height } = page.getSize();\n                \n                const elementPdfWidth = (elem.width \/ 100) * width;\n                const elementPdfHeight = (elem.height \/ 100) * height;\n                const pdfX = (elem.x \/ 100) * width;\n                const pdfY = height - ((elem.y \/ 100) * height) - elementPdfHeight;\n\n                const rgbColor = pdftool_rgbStringToObj(elem.color);\n                const pdfLibColor = PDFLib.rgb(rgbColor.r, rgbColor.g, rgbColor.b);\n\n                \/\/ --- \u9ad8\u3055\u306e\u5b8c\u5168\u306a\u6574\u5217\uff08\u30d9\u30fc\u30b9\u30e9\u30a4\u30f3\u8a08\u7b97\uff09 ---\n                \/\/ \u8981\u7d20\u306e\u5782\u76f4\u65b9\u5411\u306e\u4e2d\u5fc3\u5ea7\u6a19\n                const centerY = pdfY + elementPdfHeight \/ 2;\n                \/\/ \u30c6\u30ad\u30b9\u30c8\u306e\u30d9\u30fc\u30b9\u30e9\u30a4\u30f3Y\u5ea7\u6a19\u3092\u5fae\u8abf\u6574\uff08\u4e2d\u5fc3\u304b\u3089\u30d5\u30a9\u30f3\u30c8\u30b5\u30a4\u30ba\u306e\u7d0435%\u4e0b\uff09\n                const textY = centerY - (parseInt(elem.fontSize) * 0.35);\n\n                if (elem.type === 'form_text') {\n                    \/\/ \u30e9\u30d9\u30eb\u306e\u5e45\u3092\u30d5\u30a9\u30f3\u30c8\u30b5\u30a4\u30ba\u3068\u6587\u5b57\u6570\u304b\u3089\u63a8\u6e2c\u3057\u3066\u78ba\u4fdd (HTML\u5074\u306e\u6319\u52d5\u306b\u5408\u308f\u305b\u308b)\n                    const emSize = parseInt(elem.fontSize);\n                    const labelLen = elem.labelValue ? Math.max(elem.labelValue.length, 3) : 3;\n                    \n                    const maxLabelWidth = elementPdfWidth * 0.4;\n                    const minFormWidth = 80;\n                    let labelWidth = Math.min(labelLen * emSize, maxLabelWidth);\n                    const gap = 8; \/\/ HTML\u5074\u3068\u540c\u30588pt\u306e\u4f59\u767d\n                    \n                    if (elementPdfWidth - labelWidth - gap < minFormWidth) {\n                        labelWidth = Math.max(0, elementPdfWidth - gap - minFormWidth);\n                    }\n\n                    const formX = pdfX + labelWidth + gap;\n                    const formWidth = Math.max(minFormWidth, elementPdfWidth - labelWidth - gap);\n\n                    let displayText = elem.labelValue;\n                    if (displayText) {\n                        const maxChars = Math.floor(labelWidth \/ emSize);\n                        if (displayText.length > maxChars && maxChars > 0) {\n                            displayText = displayText.substring(0, Math.max(1, maxChars - 1)) + '\u2026';\n                        }\n                    }\n\n                    \/\/ \u30e9\u30d9\u30eb\u306f\u5e38\u306b\u30d5\u30e9\u30c3\u30c8\u63cf\u753b\n                    if (displayText) {\n                        await drawTextWithFallback(page, pdfDoc, displayText, {\n                            x: pdfX + 2,\n                            y: textY,\n                            size: emSize,\n                            color: pdfLibColor,\n                        }, elem.color);\n                    }\n\n                    if (isFlatten) {\n                        \/\/ \u67a0\u7dda\u3068\u767d\u80cc\u666f\u3092\u63cf\u753b\n                        page.drawRectangle({\n                            x: formX,\n                            y: pdfY,\n                            width: formWidth,\n                            height: elementPdfHeight,\n                            color: PDFLib.rgb(1, 1, 1),\n                            borderColor: PDFLib.rgb(0.7, 0.75, 0.85),\n                            borderWidth: 1,\n                        });\n\n                        if (elem.value) {\n                            await drawTextWithFallback(page, pdfDoc, elem.value, {\n                                x: formX + 4,\n                                y: textY,\n                                size: emSize,\n                                color: pdfLibColor,\n                            }, elem.color);\n                        }\n                    } else {\n                        const textField = form.createTextField(elem.id);\n                        textField.addToPage(page, {\n                            x: formX,\n                            y: pdfY,\n                            width: formWidth,\n                            height: elementPdfHeight,\n                            textColor: pdfLibColor,\n                            backgroundColor: PDFLib.rgb(1, 1, 1), \/\/ \u5165\u529b\u3067\u304d\u308bPDF\u3082\u80cc\u666f\u3092\u767d\u306b\n                            borderColor: PDFLib.rgb(0.7, 0.75, 0.85),\n                            borderWidth: 1\n                        });\n                        \n                        if (elem.value) {\n                            if (!hasMultibyteChar(elem.value)) {\n                                textField.setText(elem.value);\n                            } else {\n                                console.info(\"\u203b\u5165\u529b\u6b04\u306e\u521d\u671f\u5024\u306b\u65e5\u672c\u8a9e\u7b49\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u5b89\u5168\u6027\u3092\u512a\u5148\u3057\u7a7a\u306e\u6b04\u3068\u3057\u3066\u51fa\u529b\u3057\u307e\u3057\u305f\u3002\");\n                            }\n                        }\n                    }\n\n                } else if (elem.type === 'form_check') {\n                    \/\/ HTML\u4e0a\u306e\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u5e45 (1.2em) \u306b\u5408\u308f\u305b\u308b\n                    const chkSize = parseInt(elem.fontSize) * 1.2;\n                    \/\/ \u30dc\u30c3\u30af\u30b9\u306e\u4e2d\u5fc3\u3092 centerY \u306b\u5408\u308f\u305b\u308b\u305f\u3081\u306eY\u5ea7\u6a19\n                    const chkY = centerY - (chkSize \/ 2);\n\n                    if (isFlatten) {\n                        page.drawRectangle({\n                            x: pdfX,\n                            y: chkY,\n                            width: chkSize,\n                            height: chkSize,\n                            borderColor: pdfLibColor,\n                            borderWidth: 1,\n                            color: PDFLib.rgb(1, 1, 1),\n                        });\n\n                        if (elem.value === 'true') {\n                            const markSize = chkSize * 0.8;\n                            const markY = centerY - (markSize * 0.35); \/\/ V\u30de\u30fc\u30af\u3082\u4e2d\u5fc3\u306b\u5408\u308f\u305b\u308b\n                            await drawTextWithFallback(page, pdfDoc, 'V', {\n                                x: pdfX + (chkSize - markSize) \/ 2 + 1,\n                                y: markY,\n                                size: markSize,\n                                color: pdfLibColor,\n                            }, elem.color);\n                        }\n                        \n                        if (elem.labelValue) {\n                            await drawTextWithFallback(page, pdfDoc, elem.labelValue, {\n                                x: pdfX + chkSize + 8,\n                                y: textY - 1, \/\/ \u2605\u6587\u5b57\u306e\u30d9\u30fc\u30b9\u30e9\u30a4\u30f3\u30921pt\u4e0b\u3052\u3066\u8996\u899a\u7684\u306a\u4e2d\u5fc3\u3092\u6574\u3048\u308b\n                                size: parseInt(elem.fontSize),\n                                color: pdfLibColor,\n                            }, elem.color);\n                        }\n                    } else {\n                        const checkBox = form.createCheckBox(elem.id);\n                        checkBox.addToPage(page, {\n                            x: pdfX,\n                            y: chkY,\n                            width: chkSize,\n                            height: chkSize\n                        });\n                        if (elem.value === 'true') checkBox.check();\n                        \n                        if (elem.labelValue) {\n                            await drawTextWithFallback(page, pdfDoc, elem.labelValue, {\n                                x: pdfX + chkSize + 8,\n                                y: textY - 1, \/\/ \u2605\u6587\u5b57\u306e\u30d9\u30fc\u30b9\u30e9\u30a4\u30f3\u30921pt\u4e0b\u3052\u3066\u8996\u899a\u7684\u306a\u4e2d\u5fc3\u3092\u6574\u3048\u308b\n                                size: parseInt(elem.fontSize),\n                                color: pdfLibColor,\n                            }, elem.color);\n                        }\n                    }\n                }\n            }\n\n            const pdfBytes = await pdfDoc.save();\n            const blob = new Blob([pdfBytes], { type: \"application\/pdf\" });\n            const link = document.createElement('a');\n            link.href = window.URL.createObjectURL(blob);\n            const prefix = isFlatten ? 'flatten_' : 'form_';\n            link.download = prefix + 'output.pdf';\n            link.click();\n            \n            setTimeout(() => URL.revokeObjectURL(link.href), 100);\n            \n            pdftool_showToast('PDF\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3057\u305f\u3002');\n            \n        } catch (e) {\n            console.error(\"PDF\u751f\u6210\u30a8\u30e9\u30fc\u8a73\u7d30:\", e);\n            pdftool_showToast('\u30a8\u30e9\u30fc: PDF\u306e\u4fdd\u5b58\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002', true);\n        }\n    }\n\n\n    \/\/ --- \u30a4\u30d9\u30f3\u30c8\u30ea\u30b9\u30ca\u30fc\u8a2d\u5b9a ---\n    \n    \/\/ \u30c9\u30e9\u30c3\u30b0\uff06\u30c9\u30ed\u30c3\u30d7\u95a2\u9023\n    DOM.dropzone.addEventListener('dragover', (e) => {\n        e.preventDefault();\n        \/\/ \u30c9\u30e9\u30c3\u30b0\u4e2d\u306e\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u5224\u5b9a (\u53ef\u80fd\u306a\u5834\u5408)\n        let isInvalid = false;\n        if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {\n            const item = e.dataTransfer.items[0];\n            if (item.kind === 'file' && item.type && item.type !== 'application\/pdf') {\n                isInvalid = true;\n            }\n        }\n        \n        if (isInvalid) {\n            DOM.dropzone.style.background = '#ffebee'; \/\/ \u8584\u3044\u8d64\n            e.dataTransfer.dropEffect = 'none'; \/\/ \u30c9\u30ed\u30c3\u30d7\u4e0d\u53ef\u306e\u30ab\u30fc\u30bd\u30eb\n        } else {\n            DOM.dropzone.style.background = '#e8e8e8'; \/\/ \u901a\u5e38\u306e\u30db\u30d0\u30fc\u8272\n            e.dataTransfer.dropEffect = 'copy';\n        }\n    });\n    DOM.dropzone.addEventListener('dragleave', (e) => {\n        e.preventDefault();\n        DOM.dropzone.style.background = '#fafafa';\n    });\n    DOM.dropzone.addEventListener('drop', (e) => {\n        e.preventDefault();\n        DOM.dropzone.style.background = '#fafafa';\n        if (e.dataTransfer.files.length) {\n            const file = e.dataTransfer.files[0];\n            \/\/ \u30c9\u30ed\u30c3\u30d7\u6642\u306e\u53b3\u5bc6\u306a\u5224\u5b9a\n            if (file.type !== 'application\/pdf' && !file.name.toLowerCase().endsWith('.pdf')) {\n                pdftool_showToast('\u30a8\u30e9\u30fc: PDF\u30d5\u30a1\u30a4\u30eb\u306e\u307f\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002', true);\n                return;\n            }\n            pdftool_handleFileSelect(file);\n        }\n    });\n    \n    DOM.btnSelectPdf.addEventListener('click', () => DOM.fileInput.click());\n    DOM.fileInput.addEventListener('change', (e) => {\n        if (e.target.files.length) pdftool_handleFileSelect(e.target.files[0]);\n    });\n    \n    \/\/ \u300c\u5225\u306ePDF\u300d\u30dc\u30bf\u30f3\n    DOM.reselectBtn.addEventListener('click', () => {\n        if (pdftool_state.elements.length > 0) {\n            if (!confirm(\"\u73fe\u5728\u306e\u7de8\u96c6\u5185\u5bb9\u306f\u524a\u9664\u3055\u308c\u307e\u3059\u3002\\n\u5225\u306ePDF\u3092\u9078\u629e\u3057\u307e\u3059\u304b\uff1f\")) {\n                return;\n            }\n        }\n        DOM.fileInput.value = '';\n        DOM.fileInput.click();\n    });\n\n    document.getElementById('pdftool_btn_prev').addEventListener('click', () => {\n        if (pdftool_state.pageNum <= 1) return;\n        pdftool_state.pageNum--;\n        pdftool_queueRenderPage(pdftool_state.pageNum);\n        pdftool_deselectElement();\n    });\n    document.getElementById('pdftool_btn_next').addEventListener('click', () => {\n        if (!pdftool_state.pdfDoc || pdftool_state.pageNum >= pdftool_state.pdfDoc.numPages) return;\n        pdftool_state.pageNum++;\n        pdftool_queueRenderPage(pdftool_state.pageNum);\n        pdftool_deselectElement();\n    });\n\n    document.getElementById('pdftool_btn_add_form_text').addEventListener('click', () => pdftool_addElement('form_text'));\n    document.getElementById('pdftool_btn_add_form_check').addEventListener('click', () => pdftool_addElement('form_check'));\n\n    DOM.container.addEventListener('mousedown', (e) => {\n        if (e.target === DOM.overlay || e.target === DOM.canvas) {\n            pdftool_deselectElement();\n        }\n    });\n\n    DOM.propFontSize.addEventListener('change', (e) => {\n        if (!pdftool_state.selectedId) return;\n        const elem = pdftool_state.elements.find(el => el.id === pdftool_state.selectedId);\n        if (elem) {\n            elem.fontSize = parseInt(e.target.value);\n            const elNode = document.querySelector(`.pdftool_element[data-id=\"${elem.id}\"]`);\n            if (elNode) elNode.style.fontSize = (elem.fontSize * pdftool_state.scale) + 'px';\n        }\n    });\n    DOM.propColor.addEventListener('change', (e) => {\n        if (!pdftool_state.selectedId) return;\n        const elem = pdftool_state.elements.find(el => el.id === pdftool_state.selectedId);\n        if (elem) {\n            elem.color = e.target.value;\n            const elNode = document.querySelector(`.pdftool_element[data-id=\"${elem.id}\"]`);\n            if (elNode) elNode.style.color = 'rgb(' + elem.color + ')';\n        }\n    });\n    \n    \/\/ \u300c\u5de6\u7aef\u3092\u63c3\u3048\u308b\u300d\u30dc\u30bf\u30f3\u306e\u51e6\u7406\n    document.getElementById('pdftool_btn_align_left').addEventListener('click', () => {\n        if (!pdftool_state.selectedId) return;\n        const currentElem = pdftool_state.elements.find(e => e.id === pdftool_state.selectedId);\n        if (!currentElem) return;\n\n        \/\/ \u540c\u3058\u30da\u30fc\u30b8\u306b\u3042\u308b\u3001\u9078\u629e\u3055\u308c\u3066\u3044\u306a\u3044\u4ed6\u306e\u8981\u7d20\u3092\u53d6\u5f97\n        const otherElements = pdftool_state.elements.filter(e => e.page === pdftool_state.pageNum && e.id !== currentElem.id);\n        \n        if (otherElements.length > 0) {\n            \/\/ \u4e00\u756a\u8fd1\u3044X\u5ea7\u6a19\u3092\u6301\u3064\u8981\u7d20\u3092\u63a2\u3059\n            let closestX = otherElements[0].x;\n            let minDiff = Math.abs(currentElem.x - closestX);\n            \n            for (let i = 1; i < otherElements.length; i++) {\n                const diff = Math.abs(currentElem.x - otherElements[i].x);\n                if (diff < minDiff) {\n                    minDiff = diff;\n                    closestX = otherElements[i].x;\n                }\n            }\n            \/\/ \u4e00\u756a\u8fd1\u3044X\u5ea7\u6a19\u306b\u30b9\u30ca\u30c3\u30d7\n            currentElem.x = closestX;\n            pdftool_renderOverlay();\n            pdftool_selectElement(currentElem.id); \/\/ \u9078\u629e\u72b6\u614b\u3092\u518d\u9069\u7528\n        } else {\n            pdftool_showToast('\u63c3\u3048\u308b\u57fa\u6e96\u3068\u306a\u308b\u4ed6\u306e\u8981\u7d20\u304c\u3042\u308a\u307e\u305b\u3093\u3002');\n        }\n    });\n    \n    const deleteSelected = () => {\n        if (!pdftool_state.selectedId) return;\n        pdftool_state.elements = pdftool_state.elements.filter(el => el.id !== pdftool_state.selectedId);\n        pdftool_deselectElement();\n        pdftool_renderOverlay(); \n    };\n    document.getElementById('pdftool_btn_delete_element').addEventListener('click', deleteSelected);\n    document.addEventListener('keydown', (e) => {\n        if ((e.key === 'Delete' || e.key === 'Backspace') && pdftool_state.selectedId) {\n            if (document.activeElement.tagName.toLowerCase() === 'input' && document.activeElement.type === 'text') return;\n            deleteSelected();\n        }\n    });\n\n    document.getElementById('pdftool_btn_export_interactive').addEventListener('click', () => pdftool_exportPDF(false));\n    document.getElementById('pdftool_btn_export_flatten').addEventListener('click', () => pdftool_exportPDF(true));\n\n});\n<\/script>\n\n\n\n\n<p>\u304a\u624b\u6301\u3061\u306ePDF\u30d5\u30a1\u30a4\u30eb\u306b\u6587\u5b57\u5165\u529b\u6b04\u3084\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u3092\u7c21\u5358\u306b\u8ffd\u52a0\u3057\u3001\u5165\u529b\u53ef\u80fd\u306aPDF\u30d5\u30a9\u30fc\u30e0\u3092\u4f5c\u6210\u3067\u304d\u308b\u7121\u6599\u306e\u30d6\u30e9\u30a6\u30b6\u30c4\u30fc\u30eb\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-0\">\u3053\u306e\u30c4\u30fc\u30eb\u3067\u3067\u304d\u308b\u3053\u3068<\/h3>\n\n\n\n<p>\u5f53\u30c4\u30fc\u30eb\u3067\u306f\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u4e0d\u8981\u30fb\u30d6\u30e9\u30a6\u30b6\u4e0a\u306e\u64cd\u4f5c\u306e\u307f\u3067\u4ee5\u4e0b\u306e\u6a5f\u80fd\u3092\u3054\u5229\u7528\u3044\u305f\u3060\u3051\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5165\u529b\u30d5\u30a9\u30fc\u30e0\u306e\u8ffd\u52a0<\/strong>\uff1a\u65e2\u5b58\u306ePDF\u306b\u3001\u30c6\u30ad\u30b9\u30c8\u3092\u5165\u529b\u3067\u304d\u308b\u67a0\u3084\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u3092\u81ea\u7531\u306a\u4f4d\u7f6e\u306b\u914d\u7f6e\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30ec\u30a4\u30a2\u30a6\u30c8\u3068\u30c7\u30b6\u30a4\u30f3\u306e\u8abf\u6574<\/strong>\uff1a\u914d\u7f6e\u3057\u305f\u9805\u76ee\u306e\u30b5\u30a4\u30ba\u5909\u66f4\u3001\u6587\u5b57\u30b5\u30a4\u30ba\u30fb\u6587\u5b57\u8272\u306e\u5909\u66f4\u304c\u76f4\u611f\u7684\u306a\u64cd\u4f5c\u3067\u884c\u3048\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u9805\u76ee\u306e\u6574\u5217\u6a5f\u80fd<\/strong>\uff1a\u8907\u6570\u306e\u5165\u529b\u6b04\u3092\u914d\u7f6e\u3059\u308b\u969b\u3001\u4e00\u756a\u8fd1\u3044\u9805\u76ee\u306e\u5de6\u7aef\u306b\u30d4\u30bf\u30c3\u3068\u63c3\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u305f\u3081\u3001\u7f8e\u3057\u3044\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u304c\u4f5c\u308c\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>2\u7a2e\u985e\u306e\u4fdd\u5b58\u5f62\u5f0f<\/strong>\uff1a\u76f8\u624b\u306b\u5165\u529b\u3057\u3066\u3082\u3089\u3046\u305f\u3081\u306e\u300c\u5165\u529b\u3067\u304d\u308bPDF\u300d\u3068\u3057\u3066\u306e\u4fdd\u5b58\u3068\u3001\u5165\u529b\u5185\u5bb9\u3092\u78ba\u5b9a\u3055\u305b\u3066\u7de8\u96c6\u4e0d\u53ef\u306b\u3059\u308b\u300c\u5b8c\u6210\u3057\u305fPDF\u300d\u3068\u3057\u3066\u306e\u4fdd\u5b58\u3092\u9078\u629e\u3067\u304d\u307e\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">\u30c4\u30fc\u30eb\u306e\u4f7f\u3044\u65b9<\/h3>\n\n\n\n<p>\u76f4\u611f\u7684\u306a\u64cd\u4f5c\u3067\u3001\u8ab0\u3067\u3082\u304b\u3093\u305f\u3093\u306bPDF\u30d5\u30a9\u30fc\u30e0\u3092\u4f5c\u6210\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>PDF\u30d5\u30a1\u30a4\u30eb\u306e\u8aad\u307f\u8fbc\u307f<\/strong>\uff1a\u30da\u30fc\u30b8\u4e0a\u90e8\u306e\u70b9\u7dda\u30a8\u30ea\u30a2\u306b\u3001\u30d9\u30fc\u30b9\u3068\u306a\u308bPDF\u30d5\u30a1\u30a4\u30eb\uff0820MB\u307e\u3067\uff09\u3092\u30c9\u30e9\u30c3\u30b0\uff06\u30c9\u30ed\u30c3\u30d7\u3059\u308b\u304b\u3001\u30dc\u30bf\u30f3\u304b\u3089\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u9805\u76ee\u306e\u8ffd\u52a0<\/strong>\uff1a\u753b\u9762\u4e0a\u90e8\u306e\u300c+ \u5165\u529b\u9805\u76ee\u3092\u8ffd\u52a0\u300d\u307e\u305f\u306f\u300c+ \u30c1\u30a7\u30c3\u30af\u9805\u76ee\u3092\u8ffd\u52a0\u300d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3001PDF\u4e0a\u306b\u8981\u7d20\u3092\u914d\u7f6e\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u4f4d\u7f6e\u3068\u30b5\u30a4\u30ba\u306e\u8abf\u6574<\/strong>\uff1a\u914d\u7f6e\u3055\u308c\u305f\u8981\u7d20\u3092\u30c9\u30e9\u30c3\u30b0\u3057\u3066\u5e0c\u671b\u306e\u4f4d\u7f6e\u3078\u79fb\u52d5\u3055\u305b\u307e\u3059\u3002\u8981\u7d20\u306e\u53f3\u4e0b\u3092\u5f15\u3063\u5f35\u308b\u3053\u3068\u3067\u3001\u5165\u529b\u67a0\u306e\u5927\u304d\u3055\u3092\u81ea\u7531\u306b\u5909\u66f4\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u8a73\u7d30\u8a2d\u5b9a<\/strong>\uff1a\u8981\u7d20\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u9078\u629e\u3059\u308b\u3068\u3001\u753b\u9762\u5de6\u5074\u306b\u8a2d\u5b9a\u30e1\u30cb\u30e5\u30fc\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u3053\u3053\u3067\u6587\u5b57\u30b5\u30a4\u30ba\u3084\u8272\u3092\u5909\u66f4\u3057\u305f\u308a\u3001\u9805\u76ee\u540d\uff08\u30e9\u30d9\u30eb\uff09\u3092\u66f8\u304d\u63db\u3048\u305f\u308a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\uff08\u4fdd\u5b58\uff09<\/strong>\uff1a\u3059\u3079\u3066\u306e\u914d\u7f6e\u304c\u5b8c\u4e86\u3057\u305f\u3089\u3001\u753b\u9762\u4e0b\u90e8\u304b\u3089\u4fdd\u5b58\u65b9\u6cd5\u3092\u9078\u3073\u307e\u3059\u3002\u300c\u5165\u529b\u3067\u304d\u308bPDF\u3068\u3057\u3066\u4fdd\u5b58\u300d\u3092\u9078\u3076\u3068\u30d5\u30a9\u30fc\u30e0\u4ed8\u304dPDF\u3068\u3057\u3066\u3001\u300c\u5b8c\u6210\u3057\u305fPDF\u3068\u3057\u3066\u4fdd\u5b58\u300d\u3092\u9078\u3076\u3068\u76f4\u63a5\u66f8\u304d\u8fbc\u307e\u308c\u305f\u66f8\u985e\u3068\u3057\u3066\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3055\u308c\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u3053\u306e\u30c4\u30fc\u30eb\u3067\u53d6\u5f97\u3059\u308b\u60c5\u5831\u306e\u57fa\u790e\u77e5\u8b58<\/h3>\n\n\n\n<p>\u3053\u306e\u30c4\u30fc\u30eb\u3067\u4f5c\u6210\u3067\u304d\u308b\u300c\u5165\u529b\u3067\u304d\u308bPDF\uff08\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6PDF\uff09\u300d\u306b\u95a2\u3059\u308b\u57fa\u790e\u77e5\u8b58\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5165\u529b\u30d5\u30a9\u30fc\u30e0\u4ed8\u304dPDF\u3068\u306f<\/strong> PDF\u30d5\u30a1\u30a4\u30eb\u5185\u306b\u3001\u30c6\u30ad\u30b9\u30c8\u30d5\u30a3\u30fc\u30eb\u30c9\uff08\u6587\u5b57\u5165\u529b\u67a0\uff09\u3084\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u306a\u3069\u306e\u5165\u529b\u5c02\u7528\u30a8\u30ea\u30a2\u304c\u57cb\u3081\u8fbc\u307e\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u3053\u3068\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5c02\u7528\u30bd\u30d5\u30c8\u306a\u3057\u3067\u5165\u529b\u53ef\u80fd<\/strong> \u30d5\u30a9\u30fc\u30e0\u4ed8\u304dPDF\u306f\u3001\u53d7\u3051\u53d6\u3063\u305f\u5074\u304c\u7279\u5225\u306a\u7de8\u96c6\u30bd\u30d5\u30c8\u3092\u6301\u3063\u3066\u3044\u306a\u304f\u3066\u3082\u3001Chrome\u3084Edge\u306a\u3069\u306e\u4e00\u822c\u7684\u306aWEB\u30d6\u30e9\u30a6\u30b6\u3001\u3042\u308b\u3044\u306f\u6a19\u6e96\u306ePDF\u30ea\u30fc\u30c0\u30fc\uff08\u7121\u6599\uff09\u3092\u958b\u304f\u3060\u3051\u3067\u3001\u76f4\u63a5\u6587\u5b57\u3092\u5165\u529b\u3057\u305f\u308a\u30c1\u30a7\u30c3\u30af\u3092\u5165\u308c\u305f\u308a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30d5\u30e9\u30c3\u30c8\u5316\uff08\u5b8c\u6210\u3057\u305fPDF\uff09\u3068\u306f<\/strong> \u5165\u529b\u3055\u308c\u305f\u6587\u5b57\u3084\u30c1\u30a7\u30c3\u30af\u30de\u30fc\u30af\u3092PDF\u306e\u80cc\u666f\u753b\u50cf\u3068\u4e00\u4f53\u5316\u3055\u305b\u3001\u5f8c\u304b\u3089\u5185\u5bb9\u3092\u66f8\u304d\u63db\u3048\u3089\u308c\u306a\u3044\u3088\u3046\u306b\u3059\u308b\u51e6\u7406\u306e\u3053\u3068\u3067\u3059\u3002\u63d0\u51fa\u7528\u306e\u66f8\u985e\u3068\u3057\u3066\u4fdd\u5b58\u3059\u308b\u5834\u5408\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\">\u3053\u306e\u30c4\u30fc\u30eb\u304c\u5f79\u7acb\u3064\u3068\u304d\u306f\u3069\u3093\u306a\u3068\u304d\uff1f\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306f\uff1f<\/h3>\n\n\n\n<p>\u66f8\u985e\u306e\u96fb\u5b50\u5316\u3084\u30da\u30fc\u30d1\u30fc\u30ec\u30b9\u5316\u3092\u9032\u3081\u305f\u3044\u30d3\u30b8\u30cd\u30b9\u30b7\u30fc\u30f3\u3084\u3001\u65e5\u5e38\u306e\u4e8b\u52d9\u4f5c\u696d\u3067\u5e45\u5e83\u304f\u3054\u6d3b\u7528\u3044\u305f\u3060\u3051\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u7533\u8fbc\u66f8\u3084\u7533\u8acb\u66f8\u306e\u4f5c\u6210<\/strong> \u7d19\u3067\u904b\u7528\u3057\u3066\u3044\u305f\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092PDF\u5316\u3057\u3001\u304a\u5ba2\u69d8\u304c\u30d1\u30bd\u30b3\u30f3\u3084\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u304b\u3089\u76f4\u63a5\u5165\u529b\u3067\u304d\u308b\u96fb\u5b50\u7533\u8fbc\u66f8\u3092\u4f5c\u6210\u3057\u305f\u3044\u3068\u304d\u3002<\/li>\n\n\n\n<li><strong>\u30a2\u30f3\u30b1\u30fc\u30c8\u7528\u7d19\u306e\u914d\u5e03<\/strong> \u9078\u629e\u5f0f\u306e\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u3068\u81ea\u7531\u8a18\u8ff0\u6b04\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u30a2\u30f3\u30b1\u30fc\u30c8\u7528\u7d19\u3092\u4f5c\u6210\u3057\u3001\u30e1\u30fc\u30eb\u306a\u3069\u3067\u914d\u5e03\u30fb\u56de\u53ce\u3057\u305f\u3044\u3068\u304d\u3002<\/li>\n\n\n\n<li><strong>\u81ea\u5206\u7528\u306e\u66f8\u985e\u3078\u306e\u66f8\u304d\u8fbc\u307f<\/strong> \u9001\u3089\u308c\u3066\u304d\u305fPDF\u306e\u5c65\u6b74\u66f8\u3001\u5c4a\u51fa\u66f8\u3001\u8acb\u6c42\u66f8\u306a\u3069\u306b\u3001\u5370\u5237\u3059\u308b\u3053\u3068\u306a\u304f\u76f4\u63a5\u6587\u5b57\u3084\u30c1\u30a7\u30c3\u30af\u3092\u66f8\u304d\u8fbc\u3093\u3067\u5b8c\u6210\u3055\u305b\u305f\u3044\u3068\u304d\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">\u3054\u5229\u7528\u306b\u3042\u305f\u3063\u3066\u306e\u6ce8\u610f\u70b9<\/h3>\n\n\n\n<p>\u300c\u5165\u529b\u3067\u304d\u308bPDF\u300d\u3068\u3057\u3066\u4fdd\u5b58\u3057\u305f\u5834\u5408\u3001\u5165\u529b\u6b04\u306e\u521d\u671f\u5024\u306b\u65e5\u672c\u8a9e\u7b49\u306e\u5168\u89d2\u6587\u5b57\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u3068\u3001\u74b0\u5883\u306b\u3088\u3063\u3066\u306f\u6587\u5b57\u5316\u3051\u3092\u9632\u3050\u305f\u3081\u306b\u51fa\u529b\u6642\u306b\u7a7a\u6b04\u306b\u30ea\u30bb\u30c3\u30c8\u3055\u308c\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u5bfe\u5fdc\u3057\u3066\u3044\u308b\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u306f\u300c.pdf\u300d\u306e\u307f\u3001\u30d5\u30a1\u30a4\u30eb\u30b5\u30a4\u30ba\u306f20MB\u307e\u3067\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305fPDF\u30d5\u30a1\u30a4\u30eb\u3084\u5165\u529b\u5185\u5bb9\u306f\u30d6\u30e9\u30a6\u30b6\u4e0a\u3067\u306e\u307f\u51e6\u7406\u3055\u308c\u3001\u5916\u90e8\u306e\u30b5\u30fc\u30d0\u30fc\u306b\u306f\u4fdd\u5b58\u3055\u308c\u307e\u305b\u3093\u306e\u3067\u3001\u6a5f\u5bc6\u60c5\u5831\u3092\u542b\u3080\u66f8\u985e\u3067\u3082\u5b89\u5fc3\u3057\u3066\u3054\u5229\u7528\u3044\u305f\u3060\u3051\u307e\u3059\u3002<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>PDF\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044 PDF\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e \u203b\u3053\u3053\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u30c9\u30e9\u30c3\u30b0\uff06\u30c9\u30ed\u30c3\u30d7\u3059\u308b\u304b\u3001\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u3066\u9078\u629e \u203b20MB\u307e\u3067\u306e\u300c.pdf\u300d\u30d5\u30a1\u30a4\u30eb\u306e\u307f\u5bfe\u5fdc \u73fe\u5728\u306ePDF\uff1a \u5225\u306ePDF + \u5165\u529b\u9805\u76ee\u3092\u8ffd\u52a0 + \u30c1 &#8230; <\/p>\n","protected":false},"author":4,"featured_media":14463,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[63,13],"tags":[],"class_list":{"0":"post-14350","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-pdf","8":"category-tool","9":"entry"},"_links":{"self":[{"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/posts\/14350","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/comments?post=14350"}],"version-history":[{"count":24,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/posts\/14350\/revisions"}],"predecessor-version":[{"id":14462,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/posts\/14350\/revisions\/14462"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/media\/14463"}],"wp:attachment":[{"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/media?parent=14350"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/categories?post=14350"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rakkokeyword.com\/techo\/wp-json\/wp\/v2\/tags?post=14350"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}