Update app.py
Browse files
app.py
CHANGED
@@ -178,7 +178,7 @@ def markdown_to_pdf_content(markdown_text, add_space_before_numbered, headings_t
|
|
178 |
total_lines = len(pdf_content)
|
179 |
return pdf_content, total_lines
|
180 |
|
181 |
-
def create_pdf(markdown_text, base_font_size, num_columns, add_space_before_numbered, headings_to_fonts, doc_title):
|
182 |
buffer = io.BytesIO()
|
183 |
page_width = A4[0] * 2
|
184 |
page_height = A4[1]
|
@@ -225,6 +225,12 @@ def create_pdf(markdown_text, base_font_size, num_columns, add_space_before_numb
|
|
225 |
if avg_line_chars > col_width / adjusted_font_size * 10:
|
226 |
adjusted_font_size = int(col_width / (avg_line_chars / 10))
|
227 |
adjusted_font_size = max(min_font_size, adjusted_font_size)
|
|
|
|
|
|
|
|
|
|
|
|
|
228 |
item_style = ParagraphStyle(
|
229 |
'ItemStyle', parent=styles['Normal'], fontName="DejaVuSans",
|
230 |
fontSize=adjusted_font_size, leading=adjusted_font_size * 1.15, spaceAfter=1,
|
@@ -317,7 +323,7 @@ def pdf_to_image(pdf_bytes):
|
|
317 |
return None
|
318 |
|
319 |
# PDF creation and linking functions
|
320 |
-
WORDS_10 = ["one", "two", "three", "four", "five", "six", "seven", "eight",
|
321 |
WORDS_20 = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
|
322 |
"eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty"]
|
323 |
|
@@ -495,6 +501,7 @@ with st.sidebar:
|
|
495 |
# Calculate document stats
|
496 |
longest_line_words = 0
|
497 |
total_lines = 0
|
|
|
498 |
if 'markdown_content' in st.session_state:
|
499 |
current_markdown = st.session_state.markdown_content
|
500 |
lines = current_markdown.strip().split('\n')
|
@@ -512,10 +519,15 @@ with st.sidebar:
|
|
512 |
recommended_columns = 3
|
513 |
else:
|
514 |
recommended_columns = 3
|
515 |
-
|
|
|
|
|
|
|
|
|
516 |
st.write(f"- Longest Line: {longest_line_words} words")
|
517 |
st.write(f"- Total Lines: {total_lines}")
|
518 |
st.write(f"- Recommended Columns: {recommended_columns}")
|
|
|
519 |
|
520 |
column_options = [2, 3, 4]
|
521 |
num_columns = st.selectbox(
|
@@ -525,7 +537,7 @@ with st.sidebar:
|
|
525 |
)
|
526 |
st.info("Font size and columns adjust to fit one page.")
|
527 |
|
528 |
-
st.markdown("### ✍️ Edit Markdown
|
529 |
edited_markdown = st.text_area(
|
530 |
"Input Markdown",
|
531 |
value=st.session_state.markdown_content,
|
@@ -616,7 +628,9 @@ with st.spinner("Generating PDF..."):
|
|
616 |
num_columns,
|
617 |
add_space_before_numbered,
|
618 |
headings_to_fonts,
|
619 |
-
doc_title=selected_md if selected_md else "Untitled"
|
|
|
|
|
620 |
)
|
621 |
|
622 |
with st.container():
|
|
|
178 |
total_lines = len(pdf_content)
|
179 |
return pdf_content, total_lines
|
180 |
|
181 |
+
def create_pdf(markdown_text, base_font_size, num_columns, add_space_before_numbered, headings_to_fonts, doc_title, longest_line_words, total_lines):
|
182 |
buffer = io.BytesIO()
|
183 |
page_width = A4[0] * 2
|
184 |
page_height = A4[1]
|
|
|
225 |
if avg_line_chars > col_width / adjusted_font_size * 10:
|
226 |
adjusted_font_size = int(col_width / (avg_line_chars / 10))
|
227 |
adjusted_font_size = max(min_font_size, adjusted_font_size)
|
228 |
+
|
229 |
+
# Adjust font size to fit one page based on longest line
|
230 |
+
if longest_line_words > 17:
|
231 |
+
font_scale = 17 / longest_line_words # Scale down from reference (17 words)
|
232 |
+
adjusted_font_size = max(min_font_size, int(adjusted_font_size * font_scale))
|
233 |
+
|
234 |
item_style = ParagraphStyle(
|
235 |
'ItemStyle', parent=styles['Normal'], fontName="DejaVuSans",
|
236 |
fontSize=adjusted_font_size, leading=adjusted_font_size * 1.15, spaceAfter=1,
|
|
|
323 |
return None
|
324 |
|
325 |
# PDF creation and linking functions
|
326 |
+
WORDS_10 = ["one", "two", "three", "four", "five", "six", "seven", "eight", consective, "ten"]
|
327 |
WORDS_20 = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
|
328 |
"eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty"]
|
329 |
|
|
|
501 |
# Calculate document stats
|
502 |
longest_line_words = 0
|
503 |
total_lines = 0
|
504 |
+
adjusted_font_size_display = base_font_size
|
505 |
if 'markdown_content' in st.session_state:
|
506 |
current_markdown = st.session_state.markdown_content
|
507 |
lines = current_markdown.strip().split('\n')
|
|
|
519 |
recommended_columns = 3
|
520 |
else:
|
521 |
recommended_columns = 3
|
522 |
+
# Adjust font size for one-page fit
|
523 |
+
if longest_line_words > 17:
|
524 |
+
font_scale = 17 / longest_line_words
|
525 |
+
adjusted_font_size_display = max(6, int(base_font_size * font_scale))
|
526 |
+
st.markdown("**Document Stats**")
|
527 |
st.write(f"- Longest Line: {longest_line_words} words")
|
528 |
st.write(f"- Total Lines: {total_lines}")
|
529 |
st.write(f"- Recommended Columns: {recommended_columns}")
|
530 |
+
st.write(f"- Adjusted Font Size: {adjusted_font_size_display} points")
|
531 |
|
532 |
column_options = [2, 3, 4]
|
533 |
num_columns = st.selectbox(
|
|
|
537 |
)
|
538 |
st.info("Font size and columns adjust to fit one page.")
|
539 |
|
540 |
+
st.markdown("### ✍️ Edit Markdown부
|
541 |
edited_markdown = st.text_area(
|
542 |
"Input Markdown",
|
543 |
value=st.session_state.markdown_content,
|
|
|
628 |
num_columns,
|
629 |
add_space_before_numbered,
|
630 |
headings_to_fonts,
|
631 |
+
doc_title=selected_md if selected_md else "Untitled",
|
632 |
+
longest_line_words=longest_line_words,
|
633 |
+
total_lines=total_lines
|
634 |
)
|
635 |
|
636 |
with st.container():
|