OpenSpace pdf-gen-fallback
Reliable PDF generation using shell-based Python execution when sandbox fails
install
source · Clone the upstream repo
git clone https://github.com/HKUDS/OpenSpace
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/HKUDS/OpenSpace "$T" && mkdir -p ~/.claude/skills && cp -r "$T/gdpval_bench/skills/pdf-gen-fallback" ~/.claude/skills/hkuds-openspace-pdf-gen-fallback && rm -rf "$T"
manifest:
gdpval_bench/skills/pdf-gen-fallback/SKILL.mdsource content
PDF Generation Fallback
This skill provides a reliable workflow for generating PDFs and documents when
execute_code_sandbox returns opaque errors. Use direct run_shell with python -c as a fallback, with library availability checks and explicit error handling.
When to Use
fails with cryptic error messages during document/PDF generationexecute_code_sandbox- You need to generate PDFs, reports, or structured documents
- Standard library execution is unreliable for document creation tasks
Step-by-Step Procedure
Step 1: Check Library Availability
Before attempting generation, verify that required libraries are installed:
run_shell command="python -c \"import reportlab; print('reportlab available')\"" run_shell command="python -c \"import fpdf; print('fpdf available')\"" run_shell command="python -c \"import pypdf; print('pypdf available')\""
Step 2: Attempt execute_code_sandbox First
Try the sandbox approach initially (it's cleaner for iteration):
execute_code_sandbox code=""" from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas c = canvas.Canvas("output.pdf", pagesize=letter) c.drawString(100, 750, "Document Content") c.save() print("ARTIFACT_PATH:/path/to/output.pdf") """
Step 3: Detect Opaque Errors
Watch for these failure indicators:
- Generic "execution failed" messages
- Import errors that don't match library availability checks
- Timeout errors during document rendering
- Missing artifact paths in output
Step 4: Fall Back to run_shell
If sandbox fails, use direct shell execution:
run_shell command="python -c \" from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas c = canvas.Canvas('output.pdf', pagesize=letter) c.drawString(100, 750, 'Document Content') c.save() print('PDF created successfully') \""
Step 5: Verify Output
After generation, confirm the file exists:
run_shell command="ls -la output.pdf && file output.pdf"
Complete Example Workflow
1. Check libraries: run_shell "python -c \"import reportlab\"" 2. Try sandbox: execute_code_sandbox with PDF generation code 3. If error detected: Fall back to run_shell with python -c 4. Verify: run_shell "ls -la *.pdf" 5. Read result: read_file filetype="pdf" file_path="output.pdf"
Error Handling Tips
- Capture stderr from run_shell to diagnose issues
- Use absolute paths when possible to avoid working directory issues
- For complex documents, write the Python script to a file first, then execute
- Consider installing missing libraries:
run_shell command="pip install reportlab"
Library Alternatives
If reportlab is unavailable, try:
- Simpler API, good for basic PDFsfpdf
- HTML/CSS to PDF conversionweasyprint
- PDF manipulation and mergingpypdf
Common Pitfalls
- Don't assume sandbox errors mean the approach is wrong—often it's环境 issues
- Always verify the PDF was created before proceeding
- Handle encoding issues explicitly (use utf-8)
- For images in PDFs, ensure image files are accessible to the execution context