From 47f18b50ccee46ef9af635b022195bbca7a0e369 Mon Sep 17 00:00:00 2001 From: ysCha Date: Tue, 17 Mar 2026 17:38:50 +0900 Subject: [PATCH] =?UTF-8?q?[=EC=B9=B4=EC=B9=B4=EC=98=A4]=20=C2=AE=20?= =?UTF-8?q?=E2=86=92=20=3F=20=3D>=20=E2=93=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qcast/biz/estimate/EstimateService.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/com/interplug/qcast/biz/estimate/EstimateService.java b/src/main/java/com/interplug/qcast/biz/estimate/EstimateService.java index 4779b336..f7737b57 100644 --- a/src/main/java/com/interplug/qcast/biz/estimate/EstimateService.java +++ b/src/main/java/com/interplug/qcast/biz/estimate/EstimateService.java @@ -1504,6 +1504,20 @@ public class EstimateService { } while (!prevName.equals(itemName) && itemName.contains("&")); } + // 3. 엑셀/PDF 폰트(MS PGothic, BIZUDPGothic) 미지원 특수문자 치환 + // Ⓡ(U+24C7) 등 Enclosed Alphanumerics는 일본어 폰트가 지원하므로 깨지지 않음 + itemName = itemName + .replace("\u00AE", "\u24C7") // ® → Ⓡ + .replace("\u2122", "(TM)") // ™ → (TM) + .replace("\u00A9", "(C)") // © → (C) + .replace("\u2013", "-") // – (en dash) → - + .replace("\u2014", "-") // — (em dash) → - + .replace("\u2018", "'") // ' → ' + .replace("\u2019", "'") // ' → ' + .replace("\u201C", "\"") // " → " + .replace("\u201D", "\"") // " → " + .replace("\u2026", "..."); // … → ... + itemResponse.setItemName(itemName); } catch (Exception e) { log.warn("Excel itemName processing failed: {}", itemName); -- 2.47.2