Spaces:
Sleeping
Sleeping
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():
|