#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import base64, os
PROJ='/Users/liuxinyuan/Desktop/Hermes输出-工作类/客户管理/PPT/baorui_company_visit_ppt169_20261028'
OUT=os.path.join(PROJ,'svg_output'); os.makedirs(OUT,exist_ok=True)
IMG=os.path.join(PROJ,'images')
FONT='PingFang SC, Microsoft YaHei, sans-serif'
NAVY='#071E3D'; BLUE='#1A73E8'; CYAN='#20C4E8'; TEAL='#1E8E5A'
INK='#17324D'; MUTED='#5F7183'; BORDER='#DCE8F4'; BG='#F7FAFD'; WHITE='#FFFFFF'
_cache={}
def b64(name):
    if name not in _cache:
        p=os.path.join(IMG,name)
        ext='png' if name.endswith('.png') else 'jpeg'
        _cache[name]=f'data:image/{ext};base64,'+base64.b64encode(open(p,'rb').read()).decode()
    return _cache[name]
def esc(s):
    return str(s).replace('&','&amp;').replace('<','&lt;').replace('>','&gt;')
def t(x,y,s,size=14,fill=INK,weight=400,anchor='start',spacing=0,opacity=1):
    return f'<text x="{x}" y="{y}" font-family="{FONT}" font-size="{size}" fill="{fill}" font-weight="{weight}" text-anchor="{anchor}" letter-spacing="{spacing}" opacity="{opacity}">{esc(s)}</text>'
def rect(x,y,w,h,fill=WHITE,rx=0,stroke=None,sw=1,opacity=1):
    s=f'<rect x="{x}" y="{y}" width="{w}" height="{h}" rx="{rx}" fill="{fill}" opacity="{opacity}"'
    if stroke: s+=f' stroke="{stroke}" stroke-width="{sw}"'
    return s+'/>'
def line(x1,y1,x2,y2,color=BORDER,sw=1,opacity=1):
    return f'<line x1="{x1}" y1="{y1}" x2="{x2}" y2="{y2}" stroke="{color}" stroke-width="{sw}" opacity="{opacity}"/>'
def circle(cx,cy,r,fill=BLUE,stroke=None,sw=0,opacity=1):
    s=f'<circle cx="{cx}" cy="{cy}" r="{r}" fill="{fill}" opacity="{opacity}"'
    if stroke: s+=f' stroke="{stroke}" stroke-width="{sw}"'
    return s+'/>'
def img(x,y,w,h,name):
    return f'<image x="{x}" y="{y}" width="{w}" height="{h}" preserveAspectRatio="none" href="{b64(name)}"/>'
def head(num,section,title,lead=''):
    a=[rect(0,0,1280,720,BG)]
    a.append(t(72,38,'BIORI BIOTECH',10,MUTED,600,spacing=2))
    a.append(t(1208,38,section,10,MUTED,600,'end',spacing=1))
    a.append(line(72,52,1208,52,BORDER,1))
    a.append(t(72,102,title,38,INK,700))
    if lead: a.append(t(72,134,lead,15,MUTED,400))
    a.append(t(1208,706,f'{num:02d} / 12',9,MUTED,500,'end'))
    return a

P=[]
# P01 cover
a=[rect(0,0,1280,720,NAVY)]
a.append(img(660,0,620,720,'cover_building.jpg'))
a.append(rect(660,0,320,720,NAVY,opacity=.88))
a.append(rect(72,64,154,50,WHITE,8))
a.append(img(84,73,130,32,'logo.png'))
a.append(t(72,200,'BIORI BIOTECH  /  2026',13,CYAN,600,spacing=2))
a.append(t(72,285,'宝锐生物',76,WHITE,700))
a.append(t(72,330,'生物原料与试剂解决方案',30,'#DCEBFA',500))
a.append(line(72,360,560,360,CYAN,3))
a.append(t(72,400,'诊断原料  ·  生命科学  ·  生物医药',17,'#B9D4EE',400))
a.append(t(72,470,'专注生物科技上游，',18,'#EAF4FF',400))
a.append(t(72,500,'为工业与科研用户提供稳定、可放大的原料与试剂。',18,'#EAF4FF',400))
a.append(t(72,650,'客户拜访版  /  2026',12,'#9FB9D6',500,spacing=1))
P.append(''.join(a))
# P02 one-page
a=head(2,'公司概览 / SNAPSHOT','一页看懂宝锐','从分子酶到 mRNA 原料，做生物科技上游的长期供应伙伴。')
stats=[('2012','成立年份','广东 · 珠海'),('3','大业务板块','诊断原料 / 生命科学 / 生物医药'),('小巨人','国家专精特新','2022 年获评'),('ISO','9001 / 13485','质量体系认证')]
for i,(v,l,s) in enumerate(stats):
    x=72+i*284
    a.append(rect(x,170,268,138,WHITE,12,BORDER))
    a.append(t(x+22,218,v,34,BLUE,700))
    a.append(t(x+22,248,l,14,INK,600))
    a.append(t(x+22,270,s,11,MUTED))
a.append(t(72,360,'三大业务板块',18,INK,700))
pillars=[('01','诊断原料','分子酶、qPCR / qRT-PCR / LAMP 预混体系、辅助原料。','IVD 试剂盒 · 病原检测 · POCT',BLUE),
         ('02','生命科学','工具酶、分子试剂、核酸提取纯化、测序与蛋白质研究。','高校 · 科研院所 · CRO',TEAL),
         ('03','生物医药','mRNA 原料、生物制品质量控制与残留检测。','mRNA 疫苗/药物 · 生物药 QC',NAVY)]
for i,(n,title,desc,aud,col) in enumerate(pillars):
    x=72+i*380
    a.append(rect(x,385,356,220,WHITE,14,BORDER))
    a.append(rect(x,385,6,220,col))
    a.append(t(x+26,425,n,12,col,700,spacing=1))
    a.append(t(x+26,458,title,22,INK,700))
    a.append(t(x+26,490,desc,12,MUTED))
    a.append(t(x+26,548,'面向：'+aud,11,col,600))
    a.append(line(x+26,565,x+330,565,BORDER,1))
    a.append(t(x+26,585,'从研发样品到批量供货，按项目阶段匹配产品与服务。',10,MUTED))
a.append(t(72,655,'数据来源：宝锐生物官网 / 2026 公司资料',9,MUTED))
P.append(''.join(a))
# P03 company profile
a=head(3,'公司概览 / PROFILE','公司概况','2012 年成立于珠海，专注生物科技领域的工业与科研用户。')
a.append(t(72,190,'珠海宝锐生物科技有限公司',22,INK,700))
paras=['公司依托蛋白进化、重组表达、抗体开发、适配体筛选、','工艺开发及应用研究等前沿技术平台，构建覆盖诊断原料、','生命科学与生物医药三大板块的业务体系。','','坚持从原料到应用验证的完整链路，为 IVD、科研与生物药','客户提供可放大、可追溯、可持续供应的解决方案。']
for i,s in enumerate(paras):
    if s: a.append(t(72,222+i*24,s,13,MUTED))
# key bullets
bul=[('国家高新技术企业','2017 年获评'),('国家专精特新“小巨人”','2022 年获评'),('广东省博士后创新实践基地','2024 年获批')]
for i,(x1,x2) in enumerate(bul):
    y=390+i*66
    a.append(circle(82,y-5,5,BLUE))
    a.append(t(100,y,x1,14,INK,600))
    a.append(t(360,y,x2,11,MUTED,400))
a.append(rect(72,590,530,54,'#EAF4FF',8))
a.append(t(92,623,'使命  守护生命健康，缔造美好生活',13,BLUE,600))
a.append(img(660,160,548,410,'lobby.jpg'))
a.append(rect(660,530,548,54,NAVY,0))
a.append(t(682,562,'珠海总部 · 研发 / 生产 / 质量一体化',12,WHITE,500))
a.append(t(72,675,'来源：宝锐生物官网“关于我们” / 2026 公司资料',9,MUTED))
P.append(''.join(a))
# P04 timeline
a=head(4,'公司概览 / MILESTONES','发展历程','从 2012 到 2024，持续补齐技术平台、质量体系与产业化能力。')
row1=[('2012','公司成立'),('2016','珠海市高层次人才创业项目'),('2017','国家高新技术企业'),('2018','ISO 9001；珠海独角兽种子企业'),('2019','进入动物疫病检测原料领域')]
row2=[('2020','搬迁南屏科技园；香洲高企成长 50 强'),('2021','广东省专精特新企业；研发中心投用'),('2022','国家专精特新“小巨人”'),('2023','广东省工程技术研究中心；总部奠基'),('2024','博士后创新实践基地；ISO 13485')]
for ridx,row in enumerate([row1,row2]):
    y=250+ridx*205
    a.append(line(104,y,1176,y,'#C9D9E9',2))
    for i,(yr,txt) in enumerate(row):
        x=104+i*268
        a.append(circle(x,y,8,BLUE,WHITE,3))
        a.append(t(x,y-22,yr,22,BLUE,700,'middle'))
        a.append(t(x,y+34,txt,11,INK,600,'middle'))
# phase strip
for lab,x in [('技术积累  2012–2019',72),('平台成型  2020–2022',450),('产业化  2023–2024',850)]:
    a.append(t(x,380,lab,10,BLUE,600,spacing=.5))
    a.append(line(x,392,x+190,392,'#C9D9E9',1))
a.append(rect(72,620,1136,50,'#EAF4FF',8))
a.append(t(94,650,'从酶原料到冻干、直扩、mRNA 原料，技术平台与质量体系同步迭代。',12,BLUE,500))
a.append(t(72,690,'来源：宝锐生物官网“发展历程”',9,MUTED))
P.append(''.join(a))
# P05 qualifications
a=head(5,'公司概览 / CREDENTIALS','资质与平台','以国家级与省级平台为支点，支撑从研发到量产的长期合作。')
quals=[('01','国家高新技术企业','2017 年获评'),('02','国家专精特新“小巨人”','2022 年获评'),('03','广东省工程技术研究中心','分子诊断原料酶'),('04','珠海市企业技术中心','市级创新平台'),('05','广东省博士后创新实践基地','2024 年获批'),('06','ISO 9001 / ISO 13485','质量体系认证')]
for i,(n,title,sub) in enumerate(quals):
    x=72+(i%3)*380; y=180+(i//3)*195
    a.append(rect(x,y,356,168,WHITE,14,BORDER))
    a.append(t(x+24,y+42,n,12,BLUE,700,spacing=1))
    a.append(t(x+24,y+82,title,18,INK,700))
    a.append(t(x+24,y+112,sub,12,MUTED))
    a.append(line(x+24,y+132,x+332,y+132,BORDER,1))
a.append(t(72,590,'质量不是一句口号，而是可追溯的批记录、COA 与变更控制。',20,INK,600))
a.append(t(72,622,'ISO 9001 / ISO 13485 · GMP 级生产 · 批间一致性 · 稳定性与冻融验证',12,MUTED))
a.append(t(72,675,'来源：宝锐生物官网“资质荣誉” / 产品册 2026',9,MUTED))
P.append(''.join(a))
# P06 R&D platforms
a=head(6,'研发 / TECHNOLOGY','研发与技术平台','从分子设计到应用验证，六个平台串起原料开发的全过程。')
steps=['蛋白进化','重组表达','抗体开发','适配体筛选','工艺开发','应用研究']
for i,s in enumerate(steps):
    x=72+i*190
    a.append(rect(x,170,172,44,'#EAF4FF',8))
    a.append(t(x+86,197,s,13,BLUE,600,'middle'))
    if i<5: a.append(t(x+176,199,'›',26,'#9DB8D3',400,'middle'))
cards=[('定向进化 / 理性设计','耐热、耐抑制、批间一致性筛选'),('大肠杆菌 / 酵母 / 哺乳细胞','可溶表达与高密度发酵'),('杂交瘤 / 重组抗体','免疫诊断关键原料'),('核酸适配体筛选','小分子与蛋白检测'),('冻干 / 直扩 / 多重体系','从配方到放大工艺'),('样本 / 体系 / 判定标准','联合验证与应用支持')]
for i,(title,sub) in enumerate(cards):
    x=72+(i%3)*380; y=250+(i//3)*190
    a.append(rect(x,y,356,162,WHITE,14,BORDER))
    a.append(circle(x+30,y+34,12,BLUE,opacity=.12))
    a.append(t(x+30,y+39,f'{i+1:02d}',10,BLUE,700,'middle'))
    a.append(t(x+54,y+39,title,15,INK,700))
    a.append(t(x+24,y+86,sub,12,MUTED))
    a.append(t(x+24,y+120,'平台能力 → 项目交付',10,BLUE,600))
a.append(t(72,675,'来源：宝锐生物官网“公司简介” / 2026 产品册',9,MUTED))
P.append(''.join(a))
# P07 manufacturing
a=head(7,'研发 / MANUFACTURING','生产与质量','从洁净生产到批记录，把“稳定”做成可验证的交付能力。')
a.append(img(72,160,480,470,'cleanroom.jpg'))
a.append(rect(72,630,480,44,NAVY,0))
a.append(t(92,658,'GMP 级生产环境 · 洁净区 / 发酵 / 纯化',11,WHITE,500))
items=[('01','质量体系','ISO 9001 / ISO 13485；批记录可追溯'),('02','生产与冻干','GMP 级生产；冻干、直扩、多重体系'),('03','文件与放行','COA、批间一致性、稳定性/冻融/运输验证'),('04','变更与注册','配方/工艺/产地变更提前通知；注册文件支持')]
for i,(n,title,sub) in enumerate(items):
    y=172+i*118
    a.append(t(598,y,n,12,BLUE,700,spacing=1))
    a.append(t(640,y,title,18,INK,700))
    a.append(t(640,y+28,sub,12,MUTED))
    a.append(line(598,y+52,1208,y+52,BORDER,1))
a.append(rect(598,650,610,38,'#EAF4FF',8))
a.append(t(618,674,'质量文件随货：COA / 批记录 / 稳定性资料（按项目）',11,BLUE,600))
a.append(t(72,688,'来源：宝锐生物官网 / 2026 产品册',9,MUTED))
P.append(''.join(a))
# P08 business map
a=head(8,'业务 / PORTFOLIO','三大业务板块','诊断原料、生命科学、生物医药，共享同一套技术平台与质量体系。')
cols=[('01','诊断原料','分子酶  ·  qPCR  ·  qRT-PCR  ·  LAMP-DNA/RNA  ·  辅助原料','IVD 试剂盒 / 病原检测 / POCT',BLUE),
      ('02','生命科学','工具酶  ·  分子试剂  ·  核酸提取纯化  ·  测序试剂  ·  蛋白质研究','高校 / 科研院所 / CRO',TEAL),
      ('03','生物医药','mRNA 原料  ·  生物制品质量控制  ·  残留检测','mRNA 疫苗/药物 / 生物药 QC',NAVY)]
for i,(n,title,sub,aud,col) in enumerate(cols):
    x=72+i*380
    a.append(rect(x,170,356,470,WHITE,14,BORDER))
    a.append(rect(x,170,356,8,col))
    a.append(t(x+28,220,n,12,col,700,spacing=1))
    a.append(t(x+28,265,title,26,INK,700))
    a.append(t(x+28,305,sub,12,MUTED))
    a.append(line(x+28,330,x+328,330,BORDER,1))
    a.append(t(x+28,370,'面向',10,MUTED,600,spacing=1))
    a.append(t(x+28,398,aud,13,col,600))
    a.append(t(x+28,460,'共同底座',10,MUTED,600,spacing=1))
    a.append(t(x+28,488,'蛋白进化 / 重组表达 / 工艺开发',11,INK,500))
    a.append(t(x+28,512,'ISO 9001 / 13485 / GMP',11,INK,500))
    a.append(t(x+28,536,'COA / 批间一致性 / 稳定性',11,INK,500))
    a.append(t(x+28,600,'按项目阶段提供样品、验证与批量供货',10,MUTED))
a.append(t(72,675,'来源：宝锐生物官网产品中心 / 2026 产品册',9,MUTED))
P.append(''.join(a))
# P09 consolidated product lines
a=head(9,'产品 / PORTFOLIO','产品线总览','三条业务线，共用一套酶工程、工艺与质量体系。')
rows=[
 ('01','诊断原料','分子酶（DNA / RNA / 等温 / 防污染）|qPCR / qRT-PCR / LAMP 预混|辅助原料与冻干保护剂','快速扩增 · 抗抑制直扩|NA 级 · 冻干一站式','IVD / POCT / 病原检测',BLUE),
 ('02','生命科学','工具酶 · 分子试剂|核酸提取纯化 · 测序试剂|蛋白质研究','科研全流程覆盖|102 个科研 SKU|从提取到成像','高校 / 科研院所 / CRO',TEAL),
 ('03','生物医药','mRNA 原料：T7 RNAP 3.0 / 加帽 /|DNase I / RNase H II|生物制品质量控制','HCD / HCP · 支原体|工艺清除 · 方法开发','mRNA 药物 / 生物药 QC',NAVY)]
for i,(n,title,core,cap,aud,col) in enumerate(rows):
    y=170+i*132
    a.append(rect(72,y,1136,116,WHITE,12,BORDER))
    a.append(rect(72,y,7,116,col))
    a.append(t(96,y+34,n,10,col,700,spacing=1))
    a.append(t(96,y+64,title,20,INK,700))
    a.append(t(96,y+92,aud,9,MUTED))
    for j,ln in enumerate(core.split('|')):
        a.append(t(300,y+30+j*18,ln,11,INK,500))
    for j,ln in enumerate(cap.split('|')):
        a.append(t(780,y+30+j*18,ln,11,col,600))
    a.append(t(780,y+94,'按项目定制浓度 / 缓冲 / 剂型',9,MUTED))
a.append(rect(72,590,1136,58,'#EAF4FF',8))
a.append(t(94,616,'共同底座',10,BLUE,700,spacing=1))
a.append(t(174,616,'蛋白进化  ·  重组表达  ·  抗体 / 适配体  ·  工艺开发  ·  质量管理',12,INK,600))
a.append(t(94,638,'从一支酶到一个可交付体系：样品、测试方案、验证数据与批量供货同步对接。',10,MUTED))
a.append(t(72,690,'来源：宝锐生物官网产品中心 / 2026 公司简介 / 2026 产品册',9,MUTED))
P.append(''.join(a))
# P12 validation
a=head(10,'证据 / VALIDATION','验证与数据','用可复核的产品数据，支撑“稳定、可放大”的承诺。')
cards=[('DNA 单管预混','室温 3 个月','2–8℃ 1 年稳定','单管全预混；灵敏度可检出单拷贝 DNA'),('RNA 单管预混','37℃ 7 天','2–8℃ 6 个月稳定','快速程序 40 min 内完成 PCR'),('甲基化前处理','转化效率 >99%','5 min 转化 / 35 min 纯化','兼容 100 pg–1 μg 基因组 DNA'),('冻干 / 直扩','免提取','即混即用','可冻干粪便直扩 qRT-PCR；兼容常规 qPCR 仪')]
for i,(title,a1,a2,a3) in enumerate(cards):
    x=72+(i%2)*568; y=170+(i//2)*215
    a.append(rect(x,y,540,190,WHITE,14,BORDER))
    a.append(t(x+24,y+36,title,18,INK,700))
    a.append(t(x+24,y+82,a1,24,BLUE,700))
    a.append(t(x+24,y+112,a2,12,MUTED,600))
    a.append(line(x+24,y+132,x+516,y+132,BORDER,1))
    a.append(t(x+24,y+160,a3,10,MUTED))
a.append(t(72,650,'以上为产品单页/产品册公开指标；具体项目以批次 COA 与联合验证数据为准。',11,MUTED))
a.append(t(72,690,'来源：2026 产品单页（DNA/RNA 单管、甲基化、冻干直扩）/ 产品册',9,MUTED))
P.append(''.join(a))
# P13 collaboration
a=head(11,'合作 / ENGAGEMENT','合作模式','从一支样品到一个年度协议，按项目阶段推进。')
modes=[('01','标准原料','目录产品 + COA + 批量供货','最快启动'),('02','定制开发','浓度 / 缓冲 / 剂型 / 冻干','按体系适配'),('03','联合验证','共用样本与判定标准','输出对比数据'),('04','注册支持','原料文件 / 变更控制 / 发补','支持报证')]
for i,(n,title,sub,tag) in enumerate(modes):
    x=72+i*284
    a.append(rect(x,170,268,230,WHITE,14,BORDER))
    a.append(t(x+24,212,n,12,BLUE,700,spacing=1))
    a.append(t(x+24,252,title,21,INK,700))
    a.append(t(x+24,288,sub,11,MUTED))
    a.append(rect(x+24,320,100,26,'#EAF4FF',6))
    a.append(t(x+74,337,tag,9,BLUE,600,'middle'))
a.append(t(72,450,'合作流程',18,INK,700))
flow=['需求沟通','方案 / 样品','客户验证','小批试产','量产 / 年度协议']
for i,s in enumerate(flow):
    x=72+i*220
    a.append(rect(x,485,196,72,'#EAF4FF',10))
    a.append(t(x+98,512,s,13,BLUE,600,'middle'))
    a.append(t(x+98,536,f'0{i+1}',9,MUTED,500,'middle'))
    if i<4: a.append(t(x+202,527,'→',20,'#9DB8D3',400,'middle'))
a.append(t(72,610,'可按项目提供：样品、COA、稳定性资料、注册文件清单与联合验证方案。',12,MUTED))
a.append(t(72,675,'来源：宝锐生物官网 / 2026 公司资料',9,MUTED))
P.append(''.join(a))
# P14 closing
a=[rect(0,0,1280,720,NAVY)]
a.append(img(760,0,520,720,'cover_building.jpg'))
a.append(rect(700,0,300,720,NAVY,opacity=.92))
a.append(rect(72,64,154,50,WHITE,8))
a.append(img(84,73,130,32,'logo.png'))
a.append(t(72,190,'LET’S BUILD THE NEXT ASSAY TOGETHER',11,CYAN,600,spacing=2))
a.append(t(72,250,'让上游更可靠',44,WHITE,700))
a.append(t(72,292,'让每一次检测更接近临床答案。',18,'#DCEBFA',400))
a.append(line(72,330,560,330,CYAN,3))
a.append(t(72,380,'珠海宝锐生物科技有限公司',18,WHITE,600))
a.append(t(72,414,'广东省珠海市香洲区水岸一路 88 号',12,'#B9D4EE'))
a.append(t(72,442,'0756-8699969  ｜  marketing@biori.com  ｜  www.biori.com',12,'#B9D4EE'))
a.append(t(72,500,'扫码申请试用',12,CYAN,600))
a.append(rect(72,518,106,106,WHITE,8))
a.append(img(78,524,94,94,'qr.png'))
a.append(t(72,675,'守护生命健康，缔造美好生活',11,'#9FB9D6',500,spacing=1))
P.append(''.join(a))
for i,s in enumerate(P,1):
    svg=f'<svg xmlns="http://www.w3.org/2000/svg" width="1280" height="720" viewBox="0 0 1280 720" lang="zh-CN" font-family="{FONT}">'+s+'</svg>'
    open(os.path.join(OUT,f'P{i:02d}.svg'),'w',encoding='utf-8').write(svg)
print('written',len(P),OUT)
