edit poster as per tancon2026 guidelines
kindly do it
kindly do it
ls -la /tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/ 2>&1; ls -la /tmp/workspace/ 2>&1
TANCON 2026 e-poster guidelines dimensions template
cd /tmp/workspace && python3 -c " import pdfplumber with pdfplumber.open('attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/TANCON2026_EPoster_AdaptiveDBS.pdf') as pdf: print('Pages:', len(pdf.pages)) for i,page in enumerate(pdf.pages): print(f'--- page {i+1} size: {page.width}x{page.height} ---') print(page.extract_text()) "
"TANCON 2026" e-poster guidelines neurology Tamil Nadu
https://tancon2026hosur.com/abstract-submission.html
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster.py
from reportlab.lib.pagesizes import landscape
from reportlab.lib.units import inch
from reportlab.lib import colors
from reportlab.pdfgen import canvas
from reportlab.platypus import Paragraph, Frame, Table, TableStyle
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.enums import TA_JUSTIFY, TA_CENTER, TA_LEFT
PAGE_W, PAGE_H = 960, 540 # matches original 13.33in x 7.5in (16:9)
NAVY = colors.HexColor("#0B2545")
BLUE = colors.HexColor("#1B4F91")
LIGHTBLUE = colors.HexColor("#EAF2FB")
ACCENT = colors.HexColor("#C8102E")
WHITE = colors.white
GREY = colors.HexColor("#333333")
c = canvas.Canvas("TANCON2026_EPoster_AdaptiveDBS_Revised.pdf", pagesize=(PAGE_W, PAGE_H))
# ---------- Header ----------
header_h = 92
c.setFillColor(NAVY)
c.rect(0, PAGE_H - header_h, PAGE_W, header_h, fill=1, stroke=0)
c.setFillColor(ACCENT)
c.rect(0, PAGE_H - header_h - 4, PAGE_W, 4, fill=1, stroke=0)
title_style = ParagraphStyle('title', fontName='Helvetica-Bold', fontSize=19, leading=23,
textColor=WHITE, alignment=TA_CENTER)
author_style = ParagraphStyle('authors', fontName='Helvetica', fontSize=12.5, leading=15,
textColor=colors.HexColor("#D7E4F5"), alignment=TA_CENTER)
affil_style = ParagraphStyle('affil', fontName='Helvetica-Oblique', fontSize=10.5, leading=13,
textColor=colors.HexColor("#B9CDE8"), alignment=TA_CENTER)
title_text = ("Adaptive Deep Brain Stimulation in Parkinson's Disease: Early Experience with "
"Single- versus Dual-Threshold Therapy")
authors_text = "Rajasekhar Naidu Y<super>1</super> (Presenting Author), Vijayashankar P<super>1</super>"
affil_text = "<super>1</super>Department of Neurology, Apollo Hospital, Chennai"
f_title = Frame(30, PAGE_H - header_h + 6, PAGE_W - 60, header_h - 10, showBoundary=0)
f_title.addFromList([
Paragraph(title_text, title_style),
Paragraph(authors_text, author_style),
Paragraph(affil_text, affil_style),
], c)
# ---------- Footer ----------
footer_h = 20
c.setFillColor(NAVY)
c.rect(0, 0, PAGE_W, footer_h, fill=1, stroke=0)
footer_style = ParagraphStyle('footer', fontName='Helvetica', fontSize=8, leading=10,
textColor=WHITE, alignment=TA_CENTER)
f_footer = Frame(20, 2, PAGE_W - 40, footer_h - 2, showBoundary=0)
f_footer.addFromList([Paragraph(
"TANCON 2026 • 14th Annual Conference of Tamil Nadu & Pondicherry Association of Neurologists • "
"Hotel Hills, Hosur • August 28–30, 2026", footer_style)], c)
# ---------- Layout grid for 4 sections ----------
margin = 24
gutter = 16
top_y = PAGE_H - header_h - 14
bottom_y = footer_h + 12
col_w = (PAGE_W - 2 * margin - gutter) / 2
left_x = margin
right_x = margin + col_w + gutter
avail_h = top_y - bottom_y
row_gap = 14
heading_style = ParagraphStyle('heading', fontName='Helvetica-Bold', fontSize=12.5, leading=15,
textColor=WHITE, alignment=TA_LEFT)
body_style = ParagraphStyle('body', fontName='Helvetica', fontSize=9.3, leading=12.2,
textColor=GREY, alignment=TA_JUSTIFY, spaceAfter=5)
def draw_section(x, y, w, h, heading, body_flowables, header_color=BLUE):
"""Draws a rounded box with a colored heading bar and body content."""
c.setFillColor(colors.white)
c.setStrokeColor(colors.HexColor("#C9D6E8"))
c.roundRect(x, y, w, h, 6, fill=1, stroke=1)
bar_h = 22
c.setFillColor(header_color)
c.roundRect(x, y + h - bar_h, w, bar_h, 6, fill=1, stroke=0)
c.rect(x, y + h - bar_h, w, bar_h / 2, fill=1, stroke=0) # square off bottom corners of bar
c.setFillColor(colors.white)
f_head = Frame(x + 10, y + h - bar_h, w - 20, bar_h, showBoundary=0, leftPadding=0, rightPadding=0,
topPadding=3, bottomPadding=0)
f_head.addFromList([Paragraph(heading, heading_style)], c)
body_h = h - bar_h - 12
f_body = Frame(x + 12, y + 6, w - 24, body_h, showBoundary=0, leftPadding=0, rightPadding=0,
topPadding=4, bottomPadding=0)
f_body.addFromList(body_flowables, c)
# ----- Row heights: Introduction/Results a bit shorter, Methods/Conclusion below -----
row1_h = avail_h * 0.46
row2_h = avail_h - row1_h - row_gap
y_row1 = bottom_y + row2_h + row_gap
y_row2 = bottom_y
# INTRODUCTION (top-left)
intro_text = (
"Adaptive deep brain stimulation (aDBS) is an emerging approach in Parkinson's disease that allows "
"stimulation to be automatically adjusted according to patient-specific neural signals or clinical states. "
"Unlike conventional DBS, which delivers continuous fixed stimulation, aDBS may provide a more responsive "
"strategy for patients with fluctuating OFF symptoms, dyskinesia, and stimulation-related imbalance.<br/><br/>"
"We describe our early experience with adaptive DBS in five patients with Parkinson's disease, with "
"particular focus on feasibility, reduction in manual stimulation adjustments, and patient preference "
"between single-threshold and dual-threshold adaptive therapy."
)
draw_section(left_x, y_row1, col_w, row1_h, "INTRODUCTION", [Paragraph(intro_text, body_style)], BLUE)
# MATERIALS AND METHODS (bottom-left)
methods_text = (
"Five patients with Parkinson's disease underwent adaptive DBS programming after optimization of "
"conventional DBS parameters. Clinical response, patient-reported benefit, need for manual parameter "
"changes, programming challenges, and preference for single- or dual-threshold therapy were reviewed."
)
draw_section(left_x, y_row2, col_w, row2_h, "MATERIALS AND METHODS", [Paragraph(methods_text, body_style)], BLUE)
# RESULTS (top-right) with table
results_text1 = (
"Adaptive DBS programming was feasible in all five patients, with no major programming-limiting adverse "
"effects during early follow-up.<br/><br/>"
"Two patients previously required frequent self-adjustment of DBS parameters to manage fluctuations between "
"OFF periods and dyskinesia. After transition to aDBS, the need for manual adjustments reduced significantly "
"as stimulation auto-modulated with the patient's changing clinical state.<br/><br/>"
"Both single- and dual-threshold strategies were tested in these two patients; both preferred dual-threshold "
"therapy, particularly for controlling sudden dyskinesia and gait imbalance."
)
table_data = [["Patient Outcomes Overview (N = 5)", ""],
["aDBS programming feasible", "5/5"],
["Reduced manual adjustments", "2/5"],
["Preferred dual-threshold therapy", "2/2"]]
tbl = Table(table_data, colWidths=[(col_w - 24) * 0.72, (col_w - 24) * 0.28])
tbl.setStyle(TableStyle([
('SPAN', (0, 0), (1, 0)),
('BACKGROUND', (0, 0), (1, 0), NAVY),
('TEXTCOLOR', (0, 0), (1, 0), WHITE),
('FONTNAME', (0, 0), (1, 0), 'Helvetica-Bold'),
('FONTSIZE', (0, 0), (1, 0), 8.7),
('ALIGN', (0, 0), (1, 0), 'CENTER'),
('BACKGROUND', (0, 1), (0, -1), LIGHTBLUE),
('BACKGROUND', (1, 1), (1, -1), colors.white),
('FONTNAME', (0, 1), (0, -1), 'Helvetica'),
('FONTNAME', (1, 1), (1, -1), 'Helvetica-Bold'),
('FONTSIZE', (0, 1), (1, -1), 8.7),
('TEXTCOLOR', (1, 1), (1, -1), ACCENT),
('ALIGN', (1, 1), (1, -1), 'CENTER'),
('GRID', (0, 0), (-1, -1), 0.5, colors.HexColor("#C9D6E8")),
('TOPPADDING', (0, 0), (-1, -1), 4),
('BOTTOMPADDING', (0, 0), (-1, -1), 4),
]))
draw_section(right_x, y_row1, col_w, row1_h, "RESULTS",
[Paragraph(results_text1, body_style), tbl], BLUE)
# CONCLUSION (bottom-right)
conclusion_text = (
"In this early five-case experience, adaptive DBS was feasible and clinically useful in selected "
"Parkinson's disease patients, particularly those who previously required frequent manual stimulation "
"adjustments to balance OFF symptoms and dyskinesia. Dual-threshold therapy may offer greater real-world "
"flexibility than single-threshold therapy in patients with rapid motor state transitions."
)
draw_section(right_x, y_row2, col_w, row2_h, "CONCLUSION", [Paragraph(conclusion_text, body_style)], ACCENT)
c.showPage()
c.save()
print("done")
cd /tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d && python3 build_poster.py 2>&1
cd /tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d && python3 -c " import pdfplumber with pdfplumber.open('TANCON2026_EPoster_AdaptiveDBS_Revised.pdf') as pdf: print('pages', len(pdf.pages)) p = pdf.pages[0] print('size', p.width, p.height) t = p.extract_text() print(t[:2000]) " ls -la
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster.py'
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster.py'
cd /tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d && python3 build_poster.py && python3 -c " import pdfplumber with pdfplumber.open('TANCON2026_EPoster_AdaptiveDBS_Revised.pdf') as pdf: t = pdf.pages[0].extract_text() print(t[-400:]) "
| Original poster | Revised (TANCON 2026 compliant) |
|---|---|
| Background + Objective (2 boxes) | Merged into single Introduction box |
| Methods | Renamed to Materials and Methods |
| Results | Kept as Results (with outcomes table retained) |
| Conclusion | Kept as Conclusion |
| Keywords | Removed (not part of the required 4-section format) |
TANCON2026 EPoster AdaptiveDBS Revised
PDF Document · PDF
looks good ,kindly increase the font size in general and make results to be represneted as the the uploaded document,
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster.py'
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster.py'
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster.py'
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster.py'
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster.py'
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster.py'
cd /tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d && python3 build_poster.py 2>&1 && python3 -c " import pdfplumber with pdfplumber.open('TANCON2026_EPoster_AdaptiveDBS_Revised.pdf') as pdf: t = pdf.pages[0].extract_text() print(t) "
ls -la /tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/
TANCON2026 EPoster AdaptiveDBS Revised
PDF Document · PDF
further increase the font to maximum possibility with more aesthetic looks
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py
"""
TANCON 2026 e-poster builder with auto-fit maximum font sizing.
Iteratively finds the largest font sizes that fit every section without
truncation, then renders a final, more polished version.
"""
import pdfplumber
from reportlab.lib import colors
from reportlab.pdfgen import canvas
from reportlab.platypus import Paragraph, Frame, Table, TableStyle
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.enums import TA_JUSTIFY, TA_CENTER, TA_LEFT
PAGE_W, PAGE_H = 960, 540
OUT = "TANCON2026_EPoster_AdaptiveDBS_Revised.pdf"
NAVY = colors.HexColor("#0B2545")
BLUE = colors.HexColor("#1B4F91")
TEAL = colors.HexColor("#0E7C7B")
ACCENT = colors.HexColor("#C8102E")
GOLD = colors.HexColor("#E8B84B")
LIGHTBLUE = colors.HexColor("#EAF2FB")
LIGHTTEAL = colors.HexColor("#E7F5F4")
LIGHTRED = colors.HexColor("#FBEAEC")
WHITE = colors.white
GREY = colors.HexColor("#22262B")
SHADOW = colors.HexColor("#C7CFDA")
TITLE_TEXT = ("Adaptive Deep Brain Stimulation in Parkinson's Disease: Early Experience with "
"Single- versus Dual-Threshold Therapy")
AUTHORS_TEXT = "Rajasekhar Naidu Y<super>1</super> (Presenting Author), Vijayashankar P<super>1</super>"
AFFIL_TEXT = "<super>1</super>Department of Neurology, Apollo Hospital, Chennai"
INTRO_TEXT = (
"Adaptive deep brain stimulation (aDBS) is an emerging approach in Parkinson's disease that allows "
"stimulation to be automatically adjusted according to patient-specific neural signals or clinical states. "
"Unlike conventional DBS, which delivers continuous fixed stimulation, aDBS may provide a more responsive "
"strategy for patients with fluctuating OFF symptoms, dyskinesia, and stimulation-related imbalance.<br/><br/>"
"We describe our early experience with adaptive DBS in five patients with Parkinson's disease, with "
"particular focus on feasibility, reduction in manual stimulation adjustments, and patient preference "
"between single-threshold and dual-threshold adaptive therapy."
)
METHODS_TEXT = (
"Five patients with Parkinson's disease underwent adaptive DBS programming after optimization of "
"conventional DBS parameters. Clinical response, patient-reported benefit, need for manual parameter "
"changes, programming challenges, and preference for single- or dual-threshold therapy were reviewed."
)
RESULTS_BULLETS = [
"Adaptive DBS programming was feasible in all five patients, with no major "
"programming-limiting adverse effects during early follow-up",
"Two patients previously required frequent self-adjustment of DBS parameters to "
"manage fluctuations between OFF periods and dyskinesia",
"After transition to aDBS, the need for manual adjustments reduced significantly as "
"stimulation auto-modulated with the patient's changing clinical state",
"Both single- and dual-threshold strategies were tested in these two patients; both "
"preferred dual-threshold therapy, particularly for controlling sudden dyskinesia "
"and gait imbalance",
]
TABLE_DATA = [["PATIENT OUTCOMES OVERVIEW (N = 5)", ""],
["aDBS feasible", "5/5"],
["Reduced manual adj.", "2/5"],
["Preferred dual-threshold", "2/2"]]
CONCLUSION_TEXT = (
"In this early five-case experience, adaptive DBS was feasible and clinically useful in selected "
"Parkinson's disease patients, particularly those who previously required frequent manual stimulation "
"adjustments to balance OFF symptoms and dyskinesia. Dual-threshold therapy may offer greater real-world "
"flexibility than single-threshold therapy in patients with rapid motor state transitions."
)
ANCHORS = ["dual-threshold adaptive therapy.", "were reviewed.", "gait imbalance", "2/2",
"rapid motor state transitions.", TITLE_TEXT[-20:], AFFIL_TEXT.split(">")[-1]]
def render(body_size, heading_size, title_size, author_size, affil_size,
bullet_lead_ratio=1.28, body_lead_ratio=1.28):
c = canvas.Canvas(OUT, pagesize=(PAGE_W, PAGE_H))
# Background
c.setFillColor(colors.HexColor("#F4F7FB"))
c.rect(0, 0, PAGE_W, PAGE_H, fill=1, stroke=0)
# ---------- Header ----------
header_h = 96
c.setFillColor(NAVY)
c.rect(0, PAGE_H - header_h, PAGE_W, header_h, fill=1, stroke=0)
c.setFillColor(GOLD)
c.rect(0, PAGE_H - header_h - 3, PAGE_W, 3, fill=1, stroke=0)
c.setFillColor(ACCENT)
c.rect(0, PAGE_H - header_h - 5, PAGE_W, 2, fill=1, stroke=0)
title_style = ParagraphStyle('title', fontName='Helvetica-Bold', fontSize=title_size,
leading=title_size * 1.16, textColor=WHITE, alignment=TA_CENTER)
author_style = ParagraphStyle('authors', fontName='Helvetica-Bold', fontSize=author_size,
leading=author_size * 1.2, textColor=GOLD, alignment=TA_CENTER,
spaceBefore=3)
affil_style = ParagraphStyle('affil', fontName='Helvetica-Oblique', fontSize=affil_size,
leading=affil_size * 1.2, textColor=colors.HexColor("#C7D6EC"),
alignment=TA_CENTER, spaceBefore=2)
f_title = Frame(28, PAGE_H - header_h + 5, PAGE_W - 56, header_h - 10, showBoundary=0)
f_title.addFromList([
Paragraph(TITLE_TEXT, title_style),
Paragraph(AUTHORS_TEXT, author_style),
Paragraph(AFFIL_TEXT, affil_style),
], c)
# ---------- Footer ----------
footer_h = 18
c.setFillColor(NAVY)
c.rect(0, 0, PAGE_W, footer_h, fill=1, stroke=0)
c.setFillColor(GOLD)
c.rect(0, footer_h, PAGE_W, 2, fill=1, stroke=0)
footer_style = ParagraphStyle('footer', fontName='Helvetica', fontSize=8.3, leading=10,
textColor=WHITE, alignment=TA_CENTER)
f_footer = Frame(20, 1, PAGE_W - 40, footer_h - 2, showBoundary=0)
f_footer.addFromList([Paragraph(
"TANCON 2026 • 14th Annual Conference of Tamil Nadu & Pondicherry Association of Neurologists • "
"Hotel Hills, Hosur • August 28–30, 2026", footer_style)], c)
# ---------- Grid ----------
margin = 14
gutter = 10
top_y = PAGE_H - header_h - 8
bottom_y = footer_h + 6
col_w = (PAGE_W - 2 * margin - gutter) / 2
left_x = margin
right_x = margin + col_w + gutter
avail_h = top_y - bottom_y
row_gap = 10
row1_h = avail_h * 0.565
row2_h = avail_h - row1_h - row_gap
y_row1 = bottom_y + row2_h + row_gap
y_row2 = bottom_y
heading_style = ParagraphStyle('heading', fontName='Helvetica-Bold', fontSize=heading_size,
leading=heading_size * 1.05, textColor=WHITE, alignment=TA_LEFT)
body_style = ParagraphStyle('body', fontName='Helvetica', fontSize=body_size,
leading=body_size * body_lead_ratio, textColor=GREY,
alignment=TA_JUSTIFY, spaceAfter=body_size * 0.45)
bullet_style = ParagraphStyle('bullet', fontName='Helvetica', fontSize=body_size,
leading=body_size * bullet_lead_ratio, textColor=GREY,
alignment=TA_LEFT, leftIndent=11, bulletIndent=0,
spaceAfter=body_size * 0.42)
def draw_section(x, y, w, h, heading, flowables, header_color, light_bg, num):
# drop shadow
c.setFillColor(SHADOW)
c.roundRect(x + 3, y - 3, w, h, 8, fill=1, stroke=0)
# card
c.setFillColor(WHITE)
c.setStrokeColor(header_color)
c.setLineWidth(1.1)
c.roundRect(x, y, w, h, 8, fill=1, stroke=1)
bar_h = heading_size + 12
c.setFillColor(header_color)
c.roundRect(x, y + h - bar_h, w, bar_h, 8, fill=1, stroke=0)
c.rect(x, y + h - bar_h, w, bar_h / 2, fill=1, stroke=0)
# numbered badge circle
badge_r = bar_h * 0.34
badge_cx = x + 18
badge_cy = y + h - bar_h / 2
c.setFillColor(WHITE)
c.circle(badge_cx, badge_cy, badge_r, fill=1, stroke=0)
c.setFillColor(header_color)
c.setFont('Helvetica-Bold', badge_r * 1.15)
c.drawCentredString(badge_cx, badge_cy - badge_r * 0.38, str(num))
f_head = Frame(x + 18 + badge_r * 2, y + h - bar_h, w - 30 - badge_r * 2, bar_h,
showBoundary=0, leftPadding=0, rightPadding=0, topPadding=(bar_h - heading_size * 1.05) / 2 - 1,
bottomPadding=0)
f_head.addFromList([Paragraph(heading, heading_style)], c)
# thin colored accent strip along the left inner edge of body
c.setFillColor(light_bg)
c.rect(x + 3, y + 3, w - 6, h - bar_h - 6, fill=1, stroke=0)
body_h = h - bar_h - 16
f_body = Frame(x + 13, y + 8, w - 26, body_h, showBoundary=0, leftPadding=0, rightPadding=0,
topPadding=4, bottomPadding=0)
f_body.addFromList(flowables, c)
# INTRODUCTION
draw_section(left_x, y_row1, col_w, row1_h, "INTRODUCTION",
[Paragraph(INTRO_TEXT, body_style)], BLUE, LIGHTBLUE, 1)
# MATERIALS AND METHODS
draw_section(left_x, y_row2, col_w, row2_h, "MATERIALS AND METHODS",
[Paragraph(METHODS_TEXT, body_style)], TEAL, LIGHTTEAL, 2)
# RESULTS (bullets + table)
results_flowables = [Paragraph(b, bullet_style, bulletText='\u25CF') for b in RESULTS_BULLETS]
tbl_font = max(body_size - 0.7, 7.5)
tbl = Table(TABLE_DATA, colWidths=[(col_w - 26) * 0.72, (col_w - 26) * 0.28])
tbl.setStyle(TableStyle([
('SPAN', (0, 0), (1, 0)),
('BACKGROUND', (0, 0), (1, 0), NAVY),
('TEXTCOLOR', (0, 0), (1, 0), WHITE),
('FONTNAME', (0, 0), (1, 0), 'Helvetica-Bold'),
('FONTSIZE', (0, 0), (1, 0), tbl_font),
('ALIGN', (0, 0), (1, 0), 'CENTER'),
('BACKGROUND', (0, 1), (0, -1), LIGHTBLUE),
('BACKGROUND', (1, 1), (1, -1), colors.white),
('FONTNAME', (0, 1), (0, -1), 'Helvetica'),
('FONTNAME', (1, 1), (1, -1), 'Helvetica-Bold'),
('FONTSIZE', (0, 1), (1, -1), tbl_font),
('TEXTCOLOR', (1, 1), (1, -1), ACCENT),
('ALIGN', (1, 1), (1, -1), 'CENTER'),
('GRID', (0, 0), (-1, -1), 0.6, colors.HexColor("#C9D6E8")),
('TOPPADDING', (0, 0), (-1, -1), 4),
('BOTTOMPADDING', (0, 0), (-1, -1), 4),
]))
results_flowables.append(tbl)
draw_section(right_x, y_row1, col_w, row1_h, "RESULTS", results_flowables, NAVY, colors.HexColor("#EDF0F5"), 3)
# CONCLUSION
draw_section(right_x, y_row2, col_w, row2_h, "CONCLUSION",
[Paragraph(CONCLUSION_TEXT, body_style)], ACCENT, LIGHTRED, 4)
c.showPage()
c.save()
def fits():
with pdfplumber.open(OUT) as pdf:
text = pdf.pages[0].extract_text() or ""
text = text.replace("\n", " ")
for a in ANCHORS:
if a.replace("\n", " ") not in text:
return False, a
return True, None
def auto_tune():
# (body, heading, title, author, affil)
best = None
# search from large to small; ratios kept roughly proportional to earlier good design
for body in [x / 2 for x in range(28, 16, -1)]: # 14.0 down to 8.5
heading = round(body * 1.42, 1)
title = round(body * 2.15, 1)
author = round(body * 1.42, 1)
affil = round(body * 1.18, 1)
render(body, heading, title, author, affil)
ok, missing = fits()
if ok:
best = (body, heading, title, author, affil)
print(f"FIT body={body} heading={heading} title={title} author={author} affil={affil}")
break
else:
print(f"FAIL body={body} -> missing anchor: {missing!r}")
return best
if __name__ == "__main__":
best = auto_tune()
print("BEST:", best)
if best:
render(*best)
ok, missing = fits()
print("final check ok:", ok, missing)
cd /tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d && python3 build_poster_v2.py 2>&1
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py'
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py'
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py'
cd /tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d && python3 build_poster_v2.py 2>&1
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py'
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py'
cd /tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d && python3 build_poster_v2.py 2>&1
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py'
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py
Error: String not found in file: ' footer_h = 14'
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py'
cd /tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d && grep -n "footer_h" build_poster_v2.py
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py'
cd /tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d && python3 build_poster_v2.py 2>&1
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py'
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py'
.../621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/build_poster_v2.py'
cd /tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d && python3 build_poster_v2.py 2>&1
ls -la /tmp/workspace/attachments/621b6327-3a24-404c-8b3e-ed49fbf3b68d/
| Element | Size |
|---|---|
| Title | 17.3pt |
| Section headings | 14.9pt |
| Author names | 12.4pt |
| Body text (all sections) | 10.5pt |
| Affiliation | 10.3pt |
TANCON2026 EPoster AdaptiveDBS Revised
PDF Document · PDF
Export poster as high-resolution image for printing
Generate a Word document with poster abstract and key findings
kindly increase font size to the maximum