Add PDF-based document generation with LibreOffice; fix line numbering and margins
- Add LibreOffice Writer and DejaVu fonts to Dockerfile for PDF generation
- Add PyPDF2 and reportlab to requirements.txt
- Refactor email_sender.py:
- Enforce 1-inch margins on all sides
- Isolate line numbering to transcript section only
- Add generate_pdf_documents() to build:
- TRANSCRIPT.pdf (cover + transcript)
- SUMMARY.pdf (cover + summary)
- COMBINED.pdf (transcript cover + summary + TRANSCRIPT header + transcript)
- Add page numbers (bottom-right) to all PDFs via reportlab
- Update tasks.py:
- Use generate_pdf_documents() after creating DOCX files
- Attach source JSON, MD files, and compiled PDFs in success email
- Add test_docx_generation.py for transcript/summary/combined DOCX testing
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
"""
|
||||
Local test for transcript/summary/combined .docx generation.
|
||||
Checks:
|
||||
- Line numbering only on transcript pages.
|
||||
- Page numbering (X of Y) in footer.
|
||||
- Cover pages present and centered.
|
||||
- Combined document structure.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import tempfile
|
||||
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
from scraibe.email_sender import (
|
||||
create_transcript_docx,
|
||||
create_summary_docx,
|
||||
create_combined_docx,
|
||||
)
|
||||
|
||||
TRANSCRIPT_TEXT = """[00:00] Speaker 1: Good morning, everyone. Thank you for joining today's meeting.
|
||||
[00:12] Speaker 2: Good morning. I'm looking forward to discussing the new requirements.
|
||||
[00:25] Speaker 1: Let's start with the timeline. We need to finalize the scope by Friday.
|
||||
[00:38] Speaker 2: Agreed. I'll send a summary of the key points after this call.
|
||||
[00:45] Speaker 1: Perfect. If there are no other items, we can wrap up here."""
|
||||
|
||||
SUMMARY_TEXT = """# Meeting Overview
|
||||
## Key Discussion Points
|
||||
### Timeline and Scope
|
||||
#### Next Steps"""
|
||||
|
||||
COVER_DATE = "June 14, 2026"
|
||||
TRANSCRIPT_DESC = "Transcript of a project planning meeting discussing timelines and scope."
|
||||
SUMMARY_DESC = "Summary of a project planning meeting covering key decisions and next steps."
|
||||
|
||||
|
||||
def main():
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
print("Using temp directory:", tmpdir)
|
||||
|
||||
# 1) Transcript-only
|
||||
transcript_path = os.path.join(tmpdir, "TRANSCRIPT_TEST.docx")
|
||||
print("Creating transcript-only docx:", transcript_path)
|
||||
create_transcript_docx(
|
||||
text=TRANSCRIPT_TEXT,
|
||||
filename=transcript_path,
|
||||
include_cover=True,
|
||||
cover_date=COVER_DATE,
|
||||
cover_desc=TRANSCRIPT_DESC,
|
||||
)
|
||||
print("OK: transcript-only created.")
|
||||
|
||||
# 2) Summary-only
|
||||
summary_path = os.path.join(tmpdir, "SUMMARY_TEST.docx")
|
||||
print("Creating summary-only docx:", summary_path)
|
||||
create_summary_docx(
|
||||
text=SUMMARY_TEXT,
|
||||
filename=summary_path,
|
||||
include_cover=True,
|
||||
cover_date=COVER_DATE,
|
||||
cover_desc=SUMMARY_DESC,
|
||||
)
|
||||
print("OK: summary-only created.")
|
||||
|
||||
# 3) Combined
|
||||
combined_path = os.path.join(tmpdir, "COMBINED_TEST.docx")
|
||||
print("Creating combined docx:", combined_path)
|
||||
create_combined_docx(
|
||||
transcript_text=TRANSCRIPT_TEXT,
|
||||
summary_text=SUMMARY_TEXT,
|
||||
filename=combined_path,
|
||||
transcript_cover_date=COVER_DATE,
|
||||
transcript_cover_desc=TRANSCRIPT_DESC,
|
||||
summary_cover_date=COVER_DATE,
|
||||
summary_cover_desc=SUMMARY_DESC,
|
||||
)
|
||||
print("OK: combined created.")
|
||||
|
||||
# Basic size sanity checks
|
||||
for path in [transcript_path, summary_path, combined_path]:
|
||||
size = os.path.getsize(path)
|
||||
print(f"File: {os.path.basename(path)} - size: {size} bytes")
|
||||
if size < 10000:
|
||||
print("WARNING: File seems unusually small:", path)
|
||||
|
||||
print("\nAll .docx files generated successfully.")
|
||||
print("Please open them in Word to verify:")
|
||||
print("- Only transcript pages have line numbers.")
|
||||
print("- Footer shows 'X of Y' on all pages.")
|
||||
print("- Cover pages are centered and use the correct date format.")
|
||||
print("- Combined doc order: cover, page break, summary, page break, transcript.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user