-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_environment_check.py
More file actions
167 lines (137 loc) · 5.64 KB
/
test_environment_check.py
File metadata and controls
167 lines (137 loc) · 5.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#!/usr/bin/env python3
"""다른 환경에서 PDF 문제 진단 도구"""
import os
import sys
import locale
import platform
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
def check_pdf_environment():
"""PDF 생성 환경 진단"""
print("🔍 PDF 환경 진단 도구")
print("=" * 60)
# 1. 시스템 정보
print("\n1️⃣ 시스템 정보")
print(f" OS: {platform.system()} {platform.release()}")
print(f" Python: {sys.version}")
print(f" 인코딩: {sys.getdefaultencoding()}")
print(f" 로케일: {locale.getdefaultlocale()}")
# 2. 한글 폰트 검사
print("\n2️⃣ 한글 폰트 검사")
font_paths = [
# Windows 폰트
"C:/Windows/Fonts/malgun.ttf", # 맑은 고딕
"C:/Windows/Fonts/malgunbd.ttf", # 맑은 고딕 Bold
"C:/Windows/Fonts/gulim.ttc", # 굴림
"C:/Windows/Fonts/batang.ttc", # 바탕
"C:/Windows/Fonts/NanumGothic.ttf", # 나눔고딕
# macOS 폰트
"/System/Library/Fonts/AppleSDGothicNeo.ttc",
"/Library/Fonts/NanumGothic.ttf",
# Linux 폰트
"/usr/share/fonts/truetype/nanum/NanumGothic.ttf",
"/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf"
]
available_fonts = []
for font_path in font_paths:
if os.path.exists(font_path):
available_fonts.append(font_path)
print(f" ✅ 발견: {font_path}")
if not available_fonts:
print(" ❌ 한글 폰트가 하나도 없습니다!")
return False
# 3. 폰트 등록 테스트
print("\n3️⃣ 폰트 등록 테스트")
for font_path in available_fonts[:3]: # 처음 3개만 테스트
try:
font_name = f"TestFont_{os.path.basename(font_path)}"
pdfmetrics.registerFont(TTFont(font_name, font_path))
print(f" ✅ 등록 성공: {font_name}")
except Exception as e:
print(f" ❌ 등록 실패: {font_path} - {e}")
# 4. 한글 텍스트 인코딩 테스트
print("\n4️⃣ 한글 텍스트 인코딩 테스트")
test_texts = [
"한글 테스트",
"김철수 엔지니어",
"프레스 기계 소음 문제",
"100톤 유압 시스템",
"⚠️🔧💰📊 특수문자"
]
for text in test_texts:
try:
# UTF-8 인코딩 테스트
encoded = text.encode('utf-8')
decoded = encoded.decode('utf-8')
if text == decoded:
print(f" ✅ UTF-8: {text}")
else:
print(f" ❌ UTF-8 실패: {text}")
except Exception as e:
print(f" ❌ 인코딩 오류: {text} - {e}")
# 5. 환경변수 확인
print("\n5️⃣ 환경변수 확인")
env_vars = ['PYTHONIOENCODING', 'LC_ALL', 'LANG', 'PYTHONPATH']
for var in env_vars:
value = os.environ.get(var, 'Not set')
print(f" {var}: {value}")
# 6. 권장 해결책
print("\n6️⃣ 권장 해결책")
if platform.system() == 'Windows':
if not any('malgun' in font for font in available_fonts):
print(" ❌ 맑은고딕 폰트 없음 → Windows 업데이트 필요")
print(" 💡 Windows: 시스템 → 언어 → 한국어 팩 설치")
elif platform.system() == 'Darwin': # macOS
print(" 💡 macOS: brew install font-nanum-gothic")
elif platform.system() == 'Linux':
print(" 💡 Ubuntu: sudo apt-get install fonts-nanum")
print(" 💡 CentOS: sudo yum install naver-nanum-fonts")
print("\n📝 추가 환경설정:")
print(" export PYTHONIOENCODING=utf-8")
print(" export LC_ALL=ko_KR.UTF-8")
print(" export LANG=ko_KR.UTF-8")
return len(available_fonts) > 0
def generate_fix_script():
"""자동 수정 스크립트 생성"""
script_content = '''#!/usr/bin/env python3
"""PDF 한글 문제 자동 수정 도구"""
import os
import sys
def fix_pdf_korean_issues():
"""PDF 한글 문제 자동 수정"""
print("🔧 PDF 한글 문제 자동 수정 시작...")
# 1. 환경변수 설정
os.environ['PYTHONIOENCODING'] = 'utf-8'
os.environ['LC_ALL'] = 'ko_KR.UTF-8'
os.environ['LANG'] = 'ko_KR.UTF-8'
# 2. sys 기본 인코딩 확인
if sys.getdefaultencoding() != 'utf-8':
print("⚠️ 시스템 기본 인코딩이 UTF-8이 아닙니다")
# 3. 로케일 설정 (Windows)
try:
import locale
locale.setlocale(locale.LC_ALL, 'Korean_Korea.utf8')
print("✅ 로케일 설정 완료")
except:
try:
locale.setlocale(locale.LC_ALL, 'ko_KR.UTF-8')
print("✅ 로케일 설정 완료 (Linux/Mac)")
except:
print("⚠️ 로케일 설정 실패 - 수동 설정 필요")
print("🎉 자동 수정 완료!")
if __name__ == "__main__":
fix_pdf_korean_issues()
'''
with open("fix_pdf_korean.py", "w", encoding="utf-8") as f:
f.write(script_content)
print(f"\n📝 자동 수정 스크립트 생성: fix_pdf_korean.py")
if __name__ == "__main__":
result = check_pdf_environment()
if result:
print(f"\n🎉 환경 검사 완료! PDF 생성 가능한 환경입니다.")
else:
print(f"\n❌ 환경 문제 발견! 위 해결책을 적용해주세요.")
generate_fix_script()
print(f"\n💡 다른 사람 컴퓨터에서 이 스크립트를 실행하세요:")
print(f" python test_environment_check.py")
print(f" python fix_pdf_korean.py")