{"id":10,"date":"2026-07-08T07:52:19","date_gmt":"2026-07-08T07:52:19","guid":{"rendered":"https:\/\/pdf.monsterkb.xyz\/?page_id=10"},"modified":"2026-07-09T13:13:24","modified_gmt":"2026-07-09T13:13:24","slug":"%eb%ac%b4%eb%a3%8c-pdf-%eb%b3%80%ed%99%98-%eb%8f%84%ea%b5%ac","status":"publish","type":"page","link":"https:\/\/pdf.monsterkb.xyz\/","title":{"rendered":"\ubb34\ub8cc PDF \ubcc0\ud658 \ub3c4\uad6c"},"content":{"rendered":"\n<!-- ============================================================\n  PDF \ud234\ubc15\uc2a4 \u2014 \uc62c\uc778\uc6d0 PDF \ub3c4\uad6c (\uc6cc\ub4dc\ud504\ub808\uc2a4 HTML \ube14\ub85d\uc6a9)\n  * \ubaa8\ub4e0 \ud30c\uc77c \ucc98\ub9ac\ub294 \ubc29\ubb38\uc790\uc758 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \uc774\ub904\uc9d1\ub2c8\ub2e4 (\uc11c\ubc84 \uc5c5\ub85c\ub4dc \uc5c6\uc74c)\n  * \ube0c\ub79c\ub4dc\uba85\/\uc0c9\uc0c1 \ubcc0\uacbd: \uc544\ub798 CSS \ubcc0\uc218(--ptb-accent)\uc640 \"PDF \ud234\ubc15\uc2a4\" \ud14d\uc2a4\ud2b8\ub9cc \uc218\uc815\n  ============================================================ -->\n<div id=\"pdftb\">\n<style>\n  body.home .wp-block-post-title, body.page-id-10 .wp-block-post-title{display:none}\n  body.home main.wp-block-group, body.page-id-10 main.wp-block-group{margin-top:18px}\n  body.home main .entry-content, body.page-id-10 main .entry-content{margin-top:0}\n  #pdftb{\n    --ptb-accent:#1f6feb; --ptb-accent2:#00a3ff; --ptb-ink:#10233f; --ptb-paper:#ffffff;\n    --ptb-bg:#f3f8ff; --ptb-card:#ffffff; --ptb-text:#172033; --ptb-sub:#627089; --ptb-line:#dce7f5;\n    --ptb-red:#ff4d5e; --ptb-green:#13a36b;\n    font-family:'Pretendard','Apple SD Gothic Neo','Noto Sans KR',-apple-system,sans-serif;\n    color:var(--ptb-text); line-height:1.6; max-width:1120px; margin:0 auto; padding:8px;\n  }\n  #pdftb *{box-sizing:border-box}\n  #pdftb .ptb-hero{position:relative; overflow:hidden; display:grid; grid-template-columns:minmax(0,1.15fr) minmax(280px,.85fr); gap:28px; align-items:center; margin:8px 0 20px; padding:38px 34px; border:1px solid #cfe0f5; border-radius:24px; background:linear-gradient(135deg,#f7fbff 0%,#eaf4ff 55%,#ffffff 100%); box-shadow:0 18px 50px rgba(31,111,235,.12)}\n  #pdftb .ptb-hero:before{content:\"PDF\"; position:absolute; right:-18px; top:-40px; font-size:9rem; line-height:1; font-weight:900; color:rgba(31,111,235,.07); letter-spacing:-.08em}\n  #pdftb .ptb-kicker{display:inline-flex; align-items:center; gap:8px; border:1px solid #cfe0f5; border-radius:999px; background:#fff; color:var(--ptb-accent); padding:6px 12px; font-size:.82rem; font-weight:800}\n  #pdftb .ptb-kicker:before{content:\"\"; width:8px; height:8px; border-radius:50%; background:var(--ptb-red)}\n  #pdftb .ptb-hero h1{font-size:clamp(2.3rem,5vw,4.2rem); line-height:1.04; letter-spacing:0; margin:16px 0 12px; font-weight:900; color:var(--ptb-ink)}\n  #pdftb .ptb-hero p{color:var(--ptb-sub); margin:0; max-width:620px; font-size:1.05rem}\n  #pdftb .ptb-hero-actions{display:flex; gap:12px; flex-wrap:wrap; margin-top:22px}\n  #pdftb .ptb-primary{border:0; border-radius:16px; background:var(--ptb-ink); color:#fff; padding:16px 24px; font-size:1.03rem; font-weight:900; cursor:pointer; box-shadow:0 12px 24px rgba(16,35,63,.2)}\n  #pdftb .ptb-secondary{border:1px solid #bfd2eb; border-radius:16px; background:#fff; color:var(--ptb-ink); padding:15px 20px; font-size:1rem; font-weight:800; cursor:pointer}\n  #pdftb .ptb-badges{display:flex; gap:8px; flex-wrap:wrap; margin-top:16px}\n  #pdftb .ptb-badge{background:#fff; color:var(--ptb-accent); border:1px solid #cfe0f5; border-radius:99px; padding:5px 12px; font-size:.82rem; font-weight:700}\n  #pdftb .ptb-visual{position:relative; min-height:280px}\n  #pdftb .ptb-sheet{position:absolute; background:#fff; border:1px solid #d4e3f6; border-radius:18px; box-shadow:0 16px 40px rgba(16,35,63,.14)}\n  #pdftb .ptb-sheet.one{right:20px; top:18px; width:220px; height:260px; transform:rotate(3deg)}\n  #pdftb .ptb-sheet.two{right:90px; top:44px; width:200px; height:230px; transform:rotate(-7deg)}\n  #pdftb .ptb-sheet:before{content:\"PDF\"; position:absolute; left:18px; top:16px; border-radius:10px; background:var(--ptb-red); color:#fff; padding:5px 9px; font-weight:900; font-size:.8rem}\n  #pdftb .ptb-sheet:after{content:\"\"; position:absolute; left:20px; right:20px; top:70px; height:90px; border-radius:10px; background:linear-gradient(#e7f0fc,#f8fbff)}\n  #pdftb .ptb-convert-chip{position:absolute; right:44px; bottom:26px; border-radius:18px; background:var(--ptb-ink); color:#fff; padding:14px 18px; font-weight:900; box-shadow:0 16px 34px rgba(16,35,63,.26)}\n  #pdftb .ptb-quick{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:14px; margin:18px 0}\n  #pdftb .ptb-quick button{display:flex; flex-direction:column; gap:6px; min-height:112px; border:1px solid #cfe0f5; border-radius:18px; background:#fff; color:var(--ptb-ink); padding:18px; text-align:left; cursor:pointer; box-shadow:0 10px 28px rgba(16,35,63,.08)}\n  #pdftb .ptb-quick button strong{font-size:1.08rem}\n  #pdftb .ptb-quick button span{color:var(--ptb-sub); font-size:.88rem}\n  #pdftb .ptb-tools-title{display:flex; align-items:flex-end; justify-content:space-between; gap:12px; margin:30px 0 12px}\n  #pdftb .ptb-tools-title h2{margin:0; font-size:1.35rem; color:var(--ptb-ink)}\n  #pdftb .ptb-tools-title p{margin:0; color:var(--ptb-sub); font-size:.9rem}\n  #pdftb .ptb-grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(210px,1fr)); gap:14px; margin:14px 0 18px}\n  #pdftb .ptb-card{background:var(--ptb-card); border:1px solid var(--ptb-line); border-radius:16px; padding:18px 16px; cursor:pointer; transition:all .15s; text-align:left; box-shadow:0 8px 20px rgba(16,35,63,.05)}\n  #pdftb .ptb-card:hover{border-color:var(--ptb-accent); box-shadow:0 12px 28px rgba(31,111,235,.14); transform:translateY(-2px)}\n  #pdftb .ptb-card .ic{font-size:1.7rem; margin-bottom:8px}\n  #pdftb .ptb-card h3{margin:0 0 4px; font-size:1rem; font-weight:800; color:var(--ptb-ink)}\n  #pdftb .ptb-card p{margin:0; font-size:.82rem; color:var(--ptb-sub)}\n  #pdftb .ptb-panel{display:none; background:var(--ptb-card); border:1px solid var(--ptb-line); border-radius:18px; padding:22px; margin:16px 0; box-shadow:0 16px 42px rgba(16,35,63,.1)}\n  #pdftb .ptb-back{background:none; border:none; color:var(--ptb-accent); cursor:pointer; font-size:.9rem; font-weight:600; padding:0; margin-bottom:10px}\n  #pdftb .ptb-panel h2{margin:0 0 4px; font-size:1.3rem}\n  #pdftb .ptb-panel .desc{color:var(--ptb-sub); font-size:.9rem; margin:0 0 16px}\n  #pdftb .ptb-drop{border:2px dashed #9cc2ee; border-radius:16px; padding:40px 16px; text-align:center; cursor:pointer; background:var(--ptb-bg); transition:all .15s}\n  #pdftb .ptb-drop.drag{border-color:var(--ptb-accent); background:#eaf4ff}\n  #pdftb .ptb-drop .big{font-size:2rem}\n  #pdftb .ptb-drop strong{color:var(--ptb-accent)}\n  #pdftb .ptb-files{margin:12px 0 0; padding:0; list-style:none}\n  #pdftb .ptb-files li{display:flex; align-items:center; gap:10px; background:var(--ptb-bg); border-radius:10px; padding:8px 12px; margin-top:6px; font-size:.88rem}\n  #pdftb .ptb-files li .sz{color:var(--ptb-sub); font-size:.78rem; margin-left:auto}\n  #pdftb .ptb-files li button{background:none; border:none; color:#c0392b; cursor:pointer; font-size:1rem}\n  #pdftb .ptb-opts{display:flex; flex-wrap:wrap; gap:14px; margin:16px 0; align-items:flex-end}\n  #pdftb .ptb-opt{display:flex; flex-direction:column; gap:4px; font-size:.85rem; font-weight:600}\n  #pdftb .ptb-opt input[type=text],#pdftb .ptb-opt input[type=number],#pdftb .ptb-opt select{border:1px solid var(--ptb-line); border-radius:8px; padding:8px 10px; font-size:.9rem; min-width:120px; background:#fff; color:var(--ptb-text)}\n  #pdftb .ptb-opt input[type=range]{width:150px}\n  #pdftb textarea.ptb-ta{width:100%; min-height:180px; border:1px solid var(--ptb-line); border-radius:10px; padding:12px; font-size:.95rem; margin-top:12px; font-family:inherit}\n  #pdftb .ptb-run{display:inline-block; background:var(--ptb-ink); color:#fff; border:none; border-radius:14px; padding:15px 38px; font-size:1.05rem; font-weight:900; cursor:pointer; margin-top:8px}\n  #pdftb .ptb-run:disabled{opacity:.5; cursor:not-allowed}\n  #pdftb .ptb-status{margin-top:12px; font-size:.88rem; color:var(--ptb-sub); min-height:1.2em}\n  #pdftb .ptb-status.err{color:#c0392b}\n  #pdftb .ptb-results{margin-top:14px}\n  #pdftb .ptb-results a.dl{display:flex; align-items:center; gap:10px; background:#eef9f1; border:1px solid #cdeeda; border-radius:10px; padding:10px 14px; margin-top:8px; text-decoration:none; color:#1d7a46; font-weight:600; font-size:.9rem}\n  #pdftb .ptb-results a.dl .sz{margin-left:auto; font-weight:400; font-size:.78rem; color:#4a8b64}\n  #pdftb .ptb-zip{margin-top:10px; background:#1d7a46; color:#fff; border:none; border-radius:10px; padding:10px 22px; font-weight:700; cursor:pointer}\n  #pdftb .ptb-info{background:var(--ptb-card); border:1px solid var(--ptb-line); border-radius:16px; padding:24px; margin:24px 0}\n  #pdftb .ptb-info h2{font-size:1.2rem; margin:0 0 10px}\n  #pdftb .ptb-info h3{font-size:1rem; margin:18px 0 6px}\n  #pdftb .ptb-info p{font-size:.92rem; color:var(--ptb-sub); margin:0 0 8px}\n  #pdftb .ptb-ad{margin:18px 0; border:1px solid var(--ptb-line); border-radius:16px; background:#fafafe; padding:18px}\n  #pdftb .ptb-affiliate-notice{margin:0 0 10px; color:#8a90a8; font-size:.78rem; text-align:center}\n  #pdftb .ptb-affiliate-card{display:flex; align-items:center; justify-content:center; gap:18px; flex-wrap:wrap}\n  #pdftb .ptb-affiliate-copy{max-width:460px; text-align:left}\n  #pdftb .ptb-affiliate-copy strong{display:block; margin-bottom:4px; font-size:1rem; color:var(--ptb-text)}\n  #pdftb .ptb-affiliate-copy p{margin:0 0 10px; color:var(--ptb-sub); font-size:.9rem}\n  #pdftb .ptb-affiliate-copy a{display:inline-flex; align-items:center; justify-content:center; border-radius:10px; background:var(--ptb-accent); color:#fff; padding:9px 16px; text-decoration:none; font-size:.88rem; font-weight:700}\n  #pdftb .ptb-affiliate-frame{width:120px; min-width:120px; height:240px; border:1px solid #e5e7eb; border-radius:8px; background:#fff; display:flex; align-items:center; justify-content:center; padding:8px; box-sizing:border-box}\n  #pdftb .ptb-affiliate-frame img{display:block; width:100%; height:auto; max-height:190px; border:0; object-fit:contain}\n  #pdftb .ptb-seo{background:#fff; border:1px solid var(--ptb-line); border-radius:16px; padding:24px; margin:24px 0}\n  #pdftb .ptb-seo h2{font-size:1.2rem; margin:0 0 10px}\n  #pdftb .ptb-seo h3{font-size:1rem; margin:18px 0 6px}\n  #pdftb .ptb-seo p,#pdftb .ptb-seo li{font-size:.92rem; color:var(--ptb-sub)}\n  #pdftb .ptb-seo ul{margin:8px 0 0; padding-left:20px}\n  #pdftb .ptb-foot{text-align:center; color:var(--ptb-sub); font-size:.8rem; padding:10px 0 30px}\n  @media (max-width:760px){\n    #pdftb .ptb-hero{grid-template-columns:1fr; padding:26px 20px}\n    #pdftb .ptb-visual{min-height:190px}\n    #pdftb .ptb-sheet.one{right:20px; top:0; width:170px; height:200px}\n    #pdftb .ptb-sheet.two{right:112px; top:24px; width:150px; height:176px}\n    #pdftb .ptb-quick{grid-template-columns:1fr}\n    #pdftb .ptb-tools-title{display:block}\n  }\n<\/style>\n\n<div class=\"ptb-hero\">\n  <div>\n    <span class=\"ptb-kicker\">\ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \ubc14\ub85c \ucc98\ub9ac<\/span>\n    <h1>PDF \ubcc0\ud658\uc744<br>\uc9c0\uae08 \ubc14\ub85c \uc2dc\uc791\ud558\uc138\uc694<\/h1>\n    <p>\ud569\uce58\uae30, \ubd84\ud560, \uc555\ucd95, \uc774\ubbf8\uc9c0 \ubcc0\ud658\uae4c\uc9c0 \uc124\uce58 \uc5c6\uc774 \ud55c \ud654\uba74\uc5d0\uc11c \ub05d\ub0c5\ub2c8\ub2e4. \ud30c\uc77c\uc740 \uc11c\ubc84\ub85c \uc804\uc1a1\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n    <div class=\"ptb-hero-actions\">\n      <button class=\"ptb-primary\" type=\"button\" data-tool=\"merge\">PDF \ud569\uce58\uae30 \ubc14\ub85c \uc2dc\uc791<\/button>\n      <button class=\"ptb-secondary\" type=\"button\" data-tool=\"compress\">\uc6a9\ub7c9 \uc904\uc774\uae30<\/button>\n    <\/div>\n    <div class=\"ptb-badges\">\n      <span class=\"ptb-badge\">100% \ubb34\ub8cc<\/span>\n      <span class=\"ptb-badge\">\uc124\uce58 \ubd88\ud544\uc694<\/span>\n      <span class=\"ptb-badge\">\uc11c\ubc84 \uc5c5\ub85c\ub4dc \uc5c6\uc74c<\/span>\n      <span class=\"ptb-badge\">\ubaa8\ubc14\uc77c \uc9c0\uc6d0<\/span>\n    <\/div>\n  <\/div>\n  <div class=\"ptb-visual\" aria-hidden=\"true\">\n    <div class=\"ptb-sheet two\"><\/div>\n    <div class=\"ptb-sheet one\"><\/div>\n    <div class=\"ptb-convert-chip\">PDF \u2192 \ubcc0\ud658 \uc644\ub8cc<\/div>\n  <\/div>\n<\/div>\n\n<div class=\"ptb-quick\">\n  <button type=\"button\" data-tool=\"merge\"><strong>\ud83d\udd17 PDF \ud569\uce58\uae30<\/strong><span>\uc5ec\ub7ec \ud30c\uc77c\uc744 \ud558\ub098\ub85c \ubb36\uae30<\/span><\/button>\n  <button type=\"button\" data-tool=\"img2pdf\"><strong>\ud83d\udcf7 \uc774\ubbf8\uc9c0 \u2192 PDF<\/strong><span>\uc0ac\uc9c4\uacfc \uc2a4\uce94\ubcf8\uc744 \ubb38\uc11c\ub85c \ub9cc\ub4e4\uae30<\/span><\/button>\n  <button type=\"button\" data-tool=\"pdf2img\"><strong>\ud83d\uddbc\ufe0f PDF \u2192 \uc774\ubbf8\uc9c0<\/strong><span>\ud398\uc774\uc9c0\ub97c PNG\/JPG\ub85c \uc800\uc7a5<\/span><\/button>\n<\/div>\n\n<div class=\"ptb-ad\">\n  <p class=\"ptb-affiliate-notice\">\uc774 \ud3ec\uc2a4\ud305\uc740 \ucfe0\ud321 \ud30c\ud2b8\ub108\uc2a4 \ud65c\ub3d9\uc758 \uc77c\ud658\uc73c\ub85c, \uc774\uc5d0 \ub530\ub978 \uc77c\uc815\uc561\uc758 \uc218\uc218\ub8cc\ub97c \uc81c\uacf5\ubc1b\uc2b5\ub2c8\ub2e4.<\/p>\n  <div class=\"ptb-affiliate-card\">\n    <div class=\"ptb-affiliate-frame\">\n      <a class=\"ptb-affiliate-image\" href=\"https:\/\/link.coupang.com\/a\/fdMcqEGSyG\" target=\"_blank\" rel=\"sponsored nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/thumbnail2.coupangcdn.com\/thumbnails\/remote\/212x212ex\/image\/vendor_inventory\/c67a\/4a21258148f74068024483bd747b23fb9a918663aa73542c67821661ef17.png\" width=\"104\" height=\"104\" alt=\"\ud648\ud2b8\ub8e8 \uace0\uc591\uc774 \ud0a4\ub9c1 \ucd94\ucc9c \uc0c1\ud488\" loading=\"eager\"><\/a>\n    <\/div>\n    <div class=\"ptb-affiliate-copy\">\n      <strong>\ucc45\uc0c1 \uc704 \ud3ec\uc778\ud2b8 \uc544\uc774\ud15c \ucd94\ucc9c<\/strong>\n      <p>PDF \uc791\uc5c5\ucc98\ub7fc \ubc18\ubcf5\ub418\ub294 \uc5c5\ubb34 \uc0ac\uc774\uc5d0 \uc791\uc740 \uc990\uac70\uc6c0\uc744 \uc8fc\ub294 \ud648\ud2b8\ub8e8 \uace0\uc591\uc774 \ud0a4\ub9c1\uc785\ub2c8\ub2e4.<\/p>\n      <a href=\"https:\/\/link.coupang.com\/a\/fdMcqEGSyG\" target=\"_blank\" rel=\"sponsored nofollow noopener\">\uc0c1\ud488 \ubcf4\uae30<\/a>\n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"ptb-tools-title\">\n  <div>\n    <h2>\uc6d0\ud558\ub294 PDF \uc791\uc5c5\uc744 \uc120\ud0dd\ud558\uc138\uc694<\/h2>\n    <p>\uce74\ub4dc\ub97c \ub204\ub974\uba74 \ubc14\ub85c \ud30c\uc77c \uc120\ud0dd \ud654\uba74\uc774 \uc5f4\ub9bd\ub2c8\ub2e4.<\/p>\n  <\/div>\n<\/div>\n\n<div class=\"ptb-grid\" id=\"ptbGrid\"><\/div>\n\n<div class=\"ptb-ad\">\n  <p class=\"ptb-affiliate-notice\">\uc774 \ud3ec\uc2a4\ud305\uc740 \uc81c\ud734 \ud65c\ub3d9\uc758 \uc77c\ud658\uc73c\ub85c, \uc774\uc5d0 \ub530\ub978 \uc77c\uc815\uc561\uc758 \uc218\uc218\ub8cc\ub97c \uc81c\uacf5\ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n  <div class=\"ptb-affiliate-card\">\n    <div class=\"ptb-affiliate-copy\">\n      <strong>\uc911\uc694\ud55c PDF\ub294 \ubcc0\ud658 \ud6c4 \ub530\ub85c \ubc31\uc5c5\ud558\uc138\uc694<\/strong>\n      <p>\uacc4\uc57d\uc11c, \uc138\uae08\uacc4\uc0b0\uc11c, \uc2a4\uce94\ubcf8\ucc98\ub7fc \ub2e4\uc2dc \ucc3e\uae30 \uc5b4\ub824\uc6b4 \ubb38\uc11c\ub294 \uc678\uc7a5 \uc800\uc7a5\uc7a5\uce58\uc5d0 \ud55c \ubc88 \ub354 \ubcf4\uad00\ud558\ub294 \uac83\uc744 \uad8c\uc7a5\ud569\ub2c8\ub2e4.<\/p>\n      <a href=\"https:\/\/link.coupang.com\/a\/fdKiC6zH2q\" target=\"_blank\" rel=\"sponsored nofollow noopener\">\uc0bc\uc131 T7 1TB \ud655\uc778\ud558\uae30<\/a>\n    <\/div>\n  <\/div>\n<\/div>\n\n<div class=\"ptb-panel\" id=\"ptbPanel\">\n  <button class=\"ptb-back\" id=\"ptbBack\">\u2190 \ubaa8\ub4e0 \ub3c4\uad6c \ubcf4\uae30<\/button>\n  <h2 id=\"ptbTitle\"><\/h2>\n  <p class=\"desc\" id=\"ptbDesc\"><\/p>\n  <div class=\"ptb-drop\" id=\"ptbDrop\">\n    <div class=\"big\">\ud83d\udcc4<\/div>\n    <div><strong>\ud30c\uc77c \uc120\ud0dd<\/strong> \ub610\ub294 \uc5ec\uae30\ub85c \ub04c\uc5b4\ub2e4 \ub193\uc73c\uc138\uc694<\/div>\n    <div style=\"font-size:.8rem;color:var(--ptb-sub);margin-top:4px\" id=\"ptbAccept\"><\/div>\n    <input type=\"file\" id=\"ptbInput\" hidden>\n  <\/div>\n  <ul class=\"ptb-files\" id=\"ptbFiles\"><\/ul>\n  <div id=\"ptbTaWrap\" style=\"display:none\"><textarea class=\"ptb-ta\" id=\"ptbTa\" placeholder=\"\uc5ec\uae30\uc5d0 \ud14d\uc2a4\ud2b8\ub97c \uc785\ub825\ud558\uac70\ub098 \ubd99\uc5ec\ub123\uc73c\uc138\uc694\u2026\"><\/textarea><\/div>\n  <div class=\"ptb-opts\" id=\"ptbOpts\"><\/div>\n  <button class=\"ptb-run\" id=\"ptbRun\">\uc2dc\uc791\ud558\uae30<\/button>\n  <div class=\"ptb-status\" id=\"ptbStatus\"><\/div>\n  <div class=\"ptb-results\" id=\"ptbResults\"><\/div>\n<\/div>\n\n<div class=\"ptb-info\">\n  <h2>\uc548\uc804\ud558\uace0 \ube60\ub978 PDF \ub3c4\uad6c<\/h2>\n  <p>\uc774 \ud398\uc774\uc9c0\uc758 \ubaa8\ub4e0 \ub3c4\uad6c\ub294 \uc5ec\ub7ec\ubd84\uc758 \ube0c\ub77c\uc6b0\uc800 \uc548\uc5d0\uc11c \uc9c1\uc811 \uc791\ub3d9\ud569\ub2c8\ub2e4. \ud30c\uc77c\uc774 \uc11c\ubc84\uc5d0 \uc5c5\ub85c\ub4dc\ub418\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \uac1c\uc778\uc815\ubcf4\ub098 \uae30\ubc00 \ubb38\uc11c\ub3c4 \uc548\uc2ec\ud558\uace0 \ucc98\ub9ac\ud560 \uc218 \uc788\uace0, \uc778\ud130\ub137 \uc18d\ub3c4\uc640 \uad00\uacc4\uc5c6\uc774 \ube60\ub974\uac8c \uacb0\uacfc\ub97c \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n  <h3>\uc0ac\uc6a9 \ubc29\ubc95<\/h3>\n  <p>1. \uc704\uc5d0\uc11c \uc6d0\ud558\ub294 \ub3c4\uad6c\ub97c \uc120\ud0dd\ud558\uc138\uc694. 2. PDF \ud30c\uc77c\uc744 \uc120\ud0dd\ud558\uac70\ub098 \ub04c\uc5b4\ub2e4 \ub193\uc73c\uc138\uc694. 3. \uc635\uc158\uc744 \uc870\uc815\ud55c \ub4a4 \uc2dc\uc791 \ubc84\ud2bc\uc744 \ub204\ub974\uba74 \uacb0\uacfc \ud30c\uc77c\uc744 \ubc14\ub85c \ub2e4\uc6b4\ub85c\ub4dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n  <h3>\ud68c\uc6d0\uac00\uc785\uc774 \ud544\uc694\ud55c\uac00\uc694?<\/h3>\n  <p>\uc544\ub2c8\uc694. \uac00\uc785, \ub85c\uadf8\uc778, \uc774\uba54\uc77c \uc785\ub825 \uc5c6\uc774 \ub204\uad6c\ub098 \ubb34\uc81c\ud55c\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n  <h3>\ud30c\uc77c\uc740 \uc5b4\ub514\uc5d0 \uc800\uc7a5\ub418\ub098\uc694?<\/h3>\n  <p>\uc5b4\ub514\uc5d0\ub3c4 \uc800\uc7a5\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ucc98\ub9ac \uacfc\uc815 \uc804\uccb4\uac00 \uc5ec\ub7ec\ubd84\uc758 \uae30\uae30 \uc548\uc5d0\uc11c \ub05d\ub098\uba70, \ud398\uc774\uc9c0\ub97c \ub2eb\uc73c\uba74 \ubaa8\ub4e0 \ub370\uc774\ud130\uac00 \uc0ac\ub77c\uc9d1\ub2c8\ub2e4.<\/p>\n<\/div>\n\n<div class=\"ptb-seo\">\n  <h2>\ubb34\ub8cc PDF \ubcc0\ud658 \ub3c4\uad6c\ub97c \ucc3e\uace0 \uc788\ub2e4\uba74<\/h2>\n  <p>PDF \ud234\ubc15\uc2a4\ub294 \ud504\ub85c\uadf8\ub7a8 \uc124\uce58 \uc5c6\uc774 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \ubc14\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ubb34\ub8cc PDF \ubcc0\ud658 \ub3c4\uad6c\uc785\ub2c8\ub2e4. PDF \ud569\uce58\uae30, PDF \ubd84\ud560, PDF \uc6a9\ub7c9 \uc904\uc774\uae30, PDF\ub97c \uc774\ubbf8\uc9c0\ub85c \ubcc0\ud658\ud558\uae30\ucc98\ub7fc \uc790\uc8fc \ud544\uc694\ud55c \uc791\uc5c5\uc744 \ud55c \ud398\uc774\uc9c0\uc5d0\uc11c \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n  <h3>\uc774\ub7f0 \uc791\uc5c5\uc5d0 \uc801\ud569\ud569\ub2c8\ub2e4<\/h3>\n  <ul>\n    <li>\uc5ec\ub7ec PDF \ud30c\uc77c\uc744 \ud558\ub098\ub85c \ud569\uce58\uace0 \uc2f6\uc744 \ub54c<\/li>\n    <li>PDF\uc5d0\uc11c \ud2b9\uc815 \ud398\uc774\uc9c0\ub9cc \ucd94\ucd9c\ud558\uac70\ub098 \uc0ad\uc81c\ud558\uace0 \uc2f6\uc744 \ub54c<\/li>\n    <li>PDF \ud30c\uc77c \uc6a9\ub7c9\uc744 \uc904\uc5ec \uc774\uba54\uc77c\uc774\ub098 \uba54\uc2e0\uc800\ub85c \ubcf4\ub0b4\uace0 \uc2f6\uc744 \ub54c<\/li>\n    <li>PDF \ud398\uc774\uc9c0\ub97c PNG \ub610\ub294 JPG \uc774\ubbf8\uc9c0\ub85c \uc800\uc7a5\ud558\uace0 \uc2f6\uc744 \ub54c<\/li>\n  <\/ul>\n  <h3>\uc790\uc8fc \ubb3b\ub294 \uc9c8\ubb38<\/h3>\n  <p><strong>Q. PDF \ud30c\uc77c\uc774 \uc11c\ubc84\uc5d0 \uc5c5\ub85c\ub4dc\ub418\ub098\uc694?<\/strong><br>\uc544\ub2c8\uc694. \ub300\ubd80\ubd84\uc758 \uc791\uc5c5\uc740 \ubc29\ubb38\uc790\uc758 \ube0c\ub77c\uc6b0\uc800 \uc548\uc5d0\uc11c \ucc98\ub9ac\ub429\ub2c8\ub2e4.<\/p>\n  <p><strong>Q. \ubaa8\ubc14\uc77c\uc5d0\uc11c\ub3c4 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub098\uc694?<\/strong><br>\ub124. \uc2a4\ub9c8\ud2b8\ud3f0 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c\ub3c4 \ud30c\uc77c \uc120\ud0dd\uacfc \ubcc0\ud658 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n  <p><strong>Q. \ubb34\ub8cc PDF \ub3c4\uad6c\uc778\uac00\uc694?<\/strong><br>\ub124. \ud68c\uc6d0\uac00\uc785 \uc5c6\uc774 \ubb34\ub8cc\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<\/div>\n\n<div class=\"ptb-ad\">\n  <p class=\"ptb-affiliate-notice\">\uc774 \ud3ec\uc2a4\ud305\uc740 \ucfe0\ud321 \ud30c\ud2b8\ub108\uc2a4 \ud65c\ub3d9\uc758 \uc77c\ud658\uc73c\ub85c, \uc774\uc5d0 \ub530\ub978 \uc77c\uc815\uc561\uc758 \uc218\uc218\ub8cc\ub97c \uc81c\uacf5\ubc1b\uc2b5\ub2c8\ub2e4.<\/p>\n  <div class=\"ptb-affiliate-card\">\n    <div class=\"ptb-affiliate-frame\">\n      <a class=\"ptb-affiliate-image\" href=\"https:\/\/link.coupang.com\/a\/fdKiC6zH2q\" target=\"_blank\" rel=\"sponsored nofollow noopener\"><img decoding=\"async\" src=\"https:\/\/thumbnail11.coupangcdn.com\/thumbnails\/remote\/212x212ex\/image\/vendor_inventory\/b987\/f7da30a7aac03e3f593de5f92a47c8262c8938c6ac959010a037a151d26f.png\" width=\"104\" height=\"104\" alt=\"\uc0bc\uc131\uc804\uc790 \uc678\uc7a5 SSD T7 1TB \ucd94\ucc9c \uc0c1\ud488\" loading=\"lazy\"><\/a>\n    <\/div>\n    <div class=\"ptb-affiliate-copy\">\n      <strong>\uc791\uc5c5\ud55c PDF \ud30c\uc77c\uc744 \uc548\uc804\ud558\uac8c \ubcf4\uad00\ud558\uc138\uc694<\/strong>\n      <p>\ub300\uc6a9\ub7c9 PDF\uc640 \uc774\ubbf8\uc9c0 \ubcc0\ud658 \uacb0\uacfc\ubb3c\uc744 \uc790\uc8fc \ub2e4\ub8ec\ub2e4\uba74 \ud734\ub300\uc6a9 SSD\uac00 \ubb38\uc11c \uad00\ub9ac\uc5d0 \ub3c4\uc6c0\uc774 \ub429\ub2c8\ub2e4.<\/p>\n      <a href=\"https:\/\/link.coupang.com\/a\/fdKiC6zH2q\" target=\"_blank\" rel=\"sponsored nofollow noopener\">\uc678\uc7a5 SSD \ubcf4\ub7ec\uac00\uae30<\/a>\n    <\/div>\n  <\/div>\n<\/div>\n<div class=\"ptb-foot\">\u24d2 PDF \ud234\ubc15\uc2a4 \u2014 \ubaa8\ub4e0 \ucc98\ub9ac\ub294 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \uc774\ub904\uc9d1\ub2c8\ub2e4<\/div>\n\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/3.11.174\/pdf.min.js\"><\/script>\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf-lib\/1.17.1\/pdf-lib.min.js\"><\/script>\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jszip\/3.10.1\/jszip.min.js\"><\/script>\n<script>\n(function(){\n'use strict';\nvar pdfjs = window['pdfjs-dist\/build\/pdf'];\npdfjs.GlobalWorkerOptions.workerSrc = 'https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/3.11.174\/pdf.worker.min.js';\nvar PL = window.PDFLib;\n\n\/* ---------- \uc720\ud2f8 ---------- *\/\nfunction fmtSize(b){ if(b>1048576) return (b\/1048576).toFixed(1)+' MB'; if(b>1024) return (b\/1024).toFixed(0)+' KB'; return b+' B'; }\nfunction baseName(n){ return n.replace(\/\\.[^.]+$\/,''); }\nfunction parseRanges(str, max){\n  \/\/ \"1-3,5,7-\" \u2192 0-based index \ubc30\uc5f4\n  var out = [];\n  if(!str || !str.trim()){ for(var i=0;i<max;i++) out.push(i); return out; }\n  str.split(',').forEach(function(part){\n    part = part.trim(); if(!part) return;\n    var m = part.match(\/^(\\d+)?\\s*-\\s*(\\d+)?$\/);\n    if(m){\n    if(part.indexOf('-')>=0){\n      var a = m[1]?parseInt(m[1]):1, b = m[2]?parseInt(m[2]):max;\n      for(var i=a;i<=b;i++) if(i>=1) if(i<=max) out.push(i-1);\n    }\n    } else {\n      var n = parseInt(part);\n      if(n>=1) if(n<=max) out.push(n-1);\n    }\n  });\n  return Array.from(new Set(out)).sort(function(a,b){return a-b});\n}\nfunction parseGroups(str, max){\n  \/\/ \"1-2,3-5\" \u2192 [[0,1],[2,3,4]]  (\uadf8\ub8f9\ubcc4 \ubd84\ud560\uc6a9)\n  if(!str || !str.trim()){ var g=[]; for(var i=0;i<max;i++) g.push([i]); return g; }\n  return str.split(',').map(function(part){ return parseRanges(part, max); }).filter(function(g){return g.length});\n}\nfunction readFileBytes(file){\n  return new Promise(function(res, rej){\n    var r = new FileReader();\n    r.onload = function(){ res(new Uint8Array(r.result)); };\n    r.onerror = rej;\n    r.readAsArrayBuffer(file);\n  });\n}\nfunction loadPdfLib(bytes){ return PL.PDFDocument.load(bytes, {ignoreEncryption:true}); }\nfunction canvasToBlob(cv, type, q){\n  return new Promise(function(res){ cv.toBlob(function(b){res(b);}, type, q); });\n}\nfunction blobToBytes(blob){\n  return new Promise(function(res,rej){\n    var r=new FileReader();\n    r.onload=function(){res(new Uint8Array(r.result));};\n    r.onerror=rej; r.readAsArrayBuffer(blob);\n  });\n}\n\n\/* ---------- \uc0c1\ud0dc ---------- *\/\nvar els = {\n  grid: document.getElementById('ptbGrid'), panel: document.getElementById('ptbPanel'),\n  back: document.getElementById('ptbBack'), title: document.getElementById('ptbTitle'),\n  desc: document.getElementById('ptbDesc'), drop: document.getElementById('ptbDrop'),\n  input: document.getElementById('ptbInput'), files: document.getElementById('ptbFiles'),\n  opts: document.getElementById('ptbOpts'), run: document.getElementById('ptbRun'),\n  status: document.getElementById('ptbStatus'), results: document.getElementById('ptbResults'),\n  accept: document.getElementById('ptbAccept'), taWrap: document.getElementById('ptbTaWrap'),\n  ta: document.getElementById('ptbTa')\n};\nvar current = null, fileList = [], resultBlobs = [];\n\nfunction setStatus(msg, err){ els.status.textContent = msg||''; els.status.className = 'ptb-status'+(err?' err':''); }\nfunction renderFiles(){\n  els.files.innerHTML = '';\n  fileList.forEach(function(f, i){\n    var li = document.createElement('li');\n    li.innerHTML = '<span>\ud83d\udcc4<\/span><span>'+f.name.replace(\/<\/g,'&lt;')+'<\/span><span class=\"sz\">'+fmtSize(f.size)+'<\/span>';\n    var btn = document.createElement('button'); btn.textContent = '\u2715';\n    btn.onclick = function(){ fileList.splice(i,1); renderFiles(); };\n    li.appendChild(btn);\n    els.files.appendChild(li);\n  });\n}\nfunction addResult(name, blob){\n  resultBlobs.push({name:name, blob:blob});\n  var a = document.createElement('a');\n  a.className = 'dl'; a.download = name; a.href = URL.createObjectURL(blob);\n  a.innerHTML = '\u2b07\ufe0f <span>'+name.replace(\/<\/g,'&lt;')+'<\/span><span class=\"sz\">'+fmtSize(blob.size)+'<\/span>';\n  els.results.appendChild(a);\n}\nfunction finishResults(){\n  if(resultBlobs.length > 1){\n    var btn = document.createElement('button');\n    btn.className = 'ptb-zip'; btn.textContent = '\ud83d\udce6 \uc804\uccb4 ZIP\uc73c\ub85c \ub2e4\uc6b4\ub85c\ub4dc';\n    btn.onclick = function(){\n      var zip = new JSZip();\n      resultBlobs.forEach(function(r){ zip.file(r.name, r.blob); });\n      zip.generateAsync({type:'blob'}).then(function(b){\n        var a = document.createElement('a');\n        a.href = URL.createObjectURL(b); a.download = 'pdf-toolbox.zip'; a.click();\n      });\n    };\n    els.results.appendChild(btn);\n  }\n}\n\n\/* ---------- \uc635\uc158 \ub80c\ub354\ub9c1 \ud5ec\ud37c ---------- *\/\nfunction opt(label, inner){ return '<label class=\"ptb-opt\">'+label+inner+'<\/label>'; }\nfunction optText(id, label, ph, val){ return opt(label, '<input type=\"text\" id=\"'+id+'\" placeholder=\"'+(ph||'')+'\" value=\"'+(val||'')+'\">'); }\nfunction optNum(id, label, val, min, max){ return opt(label, '<input type=\"number\" id=\"'+id+'\" value=\"'+val+'\" min=\"'+min+'\" max=\"'+max+'\">'); }\nfunction optSel(id, label, items){\n  var o = items.map(function(it){ return '<option value=\"'+it[0]+'\">'+it[1]+'<\/option>'; }).join('');\n  return opt(label, '<select id=\"'+id+'\">'+o+'<\/select>');\n}\nfunction gv(id){ return document.getElementById(id).value; }\n\n\/* ---------- \uacf5\ud1b5: PDF \ud398\uc774\uc9c0\ub97c \uce94\ubc84\uc2a4\ub85c \ub80c\ub354 ---------- *\/\nasync function renderPage(pdf, pageNum, scale){\n  var page = await pdf.getPage(pageNum);\n  var vp = page.getViewport({scale: scale});\n  var cv = document.createElement('canvas');\n  cv.width = Math.floor(vp.width); cv.height = Math.floor(vp.height);\n  await page.render({canvasContext: cv.getContext('2d'), viewport: vp}).promise;\n  return cv;\n}\n\n\/* ---------- \ub3c4\uad6c \uc815\uc758 ---------- *\/\nvar TOOLS = [\n{\n  id:'pdf2txt', icon:'\ud83d\udcdd', title:'PDF\ub97c \ud14d\uc2a4\ud2b8\ub85c', desc:'PDF\uc5d0\uc11c \ud14d\uc2a4\ud2b8\ub97c \ucd94\ucd9c\ud574 TXT \ud30c\uc77c\ub85c \uc800\uc7a5\ud569\ub2c8\ub2e4.',\n  accept:'.pdf', multiple:true, note:'PDF \ud30c\uc77c (\uc5ec\ub7ec \uac1c \uac00\ub2a5)',\n  options: optText('o_range','\ud398\uc774\uc9c0 \ubc94\uc704 (\uc608: 1-3,5)','\ube44\uc6b0\uba74 \uc804\uccb4'),\n  run: async function(){\n    for(var fi=0; fi<fileList.length; fi++){\n      var f = fileList[fi];\n      setStatus('\ucd94\ucd9c \uc911\u2026 ('+(fi+1)+'\/'+fileList.length+') '+f.name);\n      var bytes = await readFileBytes(f);\n      var pdf = await pdfjs.getDocument({data:bytes}).promise;\n      var pages = parseRanges(gv('o_range'), pdf.numPages);\n      var out = [];\n      for(var i=0;i<pages.length;i++){\n        var page = await pdf.getPage(pages[i]+1);\n        var tc = await page.getTextContent();\n        var txt = '', lastY = null;\n        tc.items.forEach(function(it){\n          var y = it.transform[5];\n          if(lastY !== null) if(Math.abs(y-lastY) > 3) if(txt) if(txt.slice(-1) !== '\\n') txt += '\\n';\n          txt += it.str;\n          if(it.hasEOL) if(txt.slice(-1) !== '\\n') txt += '\\n';\n          lastY = y;\n        });\n        out.push(txt.trim());\n        setStatus('\ucd94\ucd9c \uc911\u2026 '+f.name+' ('+(i+1)+'\/'+pages.length+' \ud398\uc774\uc9c0)');\n      }\n      var blob = new Blob([out.join('\\n\\n----- \ud398\uc774\uc9c0 \uad6c\ubd84 -----\\n\\n')], {type:'text\/plain;charset=utf-8'});\n      addResult(baseName(f.name)+'.txt', blob);\n    }\n  }\n},\n{\n  id:'merge', icon:'\ud83d\udd17', title:'PDF \ud569\uce58\uae30', desc:'\uc5ec\ub7ec PDF \ud30c\uc77c\uc744 \ud558\ub098\ub85c \ubcd1\ud569\ud569\ub2c8\ub2e4. \ud30c\uc77c \ucd94\uac00 \uc21c\uc11c\ub300\ub85c \ud569\uccd0\uc9d1\ub2c8\ub2e4.',\n  accept:'.pdf', multiple:true, note:'PDF \ud30c\uc77c 2\uac1c \uc774\uc0c1',\n  options:'',\n  run: async function(){\n    if(fileList.length < 2) throw new Error('2\uac1c \uc774\uc0c1\uc758 PDF \ud30c\uc77c\uc744 \uc120\ud0dd\ud574 \uc8fc\uc138\uc694.');\n    var out = await PL.PDFDocument.create();\n    for(var i=0;i<fileList.length;i++){\n      setStatus('\ubcd1\ud569 \uc911\u2026 ('+(i+1)+'\/'+fileList.length+')');\n      var src = await loadPdfLib(await readFileBytes(fileList[i]));\n      var pages = await out.copyPages(src, src.getPageIndices());\n      pages.forEach(function(p){ out.addPage(p); });\n    }\n    var bytes = await out.save();\n    addResult('\ud569\uccd0\uc9c4\ubb38\uc11c.pdf', new Blob([bytes], {type:'application\/pdf'}));\n  }\n},\n{\n  id:'split', icon:'\u2702\ufe0f', title:'PDF \ubd84\ud560', desc:'PDF\ub97c \uc5ec\ub7ec \uac1c\uc758 \ud30c\uc77c\ub85c \ub098\ub215\ub2c8\ub2e4.',\n  accept:'.pdf', multiple:false, note:'PDF \ud30c\uc77c 1\uac1c',\n  options: optText('o_groups','\ubd84\ud560 \uad6c\uac04 (\uc608: 1-2,3-5)','\ube44\uc6b0\uba74 \ud398\uc774\uc9c0\ub9c8\ub2e4 \ubd84\ud560'),\n  run: async function(){\n    var f = fileList[0];\n    var src = await loadPdfLib(await readFileBytes(f));\n    var groups = parseGroups(gv('o_groups'), src.getPageCount());\n    for(var g=0; g<groups.length; g++){\n      setStatus('\ubd84\ud560 \uc911\u2026 ('+(g+1)+'\/'+groups.length+')');\n      var doc = await PL.PDFDocument.create();\n      var pages = await doc.copyPages(src, groups[g]);\n      pages.forEach(function(p){ doc.addPage(p); });\n      var bytes = await doc.save();\n      addResult(baseName(f.name)+'_'+(g+1)+'.pdf', new Blob([bytes], {type:'application\/pdf'}));\n    }\n  }\n},\n{\n  id:'extract', icon:'\ud83d\udcd1', title:'\ud398\uc774\uc9c0 \ucd94\ucd9c', desc:'\uc6d0\ud558\ub294 \ud398\uc774\uc9c0\ub9cc \ubf51\uc544 \uc0c8 PDF\ub85c \uc800\uc7a5\ud569\ub2c8\ub2e4.',\n  accept:'.pdf', multiple:false, note:'PDF \ud30c\uc77c 1\uac1c',\n  options: optText('o_range','\ucd94\ucd9c\ud560 \ud398\uc774\uc9c0 (\uc608: 1,3,5-7)','\ud544\uc218 \uc785\ub825'),\n  run: async function(){\n    var f = fileList[0];\n    var src = await loadPdfLib(await readFileBytes(f));\n    var idx = parseRanges(gv('o_range'), src.getPageCount());\n    if(!gv('o_range').trim()) throw new Error('\ucd94\ucd9c\ud560 \ud398\uc774\uc9c0\ub97c \uc785\ub825\ud574 \uc8fc\uc138\uc694.');\n    var doc = await PL.PDFDocument.create();\n    var pages = await doc.copyPages(src, idx);\n    pages.forEach(function(p){ doc.addPage(p); });\n    var bytes = await doc.save();\n    addResult(baseName(f.name)+'_\ucd94\ucd9c.pdf', new Blob([bytes], {type:'application\/pdf'}));\n  }\n},\n{\n  id:'remove', icon:'\ud83d\uddd1\ufe0f', title:'\ud398\uc774\uc9c0 \uc0ad\uc81c', desc:'\ud544\uc694 \uc5c6\ub294 \ud398\uc774\uc9c0\ub97c \uc81c\uac70\ud55c \uc0c8 PDF\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.',\n  accept:'.pdf', multiple:false, note:'PDF \ud30c\uc77c 1\uac1c',\n  options: optText('o_range','\uc0ad\uc81c\ud560 \ud398\uc774\uc9c0 (\uc608: 2,4-5)','\ud544\uc218 \uc785\ub825'),\n  run: async function(){\n    var f = fileList[0];\n    var src = await loadPdfLib(await readFileBytes(f));\n    if(!gv('o_range').trim()) throw new Error('\uc0ad\uc81c\ud560 \ud398\uc774\uc9c0\ub97c \uc785\ub825\ud574 \uc8fc\uc138\uc694.');\n    var del = parseRanges(gv('o_range'), src.getPageCount());\n    var keep = src.getPageIndices().filter(function(i){ return del.indexOf(i)===-1; });\n    if(!keep.length) throw new Error('\ubaa8\ub4e0 \ud398\uc774\uc9c0\ub97c \uc0ad\uc81c\ud560 \uc218\ub294 \uc5c6\uc2b5\ub2c8\ub2e4.');\n    var doc = await PL.PDFDocument.create();\n    var pages = await doc.copyPages(src, keep);\n    pages.forEach(function(p){ doc.addPage(p); });\n    var bytes = await doc.save();\n    addResult(baseName(f.name)+'_\uc0ad\uc81c\ub428.pdf', new Blob([bytes], {type:'application\/pdf'}));\n  }\n},\n{\n  id:'rotate', icon:'\ud83d\udd04', title:'\ud398\uc774\uc9c0 \ud68c\uc804', desc:'PDF \ud398\uc774\uc9c0\ub97c 90\ub3c4 \ub2e8\uc704\ub85c \ud68c\uc804\ud569\ub2c8\ub2e4.',\n  accept:'.pdf', multiple:true, note:'PDF \ud30c\uc77c (\uc5ec\ub7ec \uac1c \uac00\ub2a5)',\n  options: optSel('o_angle','\ud68c\uc804 \uac01\ub3c4',[['90','90\u00b0 (\uc2dc\uacc4\ubc29\ud5a5)'],['180','180\u00b0'],['270','270\u00b0 (\ubc18\uc2dc\uacc4\ubc29\ud5a5)']]) +\n           optText('o_range','\ub300\uc0c1 \ud398\uc774\uc9c0','\ube44\uc6b0\uba74 \uc804\uccb4'),\n  run: async function(){\n    var angle = parseInt(gv('o_angle'));\n    for(var fi=0; fi<fileList.length; fi++){\n      var f = fileList[fi];\n      setStatus('\ud68c\uc804 \uc911\u2026 ('+(fi+1)+'\/'+fileList.length+')');\n      var doc = await loadPdfLib(await readFileBytes(f));\n      var idx = parseRanges(gv('o_range'), doc.getPageCount());\n      idx.forEach(function(i){\n        var p = doc.getPage(i);\n        p.setRotation(PL.degrees((p.getRotation().angle + angle) % 360));\n      });\n      var bytes = await doc.save();\n      addResult(baseName(f.name)+'_\ud68c\uc804.pdf', new Blob([bytes], {type:'application\/pdf'}));\n    }\n  }\n},\n{\n  id:'pdf2img', icon:'\ud83d\uddbc\ufe0f', title:'PDF\ub97c \uc774\ubbf8\uc9c0\ub85c', desc:'PDF \ud398\uc774\uc9c0\ub97c PNG \ub610\ub294 JPG \uc774\ubbf8\uc9c0\ub85c \ubcc0\ud658\ud569\ub2c8\ub2e4.',\n  accept:'.pdf', multiple:false, note:'PDF \ud30c\uc77c 1\uac1c',\n  options: optSel('o_fmt','\ud615\uc2dd',[['png','PNG'],['jpg','JPG']]) +\n           optSel('o_scale','\ud574\uc0c1\ub3c4',[['1.5','\ubcf4\ud1b5 (108 DPI)'],['2','\ub192\uc74c (144 DPI)'],['3','\ucd5c\uace0 (216 DPI)'],['1','\ub0ae\uc74c (72 DPI)']]) +\n           optText('o_range','\ud398\uc774\uc9c0 \ubc94\uc704','\ube44\uc6b0\uba74 \uc804\uccb4'),\n  run: async function(){\n    var f = fileList[0];\n    var fmt = gv('o_fmt'), scale = parseFloat(gv('o_scale'));\n    var pdf = await pdfjs.getDocument({data: await readFileBytes(f)}).promise;\n    var pages = parseRanges(gv('o_range'), pdf.numPages);\n    for(var i=0;i<pages.length;i++){\n      setStatus('\ubcc0\ud658 \uc911\u2026 ('+(i+1)+'\/'+pages.length+' \ud398\uc774\uc9c0)');\n      var cv = await renderPage(pdf, pages[i]+1, scale);\n      var blob = await canvasToBlob(cv, fmt==='png'?'image\/png':'image\/jpeg', 0.92);\n      addResult(baseName(f.name)+'_'+(pages[i]+1)+'.'+fmt, blob);\n    }\n  }\n},\n{\n  id:'img2pdf', icon:'\ud83d\udcf7', title:'\uc774\ubbf8\uc9c0\ub97c PDF\ub85c', desc:'JPG, PNG \ub4f1 \uc774\ubbf8\uc9c0\ub97c PDF \ubb38\uc11c\ub85c \ub9cc\ub4ed\ub2c8\ub2e4. \uc774\ubbf8\uc9c0 1\uc7a5\uc774 1\ud398\uc774\uc9c0\uac00 \ub429\ub2c8\ub2e4.',\n  accept:'image\/*', multiple:true, note:'\uc774\ubbf8\uc9c0 \ud30c\uc77c (\uc5ec\ub7ec \uac1c \uac00\ub2a5)',\n  options: optSel('o_size','\ud398\uc774\uc9c0 \ud06c\uae30',[['fit','\uc774\ubbf8\uc9c0 \ud06c\uae30 \uadf8\ub300\ub85c'],['a4','A4 (\uc138\ub85c)']]),\n  run: async function(){\n    if(!fileList.length) throw new Error('\uc774\ubbf8\uc9c0 \ud30c\uc77c\uc744 \uc120\ud0dd\ud574 \uc8fc\uc138\uc694.');\n    var doc = await PL.PDFDocument.create();\n    var useA4 = gv('o_size')==='a4';\n    for(var i=0;i<fileList.length;i++){\n      setStatus('\ucd94\uac00 \uc911\u2026 ('+(i+1)+'\/'+fileList.length+')');\n      var f = fileList[i];\n      var img;\n      if(f.type === 'image\/jpeg'){ img = await doc.embedJpg(await readFileBytes(f)); }\n      else if(f.type === 'image\/png'){ img = await doc.embedPng(await readFileBytes(f)); }\n      else {\n        \/\/ webp \ub4f1 \uae30\ud0c0 \ud615\uc2dd \u2192 \uce94\ubc84\uc2a4\ub97c \uac70\uccd0 PNG\ub85c\n        var bmp = await createImageBitmap(f);\n        var cv = document.createElement('canvas');\n        cv.width = bmp.width; cv.height = bmp.height;\n        cv.getContext('2d').drawImage(bmp,0,0);\n        img = await doc.embedPng(await blobToBytes(await canvasToBlob(cv,'image\/png')));\n      }\n      if(useA4){\n        var pw = 595.28, ph = 841.89;\n        var page = doc.addPage([pw, ph]);\n        var s = Math.min((pw-40)\/img.width, (ph-40)\/img.height);\n        var w = img.width*s, h = img.height*s;\n        page.drawImage(img, {x:(pw-w)\/2, y:(ph-h)\/2, width:w, height:h});\n      } else {\n        var page2 = doc.addPage([img.width, img.height]);\n        page2.drawImage(img, {x:0, y:0, width:img.width, height:img.height});\n      }\n    }\n    var bytes = await doc.save();\n    addResult('\uc774\ubbf8\uc9c0\ubb38\uc11c.pdf', new Blob([bytes], {type:'application\/pdf'}));\n  }\n},\n{\n  id:'compress', icon:'\ud83d\udddc\ufe0f', title:'PDF \uc6a9\ub7c9 \uc904\uc774\uae30', desc:'\ud398\uc774\uc9c0\ub97c \uc774\ubbf8\uc9c0\ub85c \uc7ac\uad6c\uc131\ud574 \ud30c\uc77c \ud06c\uae30\ub97c \uc904\uc785\ub2c8\ub2e4. (\ud14d\uc2a4\ud2b8 \uc120\ud0dd \uae30\ub2a5\uc740 \uc0ac\ub77c\uc9d1\ub2c8\ub2e4)',\n  accept:'.pdf', multiple:false, note:'PDF \ud30c\uc77c 1\uac1c',\n  options: optSel('o_q','\uc555\ucd95 \uac15\ub3c4',[['0.6','\ubcf4\ud1b5 (\uad8c\uc7a5)'],['0.4','\uac15\ud568 (\uc6a9\ub7c9 \ucd5c\uc18c)'],['0.8','\uc57d\ud568 (\ud488\uc9c8 \uc6b0\uc120)']]) ,\n  run: async function(){\n    var f = fileList[0];\n    var q = parseFloat(gv('o_q'));\n    var pdf = await pdfjs.getDocument({data: await readFileBytes(f)}).promise;\n    var doc = await PL.PDFDocument.create();\n    for(var i=1;i<=pdf.numPages;i++){\n      setStatus('\uc555\ucd95 \uc911\u2026 ('+i+'\/'+pdf.numPages+' \ud398\uc774\uc9c0)');\n      var page = await pdf.getPage(i);\n      var vp1 = page.getViewport({scale:1});\n      var cv = await renderPage(pdf, i, 1.5);\n      var blob = await canvasToBlob(cv, 'image\/jpeg', q);\n      var img = await doc.embedJpg(await blobToBytes(blob));\n      var p = doc.addPage([vp1.width, vp1.height]);\n      p.drawImage(img, {x:0, y:0, width:vp1.width, height:vp1.height});\n    }\n    var bytes = await doc.save();\n    var pct = Math.round((1 - bytes.length\/f.size)*100);\n    addResult(baseName(f.name)+'_\uc555\ucd95.pdf', new Blob([bytes], {type:'application\/pdf'}));\n    setStatus(pct > 0 ? '\uc644\ub8cc! \uc6a9\ub7c9\uc774 \uc57d '+pct+'% \uc904\uc5c8\uc2b5\ub2c8\ub2e4.' : '\uc644\ub8cc! (\uc774 \ud30c\uc77c\uc740 \ub354 \uc904\uc774\uae30 \uc5b4\ub835\uc2b5\ub2c8\ub2e4)');\n    return true; \/\/ \uc0c1\ud0dc \uba54\uc2dc\uc9c0 \uc720\uc9c0\n  }\n},\n{\n  id:'watermark', icon:'\ud83d\udca7', title:'\uc6cc\ud130\ub9c8\ud06c \ucd94\uac00', desc:'\ubaa8\ub4e0 \ud398\uc774\uc9c0\uc5d0 \ubc18\ud22c\uba85 \ud14d\uc2a4\ud2b8 \uc6cc\ud130\ub9c8\ud06c\ub97c \ub123\uc2b5\ub2c8\ub2e4. (\ud55c\uae00 \uc9c0\uc6d0)',\n  accept:'.pdf', multiple:false, note:'PDF \ud30c\uc77c 1\uac1c',\n  options: optText('o_text','\uc6cc\ud130\ub9c8\ud06c \ubb38\uad6c','\uc608: \ub300\uc678\ube44', '\ub300\uc678\ube44') +\n           optSel('o_op','\ud22c\uba85\ub3c4',[['0.15','\uc5f0\ud558\uac8c'],['0.3','\ubcf4\ud1b5'],['0.5','\uc9c4\ud558\uac8c']]) +\n           optSel('o_wsize','\ud06c\uae30',[['m','\ubcf4\ud1b5'],['s','\uc791\uac8c'],['l','\ud06c\uac8c']]),\n  run: async function(){\n    var f = fileList[0];\n    var text = gv('o_text').trim(); if(!text) throw new Error('\uc6cc\ud130\ub9c8\ud06c \ubb38\uad6c\ub97c \uc785\ub825\ud574 \uc8fc\uc138\uc694.');\n    var op = parseFloat(gv('o_op'));\n    var sizeMap = {s:0.35, m:0.55, l:0.8};\n    var doc = await loadPdfLib(await readFileBytes(f));\n    \/\/ \ud55c\uae00 \uc9c0\uc6d0\uc744 \uc704\ud574 \uce94\ubc84\uc2a4\ub85c \ud14d\uc2a4\ud2b8\ub97c \uadf8\ub9b0 \ub4a4 PNG\ub85c \uc0bd\uc785 (\ub300\uac01\uc120 \ud68c\uc804 \ud3ec\ud568)\n    var fs = 120;\n    var mcv = document.createElement('canvas');\n    var mctx = mcv.getContext('2d');\n    mctx.font = 'bold '+fs+'px sans-serif';\n    var tw = mctx.measureText(text).width, th = fs*1.3;\n    var diag = Math.ceil(Math.sqrt(tw*tw + th*th)) + 20;\n    mcv.width = diag; mcv.height = diag;\n    mctx = mcv.getContext('2d');\n    mctx.translate(diag\/2, diag\/2);\n    mctx.rotate(-Math.PI\/4);\n    mctx.font = 'bold '+fs+'px sans-serif';\n    mctx.fillStyle = 'rgba(120,120,140,'+op+')';\n    mctx.textAlign = 'center'; mctx.textBaseline = 'middle';\n    mctx.fillText(text, 0, 0);\n    var img = await doc.embedPng(await blobToBytes(await canvasToBlob(mcv, 'image\/png')));\n    doc.getPages().forEach(function(p){\n      var pw = p.getWidth(), ph = p.getHeight();\n      var side = Math.min(pw, ph) * sizeMap[gv('o_wsize')] * 1.6;\n      p.drawImage(img, {x:(pw-side)\/2, y:(ph-side)\/2, width:side, height:side});\n    });\n    var bytes = await doc.save();\n    addResult(baseName(f.name)+'_\uc6cc\ud130\ub9c8\ud06c.pdf', new Blob([bytes], {type:'application\/pdf'}));\n  }\n},\n{\n  id:'pagenum', icon:'\ud83d\udd22', title:'\ud398\uc774\uc9c0 \ubc88\ud638 \ucd94\uac00', desc:'\ubaa8\ub4e0 \ud398\uc774\uc9c0 \ud558\ub2e8 \ub610\ub294 \uc0c1\ub2e8\uc5d0 \ubc88\ud638\ub97c \ub123\uc2b5\ub2c8\ub2e4.',\n  accept:'.pdf', multiple:false, note:'PDF \ud30c\uc77c 1\uac1c',\n  options: optSel('o_pos','\uc704\uce58',[['bc','\ud558\ub2e8 \uac00\uc6b4\ub370'],['br','\ud558\ub2e8 \uc624\ub978\ucabd'],['bl','\ud558\ub2e8 \uc67c\ucabd'],['tc','\uc0c1\ub2e8 \uac00\uc6b4\ub370']]) +\n           optSel('o_style','\ud615\uc2dd',[['n','1, 2, 3\u2026'],['nt','1 \/ \uc804\uccb4']]) +\n           optNum('o_start','\uc2dc\uc791 \ubc88\ud638',1,1,9999),\n  run: async function(){\n    var f = fileList[0];\n    var doc = await loadPdfLib(await readFileBytes(f));\n    var font = await doc.embedFont(PL.StandardFonts.Helvetica);\n    var pos = gv('o_pos'), style = gv('o_style'), start = parseInt(gv('o_start'))||1;\n    var total = doc.getPageCount();\n    doc.getPages().forEach(function(p, i){\n      var label = style==='nt' ? (start+i)+' \/ '+(total+start-1) : String(start+i);\n      var size = 11, tw = font.widthOfTextAtSize(label, size);\n      var pw = p.getWidth(), x, y;\n      if(pos==='bc'){ x=(pw-tw)\/2; y=24; }\n      else if(pos==='br'){ x=pw-tw-36; y=24; }\n      else if(pos==='bl'){ x=36; y=24; }\n      else { x=(pw-tw)\/2; y=p.getHeight()-32; }\n      p.drawText(label, {x:x, y:y, size:size, font:font, color:PL.rgb(0.35,0.35,0.4)});\n    });\n    var bytes = await doc.save();\n    addResult(baseName(f.name)+'_\ubc88\ud638.pdf', new Blob([bytes], {type:'application\/pdf'}));\n  }\n},\n{\n  id:'txt2pdf', icon:'\ud83d\udcc4', title:'\ud14d\uc2a4\ud2b8\ub97c PDF\ub85c', desc:'\uc785\ub825\ud55c \ud14d\uc2a4\ud2b8\ub098 TXT \ud30c\uc77c\uc744 A4 PDF \ubb38\uc11c\ub85c \ub9cc\ub4ed\ub2c8\ub2e4. (\ud55c\uae00 \uc9c0\uc6d0)',\n  accept:'.txt', multiple:false, textarea:true, note:'TXT \ud30c\uc77c \ub610\ub294 \uc544\ub798\uc5d0 \uc9c1\uc811 \uc785\ub825',\n  options: optSel('o_fsize','\uae00\uc790 \ud06c\uae30',[['16','\ubcf4\ud1b5'],['14','\uc791\uac8c'],['20','\ud06c\uac8c']]),\n  run: async function(){\n    var text = els.ta.value;\n    if(fileList.length){\n      text = await new Promise(function(res,rej){\n        var r=new FileReader(); r.onload=function(){res(r.result)}; r.onerror=rej;\n        r.readAsText(fileList[0], 'utf-8');\n      });\n    }\n    if(!text.trim()) throw new Error('\ud14d\uc2a4\ud2b8\ub97c \uc785\ub825\ud558\uac70\ub098 TXT \ud30c\uc77c\uc744 \uc120\ud0dd\ud574 \uc8fc\uc138\uc694.');\n    \/\/ \ud55c\uae00 \uc9c0\uc6d0: \uce94\ubc84\uc2a4\uc5d0 \uc870\ud310 \ud6c4 \uc774\ubbf8\uc9c0\ub85c \uc0bd\uc785\n    var SC = 2; \/\/ \uc120\uba85\ub3c4 \ubc30\uc728\n    var pw = 595.28, ph = 841.89, margin = 56;\n    var fsize = parseInt(gv('o_fsize'));\n    var lineH = fsize*1.55;\n    var cw = (pw-margin*2)*SC;\n    \/\/ \uc904\ubc14\uafc8 \uacc4\uc0b0\n    var meas = document.createElement('canvas').getContext('2d');\n    meas.font = (fsize*SC)+'px sans-serif';\n    var lines = [];\n    text.split('\\n').forEach(function(para){\n      if(para===''){ lines.push(''); return; }\n      var cur = '';\n      for(var i=0;i<para.length;i++){\n        var t = cur + para[i];\n        if(meas.measureText(t).width > cw) if(cur){ lines.push(cur); cur = para[i]; }\n        else cur = t;\n      }\n      lines.push(cur);\n    });\n    var perPage = Math.floor((ph-margin*2)\/lineH);\n    var doc = await PL.PDFDocument.create();\n    var pageCount = Math.ceil(lines.length\/perPage) || 1;\n    for(var pg=0; pg<pageCount; pg++){\n      setStatus('\uc0dd\uc131 \uc911\u2026 ('+(pg+1)+'\/'+pageCount+' \ud398\uc774\uc9c0)');\n      var cv = document.createElement('canvas');\n      cv.width = Math.floor(pw*SC); cv.height = Math.floor(ph*SC);\n      var ctx = cv.getContext('2d');\n      ctx.fillStyle = '#ffffff'; ctx.fillRect(0,0,cv.width,cv.height);\n      ctx.fillStyle = '#1a1a1a'; ctx.font = (fsize*SC)+'px sans-serif';\n      ctx.textBaseline = 'top';\n      var slice = lines.slice(pg*perPage, (pg+1)*perPage);\n      slice.forEach(function(ln, li){\n        ctx.fillText(ln, margin*SC, (margin + li*lineH)*SC);\n      });\n      var img = await doc.embedJpg(await blobToBytes(await canvasToBlob(cv,'image\/jpeg',0.92)));\n      var p = doc.addPage([pw, ph]);\n      p.drawImage(img, {x:0, y:0, width:pw, height:ph});\n    }\n    var bytes = await doc.save();\n    addResult('\ud14d\uc2a4\ud2b8\ubb38\uc11c.pdf', new Blob([bytes], {type:'application\/pdf'}));\n  }\n}\n];\n\n\/* ---------- UI \uad6c\uc131 ---------- *\/\nTOOLS.forEach(function(t){\n  var card = document.createElement('div');\n  card.className = 'ptb-card';\n  card.innerHTML = '<div class=\"ic\">'+t.icon+'<\/div><h3>'+t.title+'<\/h3><p>'+t.desc+'<\/p>';\n  card.onclick = function(){ openTool(t); };\n  els.grid.appendChild(card);\n});\n\nArray.from(document.querySelectorAll('#pdftb [data-tool]')).forEach(function(btn){\n  btn.onclick = function(){\n    var id = btn.getAttribute('data-tool');\n    var tool = TOOLS.filter(function(t){ return t.id === id; })[0];\n    if(tool) openTool(tool);\n  };\n});\n\nfunction openTool(t){\n  current = t; fileList = []; resultBlobs = [];\n  els.grid.style.display = 'none';\n  els.panel.style.display = 'block';\n  els.title.textContent = t.icon+' '+t.title;\n  els.desc.textContent = t.desc;\n  els.accept.textContent = t.note || '';\n  els.input.accept = t.accept;\n  els.input.multiple = !!t.multiple;\n  els.opts.innerHTML = t.options || '';\n  els.files.innerHTML = ''; els.results.innerHTML = '';\n  els.taWrap.style.display = t.textarea ? 'block' : 'none';\n  els.ta.value = '';\n  setStatus('');\n  els.panel.scrollIntoView({behavior:'smooth', block:'start'});\n}\nels.back.onclick = function(){\n  els.panel.style.display = 'none';\n  els.grid.style.display = 'grid';\n  els.grid.scrollIntoView({behavior:'smooth', block:'start'});\n};\nels.drop.onclick = function(){ els.input.click(); };\nels.input.onchange = function(){ addFiles(this.files); this.value=''; };\n['dragover','dragenter'].forEach(function(ev){\n  els.drop.addEventListener(ev, function(e){ e.preventDefault(); els.drop.classList.add('drag'); });\n});\n['dragleave','drop'].forEach(function(ev){\n  els.drop.addEventListener(ev, function(e){ e.preventDefault(); els.drop.classList.remove('drag'); });\n});\nels.drop.addEventListener('drop', function(e){ addFiles(e.dataTransfer.files); });\n\nfunction addFiles(list){\n  if(!current) return;\n  var arr = Array.from(list);\n  if(!current.multiple){ fileList = arr.slice(0,1); }\n  else { fileList = fileList.concat(arr); }\n  renderFiles();\n}\n\nels.run.onclick = async function(){\n  if(!current) return;\n  if(!fileList.length) if(!current.textarea){ setStatus('\uba3c\uc800 \ud30c\uc77c\uc744 \uc120\ud0dd\ud574 \uc8fc\uc138\uc694.', true); return; }\n  els.run.disabled = true;\n  els.results.innerHTML = ''; resultBlobs = [];\n  try{\n    var keepMsg = await current.run();\n    finishResults();\n    if(!keepMsg) setStatus('\u2705 \uc644\ub8cc! \uc544\ub798\uc5d0\uc11c \ud30c\uc77c\uc744 \ub2e4\uc6b4\ub85c\ub4dc\ud558\uc138\uc694.');\n  }catch(err){\n    console.error(err);\n    setStatus('\u26a0\ufe0f ' + (err ? (err.message ? err.message : '\ucc98\ub9ac \uc911 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4. \ud30c\uc77c\uc774 \uc190\uc0c1\ub418\uc5c8\uac70\ub098 \uc554\ud638\ud654\ub418\uc5b4 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.') : '\ucc98\ub9ac \uc911 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4. \ud30c\uc77c\uc774 \uc190\uc0c1\ub418\uc5c8\uac70\ub098 \uc554\ud638\ud654\ub418\uc5b4 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.'), true);\n  }\n  els.run.disabled = false;\n};\n})();\n<\/script>\n<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>\ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \ubc14\ub85c \ucc98\ub9ac PDF \ubcc0\ud658\uc744\uc9c0\uae08 \ubc14\ub85c \uc2dc\uc791\ud558\uc138\uc694 \ud569\uce58\uae30, \ubd84\ud560, \uc555\ucd95, \uc774\ubbf8\uc9c0 \ubcc0\ud658\uae4c\uc9c0 \uc124\uce58 \uc5c6\uc774 \ud55c \ud654\uba74\uc5d0\uc11c \ub05d\ub0c5\ub2c8\ub2e4. \ud30c\uc77c\uc740 \uc11c\ubc84\ub85c \uc804\uc1a1\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. PDF \ud569\uce58\uae30 \ubc14\ub85c \uc2dc\uc791 \uc6a9\ub7c9 \uc904\uc774\uae30 100% \ubb34\ub8cc \uc124\uce58 \ubd88\ud544\uc694 \uc11c\ubc84 \uc5c5\ub85c\ub4dc \uc5c6\uc74c \ubaa8\ubc14\uc77c \uc9c0\uc6d0 PDF \u2192 \ubcc0\ud658 \uc644\ub8cc \ud83d\udd17 PDF \ud569\uce58\uae30\uc5ec\ub7ec \ud30c\uc77c\uc744 \ud558\ub098\ub85c \ubb36\uae30 \ud83d\udcf7 \uc774\ubbf8\uc9c0 \u2192 PDF\uc0ac\uc9c4\uacfc \uc2a4\uce94\ubcf8\uc744 \ubb38\uc11c\ub85c \ub9cc\ub4e4\uae30 \ud83d\uddbc\ufe0f PDF [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-10","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/pdf.monsterkb.xyz\/index.php?rest_route=\/wp\/v2\/pages\/10","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pdf.monsterkb.xyz\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/pdf.monsterkb.xyz\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/pdf.monsterkb.xyz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pdf.monsterkb.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10"}],"version-history":[{"count":9,"href":"https:\/\/pdf.monsterkb.xyz\/index.php?rest_route=\/wp\/v2\/pages\/10\/revisions"}],"predecessor-version":[{"id":20,"href":"https:\/\/pdf.monsterkb.xyz\/index.php?rest_route=\/wp\/v2\/pages\/10\/revisions\/20"}],"wp:attachment":[{"href":"https:\/\/pdf.monsterkb.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}