"""이상적인 슬라이드 시뮬레이션 v2. 콘텐츠의 전달 의도를 정확히 반영한 블록 배치. 핵심: "DX와 BIM은 다르다. BIM은 DX의 일부다."를 독자가 이해하게 하는 것. Kei API 불필요 — 순수 렌더링만. """ from __future__ import annotations import asyncio import json import sys from pathlib import Path ROOT = Path(__file__).parent.parent sys.path.insert(0, str(ROOT)) # 직접 HTML을 작성하여 렌더링 SLIDE_HTML = """ 건설산업 DX의 올바른 이해
건설산업 DX의 올바른 이해
현실 — 용어의 혼용
건설산업에서 DX와 BIM이 동일 개념으로 인식되고 있다. DX는 산업 전반의 프로세스를 혁신하는 상위개념이며, BIM은 하위 기술에 해당한다.
스마트 건설 활성화 방안 (2022.07)
추진과제: 건설산업 디지털화
실행과제: BIM 전면 도입, BIM 전문인력 양성
제7차 건설기술진흥 기본계획 (2023.12)
추진방향: 디지털 전환을 통한 스마트 건설 확산
추진과제: BIM 도입으로 건설산업 디지털화
DX와 핵심기술의 올바른 관계
DX — 디지털 전환 (상위개념)
BIM, GIS, 디지털 트윈 등 핵심기술의 융합을 통해서만 실현 가능
G
GIS
지리적 데이터를 공간 분석하여 시각적으로 표현, 위치기반 정보 제공
B
BIM
시설물 생애주기 정보를 3차원 모델 기반으로 통합·관리하는 도구
T
디지털 트윈
현실 세계의 물리적 객체를 디지털 환경에 동일하게 구현
DX는 이들 기술을 통합하여 업무방식과 가치 창출 구조를 근본적으로 전환하는 과정이다.
BIM ≠ DX — BIM은 DX를 실현하기 위한 핵심 기술 중 하나일 뿐이다.
""" async def main(): from src.slide_measurer import measure_rendered_heights, capture_slide_screenshot import base64 out_dir = ROOT / "data" / "runs" / "ideal_v2" out_dir.mkdir(parents=True, exist_ok=True) # 렌더링 + 측정 m = await asyncio.to_thread(measure_rendered_heights, SLIDE_HTML) s = await asyncio.to_thread(capture_slide_screenshot, SLIDE_HTML) (out_dir / "ideal_v2.html").write_text(SLIDE_HTML, encoding="utf-8") if s: (out_dir / "ideal_v2_screenshot.png").write_bytes(base64.b64decode(s)) print("=== 이상적인 슬라이드 v2 ===") slide = m.get("slide", {}) print(f" slide: {slide.get('scrollHeight', 0)}px / 720px {'✅' if not slide.get('overflowed') else '❌'}") for name, data in m.get("zones", {}).items(): status = "✅" if not data.get("overflowed") else f"❌ +{data.get('excess_px', 0)}px" print(f" {name}: {data.get('scrollHeight', 0)}px / {data.get('clientHeight', 0)}px {status}") print(f"\n결과: {out_dir}/ideal_v2_screenshot.png") if __name__ == "__main__": import logging logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s", datefmt="%H:%M:%S") logging.getLogger("selenium").setLevel(logging.WARNING) logging.getLogger("urllib3").setLevel(logging.WARNING) asyncio.run(main())