import json
import sys
import os
def convert_json_to_svgs(json_path):
"""
Читает map.json файл и создает из него набор SVG файлов, по одному на страницу.
"""
try:
with open(json_path, 'r', encoding='utf-8') as f:
data = json.load(f)
except Exception as e:
print(f"Error reading or parsing JSON file: {e}")
return
map_data = data.get("map", [])
font_map = data.get("font_map", {})
# Группируем элементы по страницам
pages = {}
for item in map_data:
page_num = item["ipage"]
if page_num not in pages:
pages[page_num] = []
pages[page_num].append(item)
# --- Создаем CSS-классы для шрифтов ---
style_block = ""
# --- Создаем SVG для каждой страницы ---
output_dir = "verizon_svgs"
if not os.path.exists(output_dir):
os.makedirs(output_dir)
for page_num, items in pages.items():
svg_filename = os.path.join(output_dir, f"{page_num + 1}.svg")
svg_header = f"""
"
svg_body = ""
for item in items:
text = item["field"].replace('&', '&').replace('<', '<').replace('>', '>')
x = item["x_ill"]
# --- КЛЮЧЕВОЕ ИСПРАВЛЕНИЕ ---
# y в SVG transform - это базовая линия. Она примерно равна y_ill + size.
y = item["y_ill"] + item["size"]
font_name = item["ifont"]
ifont_class = f"font{font_map.get(font_name, 0)}"
size = item["size"]
size_class = size_classes.get(size, "")
svg_body += f' {text}\n'
# Сохраняем SVG файл
with open(svg_filename, 'w', encoding='utf-8') as f:
f.write(svg_header + svg_body + svg_footer)
print(f"Successfully created {svg_filename}")
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python json_to_svg.py ")
sys.exit(1)
json_path = sys.argv[1]
convert_json_to_svgs(json_path)