[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HWPRVRT8KX7REJ143ZNW37":3,"skill-same:01M6HWPRVRT8KX7REJ143ZNW37":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":48,"ownerDescription":6,"updatedAt":49,"install":50,"resources":63},"01M6HWPRVRT8KX7REJ143ZNW37","pdf-generation-troubleshooting",null,"Systematic fallback workflow for PDF generation through pandoc, reportlab, and fpdf2 with installation verification","HKUDS\u002FAgentPilot","HKUDS","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F118165258?v=4","01M6HW8VRNZP64G0P4MVJW2KKQ","✨Data Intelligence Lab@HKU✨","01M6HW8VWZVHBRHYH3T330PFWV",8029,"MIT","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fbenchmarks\u002Fgdpval\u002Fskills\u002Fpdf-generation-troubleshooting\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36],"PDF","troubleshooting","generation","pdf generation","pdf generation troubleshooting","workflow","verification","fallback","installation","systematic","pandoc","with","for","2026-11-10 10:12:30",false,"---\nname: pdf-generation-troubleshooting\ndescription: Systematic fallback workflow for PDF generation through pandoc, reportlab, and fpdf2 with installation verification\n---\n\n# PDF Generation Troubleshooting Workflow\n\nThis skill provides a systematic approach to generating PDFs when multiple tools may be unavailable. Follow this fallback sequence to ensure PDF generation succeeds.\n\n## Workflow Overview\n\n1. **Try pandoc first** (simplest for markdown\u002FHTML conversion)\n2. **Fallback to reportlab** (Python library for programmatic PDFs)\n3. **Fallback to fpdf2** (alternative Python PDF library)\n\nEach step includes installation verification before execution.\n\n## Step 1: Attempt pandoc Conversion\n\nUse pandoc for markdown or HTML to PDF conversion. Check availability first:\n\n```bash\n# Check if pandoc is available\nwhich pandoc || echo \"pandoc not found\"\n```\n\nIf available, convert:\n\n```bash\npandoc input.md -o output.pdf\n```\n\nIf pandoc fails or is unavailable, proceed to Step 2.\n\n## Step 2: Attempt reportlab\n\n### Check Installation\n\n```bash\npython3 -c \"import reportlab\" 2>\u002Fdev\u002Fnull && echo \"reportlab available\" || echo \"reportlab not found\"\n```\n\n### Install if Needed\n\n```bash\npip install reportlab\n```\n\n### Create PDF Script\n\nUse `write_file` to create a Python script:\n\n```python\nfrom reportlab.lib.pagesizes import letter\nfrom reportlab.pdfgen import canvas\n\ndef create_pdf(filename, content):\n    c = canvas.Canvas(filename, pagesize=letter)\n    c.drawString(100, 750, content)\n    c.save()\n\nif __name__ == \"__main__\":\n    create_pdf(\"output.pdf\", \"Your content here\")\n```\n\n### Execute Script\n\nUse `run_shell` with proper directory context:\n\n```bash\ncd \u002Fpath\u002Fto\u002Fworking\u002Fdirectory && python3 script.py\n```\n\nIf reportlab fails, proceed to Step 3.\n\n## Step 3: Attempt fpdf2\n\n### Check Installation\n\n```bash\npython3 -c \"from fpdf import FPDF\" 2>\u002Fdev\u002Fnull && echo \"fpdf2 available\" || echo \"fpdf2 not found\"\n```\n\n### Install if Needed\n\n```bash\npip install fpdf2\n```\n\n### Create PDF Script\n\n```python\nfrom fpdf import FPDF\n\ndef create_pdf(filename, text):\n    pdf = FPDF()\n    pdf.add_page()\n    pdf.set_font(\"Arial\", size=12)\n    pdf.cell(200, 10, txt=text, ln=True)\n    pdf.output(filename)\n\nif __name__ == \"__main__\":\n    create_pdf(\"output.pdf\", \"Your content here\")\n```\n\n### Execute Script\n\n```bash\ncd \u002Fpath\u002Fto\u002Fworking\u002Fdirectory && python3 script.py\n```\n\n## Decision Matrix\n\n| Tool | Best For | Limitations |\n|------|----------|-------------|\n| pandoc | Markdown\u002FHTML conversion | Requires external installation |\n| reportlab | Complex layouts, graphics | Steeper learning curve |\n| fpdf2 | Simple text PDFs | Limited formatting options |\n\n## Error Handling Pattern\n\nFor each tool attempt:\n\n1. Check availability\u002Finstallation\n2. Install if missing (`pip install \u003Cpackage>`)\n3. Create script using `write_file`\n4. Execute using `run_shell` with `cd \u003Cdir> && \u003Ccommand>`\n5. Verify output file exists\n6. If fails, move to next tool in sequence\n\n## Example Fallback Implementation\n\n```bash\n# Pseudocode for full workflow\nif command -v pandoc >\u002Fdev\u002Fnull 2>&1; then\n    pandoc input.md -o output.pdf && exit 0\nfi\n\nif python3 -c \"import reportlab\" 2>\u002Fdev\u002Fnull; then\n    # Create and run reportlab script\n    exit 0\nfi\n\n# Final fallback: fpdf2\npip install fpdf2\n# Create and run fpdf2 script\n```\n\n## Key Principles\n\n- **Always verify** tool availability before attempting use\n- **Install on-demand** when a tool is missing\n- **Use write_file** for script creation (ensures clean, versionable code)\n- **Use run_shell** with explicit directory context (`cd \u003Cdir> && \u003Ccmd>`)\n- **Progressive fallback** ensures at least one method succeeds\n- **Verify output** after each attempt before moving to next tool","# PDF Generation Troubleshooting Workflow\n\nThis skill provides a systematic approach to generating PDFs when multiple tools may be unavailable. Follow this fallback sequence to ensure PDF generation succeeds.\n\n## Workflow Overview\n\n1. **Try pandoc first** (simplest for markdown\u002FHTML conversion)\n2. **Fallback to reportlab** (Python library for programmatic PDFs)\n3. **Fallback to fpdf2** (alternative Python PDF library)\n\nEach step includes installation verification before execution.\n\n## Step 1: Attempt pandoc Conversion\n\nUse pandoc for markdown or HTML to PDF conversion. Check availability first:\n\n```bash\n# Check if pandoc is available\nwhich pandoc || echo \"pandoc not found\"\n```\n\nIf available, convert:\n\n```bash\npandoc input.md -o output.pdf\n```\n\nIf pandoc fails or is unavailable, proceed to Step 2.\n\n## Step 2: Attempt reportlab\n\n### Check Installation\n\n```bash\npython3 -c \"import reportlab\" 2>\u002Fdev\u002Fnull && echo \"reportlab available\" || echo \"reportlab not found\"\n```\n\n### Install if Needed\n\n```bash\npip install reportlab\n```\n\n### Create PDF Script\n\nUse `write_file` to create a Python script:\n\n```python\nfrom reportlab.lib.pagesizes import letter\nfrom reportlab.pdfgen import canvas\n\ndef create_pdf(filename, content):\n    c = canvas.Canvas(filename, pagesize=letter)\n    c.drawString(100, 750, content)\n    c.save()\n\nif __name__ == \"__main__\":\n    create_pdf(\"output.pdf\", \"Your content here\")\n```\n\n### Execute Script\n\nUse `run_shell` with proper directory context:\n\n```bash\ncd \u002Fpath\u002Fto\u002Fworking\u002Fdirectory && python3 script.py\n```\n\nIf reportlab fails, proceed to Step 3.\n\n## Step 3: Attempt fpdf2\n\n### Check Installation\n\n```bash\npython3 -c \"from fpdf import FPDF\" 2>\u002Fdev\u002Fnull && echo \"fpdf2 available\" || echo \"fpdf2 not found\"\n```\n\n### Install if Needed\n\n```bash\npip install fpdf2\n```\n\n### Create PDF Script\n\n```python\nfrom fpdf import FPDF\n\ndef create_pdf(filename, text):\n    pdf = FPDF()\n    pdf.add_page()\n    pdf.set_font(\"Arial\", size=12)\n    pdf.cell(200, 10, txt=text, ln=True)\n    pdf.output(filename)\n\nif __name__ == \"__main__\":\n    create_pdf(\"output.pdf\", \"Your content here\")\n```\n\n### Execute Script\n\n```bash\ncd \u002Fpath\u002Fto\u002Fworking\u002Fdirectory && python3 script.py\n```\n\n## Decision Matrix\n\n| Tool | Best For | Limitations |\n|------|----------|-------------|\n| pandoc | Markdown\u002FHTML conversion | Requires external installation |\n| reportlab | Complex layouts, graphics | Steeper learning curve |\n| fpdf2 | Simple text PDFs | Limited formatting options |\n\n## Error Handling Pattern\n\nFor each tool attempt:\n\n1. Check availability\u002Finstallation\n2. Install if missing (`pip install \u003Cpackage>`)\n3. Create script using `write_file`\n4. Execute using `run_shell` with `cd \u003Cdir> && \u003Ccommand>`\n5. Verify output file exists\n6. If fails, move to next tool in sequence\n\n## Example Fallback Implementation\n\n```bash\n# Pseudocode for full workflow\nif command -v pandoc >\u002Fdev\u002Fnull 2>&1; then\n    pandoc input.md -o output.pdf && exit 0\nfi\n\nif python3 -c \"import reportlab\" 2>\u002Fdev\u002Fnull; then\n    # Create and run reportlab script\n    exit 0\nfi\n\n# Final fallback: fpdf2\npip install fpdf2\n# Create and run fpdf2 script\n```\n\n## Key Principles\n\n- **Always verify** tool availability before attempting use\n- **Install on-demand** when a tool is missing\n- **Use write_file** for script creation (ensures clean, versionable code)\n- **Use run_shell** with explicit directory context (`cd \u003Cdir> && \u003Ccmd>`)\n- **Progressive fallback** ensures at least one method succeeds\n- **Verify output** after each attempt before moving to next tool",{"name":5,"description":7},"main","6b84b0689ca0d9e7b1e4061188ff6b60758e0f8a","openspace\u002Fbenchmarks\u002Fgdpval\u002Fskills\u002Fpdf-generation-troubleshooting",944,"https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot","https:\u002F\u002Fgithub.com\u002FHKUDS","https:\u002F\u002Fsites.google.com\u002Fview\u002Fchaoh","2026-11-12 22:26:39",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add HKUDS\u002FAgentPilot --skill pdf-generation-troubleshooting",{"tool":56,"command":57},"bunx","bunx skills add HKUDS\u002FAgentPilot --skill pdf-generation-troubleshooting",{"tool":59,"command":60},"pnpm","pnpm dlx skills add HKUDS\u002FAgentPilot --skill pdf-generation-troubleshooting","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fbenchmarks\u002Fgdpval\u002Fskills\u002Fpdf-generation-troubleshooting\u002FSKILL.md",true,[64],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},".skill_id","OTHER","其他",44,"https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fbenchmarks\u002Fgdpval\u002Fskills\u002Fpdf-generation-troubleshooting\u002F.skill_id",[71,89,108,131,154,177],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":37},"01M6HYB297NDABRERJRVG0K8R0","agentpilot","Set up AgentPilot and use its single entry to prepare missing inputs and run configured RSI experiments. Use when the user requests AgentPilot installation or work with AgentPilot.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fplugins\u002Fagentpilot\u002Fskills\u002Fagentpilot\u002FSKILL.md",[],[73,78,79,35,80,32,81,82,83,84,85,86,87,88],"prepare","requests","missing","rsi","up","use","user","work","SET","run","experiments",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":37},"01M6HYAYWXTTE1J7DJM0MFNQ4H","remember","Review auto-memory entries and propose promotions to OPENSPACE.md, OPENSPACE.local.md, or retained auto-memory topics; detect duplicates, stale facts, conflicts, and ambiguous entries before making changes.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fopenspace\u002Fskills\u002Fremember\u002FSKILL.md",[],[91,96,97,98,99,100,101,102,103,104,105,106,107],"memory","review","auto","openspace","changes","facts","detect","entries","local","conflicts","stale","duplicates",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":117,"publishedAt":37},"01M6HYAVMPM4SBDV60R2B5HPV8","skill-discovery","Search reusable OpenSpace skills locally, and browse cloud packages step by step when a cloud skill may help. Reusing proven skills saves tokens, improves reliability, and extends your capabilities beyond built-in tools.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fopenspace\u002Fhost_skills\u002Fskill-discovery\u002FSKILL.md",[114],{"categoryNo":115,"categoryName":116,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[118,119,120,99,121,122,123,124,125,126,127,128,129,130],"skill discovery","discovery","reusable","step by step","tokens","packages","help","cloud","reliability","capabilities","browse","search","Tools",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":138,"publishedAt":37},"01M6HYAR811B3RB0M50RBEDGN6","delegate-task","Delegate tasks to OpenSpace — a full-stack autonomous worker for coding, DevOps, web research, and desktop automation, backed by an extensive MCP tool and skill library. Skills auto-improve through use, reducing token consumption over time. A cloud community lets agents share and collectively evolve reusable skills.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Fopenspace\u002Fhost_skills\u002Fdelegate-task\u002FSKILL.md",[137],{"categoryNo":115,"categoryName":116,"taxonomyType":21,"taxonomyTypeDesc":22},[139,140,141,99,142,143,144,145,146,120,98,83,147,148,149,36,150,151,152,153],"delegate","task","delegate task","time","improve","desktop automation","worker","community","autonomous","tool","stack","share","tasks","automation","MCP",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":160,"publishedAt":37},"01M6HYAM9FSGV6E52AYENDQXYH","write-special-chars-ts-check","Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) using a Python heredoc script, plus a reliable TypeScript type-checking step that filters output to only the newly-written files to avoid being misled by pre-existing errors.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Flegacy\u002Fv1\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-ts-check\u002FSKILL.md",[],[161,162,163,164,165,166,167,168,169,170,171,172,173,174,36,175,176],"write special chars ts check","write","check","type","files","filters","only","template","file","python","typescript","output","Existing","type-checking","errors","script",{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":181,"categories":182,"keywords":183,"publishedAt":37},"01M6HYAH05HGV7SVWSVR8PJRQD","write-special-chars-readback","Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) using a Python heredoc script, with mandatory post-write verification via read_file and cleanup of \u002Ftmp helper scripts.","https:\u002F\u002Fgithub.com\u002FHKUDS\u002FAgentPilot\u002Fblob\u002Fmain\u002Fopenspace\u002Flegacy\u002Fv1\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-readback\u002FSKILL.md",[],[184,185,162,35,36,176,186,187,188,189,190,168,169,30,191,170],"write special chars readback","readback","helper","post","via","scripts","read","cleanup"]