[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XBQ2P4A0D55MCNS3RGMBG5":3,"skill-same:01M6XBQ2P4A0D55MCNS3RGMBG5":64},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":13,"repositoryHtmlUrl":41,"repositoryHomepageUrl":6,"ownerHtmlUrl":42,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":43,"install":44,"resources":57},"01M6XBQ2P4A0D55MCNS3RGMBG5","pdf-checklist-generation",null,"Generate structured PDF checklists and reports using Python libraries in sandbox","UF-gzj\u002Fopenspace-claude-evolution","UF-gzj","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F272393507?v=4","01M6XBCZB755P01VVYGQWPYZY3","01M6XBCZFJA5AREA17WGETA3FW",0,"MIT","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fpdf-checklist-generation\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32],"PDF","checklist","generation","pdf checklist generation","python","sandbox","libraries","generate","reports","structured","2026-11-10 10:12:30",false,"---\nname: pdf-checklist-generation\ndescription: Generate structured PDF checklists and reports using Python libraries in sandbox\n---\n\n# PDF Checklist Generation\n\nThis skill provides a workflow for creating professional PDF documents (checklists, reports, scorecards) using Python libraries within an execute_code_sandbox environment.\n\n## When to Use\n\n- Need to generate downloadable PDF reports or checklists\n- Require structured documents with tables, sections, or scoring criteria\n- Working in a sandbox environment without direct file system access\n\n## Available Libraries\n\nChoose one based on your needs:\n\n| Library | Best For | Complexity |\n|---------|----------|------------|\n| `reportlab` | Professional layouts, tables, precise control | Medium |\n| `fpdf` | Simple documents, quick generation | Low |\n| `matplotlib` | Charts, graphs, visual reports | Medium |\n\n## Step-by-Step Workflow\n\n### Step 1: Install Required Library\n\n```python\n!pip install reportlab  # or fpdf, matplotlib\n```\n\n### Step 2: Create PDF Generation Script\n\n**Example using reportlab:**\n\n```python\nfrom reportlab.lib.pagesizes import letter\nfrom reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer\nfrom reportlab.lib.styles import getSampleStyleSheet\nfrom reportlab.lib import colors\n\ndef create_checklist_pdf(filename, checklist_items):\n    doc = SimpleDocTemplate(filename, pagesize=letter)\n    styles = getSampleStyleSheet()\n    elements = []\n    \n    # Title\n    elements.append(Paragraph(\"Assessment Checklist\", styles['Heading1']))\n    elements.append(Spacer(1, 12))\n    \n    # Table data\n    data = [['Item', 'Status', 'Score']]\n    for item in checklist_items:\n        data.append([item['name'], item['status'], item['score']])\n    \n    # Create table\n    table = Table(data)\n    table.setStyle(TableStyle([\n        ('BACKGROUND', (0, 0), (-1, 0), colors.grey),\n        ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),\n        ('ALIGN', (0, 0), (-1, -1), 'CENTER'),\n        ('GRID', (0, 0), (-1, -1), 1, colors.black),\n    ]))\n    elements.append(table)\n    \n    doc.build(elements)\n    print(f\"PDF created: {filename}\")\n\n# Usage\nchecklist = [\n    {'name': 'Security Check', 'status': 'Pass', 'score': 10},\n    {'name': 'Performance Test', 'status': 'Fail', 'score': 5},\n]\ncreate_checklist_pdf('report.pdf', checklist)\n```\n\n### Step 3: Execute in Sandbox\n\nRun the script using `execute_code_sandbox`:\n\n```\nexecute_code_sandbox(code=\"\u003Cyour pdf generation code>\")\n```\n\n### Step 4: Verify Output\n\nAfter generation, verify the PDF was created:\n\n```\nread_file(path=\"report.pdf\")\n```\n\nOr inspect via shell:\n\n```\nexecute_code_sandbox(code=\"import os; print(os.path.exists('report.pdf'))\")\n```\n\n## Best Practices\n\n1. **Keep it simple**: Start with basic layouts before adding complexity\n2. **Test incrementally**: Generate a minimal PDF first, then add features\n3. **Handle errors**: Wrap PDF generation in try\u002Fexcept blocks\n4. **Verify file existence**: Always confirm the PDF was created before proceeding\n5. **Use UTF-8**: Ensure text encoding is proper for special characters\n\n## Common Pitfalls\n\n- Forgetting to install the library before import\n- Not checking if file was created successfully\n- Using paths that don't exist in sandbox environment\n- Missing required dependencies for advanced features\n\n## Troubleshooting\n\n| Issue | Solution |\n|-------|----------|\n| Import error | Run `!pip install \u003Clibrary>` first |\n| File not found | Check working directory with `!pwd` |\n| Blank PDF | Ensure `doc.build()` is called |\n| Encoding issues | Use Unicode strings, specify encoding |","# PDF Checklist Generation\n\nThis skill provides a workflow for creating professional PDF documents (checklists, reports, scorecards) using Python libraries within an execute_code_sandbox environment.\n\n## When to Use\n\n- Need to generate downloadable PDF reports or checklists\n- Require structured documents with tables, sections, or scoring criteria\n- Working in a sandbox environment without direct file system access\n\n## Available Libraries\n\nChoose one based on your needs:\n\n| Library | Best For | Complexity |\n|---------|----------|------------|\n| `reportlab` | Professional layouts, tables, precise control | Medium |\n| `fpdf` | Simple documents, quick generation | Low |\n| `matplotlib` | Charts, graphs, visual reports | Medium |\n\n## Step-by-Step Workflow\n\n### Step 1: Install Required Library\n\n```python\n!pip install reportlab  # or fpdf, matplotlib\n```\n\n### Step 2: Create PDF Generation Script\n\n**Example using reportlab:**\n\n```python\nfrom reportlab.lib.pagesizes import letter\nfrom reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer\nfrom reportlab.lib.styles import getSampleStyleSheet\nfrom reportlab.lib import colors\n\ndef create_checklist_pdf(filename, checklist_items):\n    doc = SimpleDocTemplate(filename, pagesize=letter)\n    styles = getSampleStyleSheet()\n    elements = []\n    \n    # Title\n    elements.append(Paragraph(\"Assessment Checklist\", styles['Heading1']))\n    elements.append(Spacer(1, 12))\n    \n    # Table data\n    data = [['Item', 'Status', 'Score']]\n    for item in checklist_items:\n        data.append([item['name'], item['status'], item['score']])\n    \n    # Create table\n    table = Table(data)\n    table.setStyle(TableStyle([\n        ('BACKGROUND', (0, 0), (-1, 0), colors.grey),\n        ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),\n        ('ALIGN', (0, 0), (-1, -1), 'CENTER'),\n        ('GRID', (0, 0), (-1, -1), 1, colors.black),\n    ]))\n    elements.append(table)\n    \n    doc.build(elements)\n    print(f\"PDF created: {filename}\")\n\n# Usage\nchecklist = [\n    {'name': 'Security Check', 'status': 'Pass', 'score': 10},\n    {'name': 'Performance Test', 'status': 'Fail', 'score': 5},\n]\ncreate_checklist_pdf('report.pdf', checklist)\n```\n\n### Step 3: Execute in Sandbox\n\nRun the script using `execute_code_sandbox`:\n\n```\nexecute_code_sandbox(code=\"\u003Cyour pdf generation code>\")\n```\n\n### Step 4: Verify Output\n\nAfter generation, verify the PDF was created:\n\n```\nread_file(path=\"report.pdf\")\n```\n\nOr inspect via shell:\n\n```\nexecute_code_sandbox(code=\"import os; print(os.path.exists('report.pdf'))\")\n```\n\n## Best Practices\n\n1. **Keep it simple**: Start with basic layouts before adding complexity\n2. **Test incrementally**: Generate a minimal PDF first, then add features\n3. **Handle errors**: Wrap PDF generation in try\u002Fexcept blocks\n4. **Verify file existence**: Always confirm the PDF was created before proceeding\n5. **Use UTF-8**: Ensure text encoding is proper for special characters\n\n## Common Pitfalls\n\n- Forgetting to install the library before import\n- Not checking if file was created successfully\n- Using paths that don't exist in sandbox environment\n- Missing required dependencies for advanced features\n\n## Troubleshooting\n\n| Issue | Solution |\n|-------|----------|\n| Import error | Run `!pip install \u003Clibrary>` first |\n| File not found | Check working directory with `!pwd` |\n| Blank PDF | Ensure `doc.build()` is called |\n| Encoding issues | Use Unicode strings, specify encoding |",{"name":5,"description":7},"main","0650921d63895de3997bc81f1ff1d0ac67032072","gdpval_bench\u002Fskills\u002Fpdf-checklist-generation","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution","https:\u002F\u002Fgithub.com\u002FUF-gzj","2026-04-16 09:31:03",{"source":8,"skillName":5,"commands":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add UF-gzj\u002Fopenspace-claude-evolution --skill pdf-checklist-generation",{"tool":50,"command":51},"bunx","bunx skills add UF-gzj\u002Fopenspace-claude-evolution --skill pdf-checklist-generation",{"tool":53,"command":54},"pnpm","pnpm dlx skills add UF-gzj\u002Fopenspace-claude-evolution --skill pdf-checklist-generation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fpdf-checklist-generation\u002FSKILL.md",true,[58],{"path":59,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":62,"sourceHtmlUrl":63},".skill_id","OTHER","其他",38,"https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fgdpval_bench\u002Fskills\u002Fpdf-checklist-generation\u002F.skill_id",[65,89,106,115,145,161],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":33},"01M6XCCXD3NCM2YKR3WNGBASPC","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\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-ts-check\u002FSKILL.md",[],[72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,27],"check","write","write special chars ts check","typescript","filters","characters","Existing","type-checking","for","errors","script","output","type","files","only","template","file",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":33},"01M6XCCT7E3J922Q345PBGSHPN","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\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-readback\u002FSKILL.md",[],[96,97,73,88,98,27,99,100,101,102,103,87,104,105,77,80,82],"readback","write special chars readback","helper","post","via","scripts","cleanup","read","verification","with",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":33},"01M6XCCMQX1R8B6FECWB3P63T7","write-special-chars-heredoc","Workaround for write_file failures caused by special characters (apostrophes, backticks, template literals) by using a Python heredoc script executed via shell.","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fwrite-special-chars-heredoc\u002FSKILL.md",[],[113,73,77,114,82,100,87,88,27,80],"write special chars heredoc","shell",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":126,"publishedAt":33},"01M6XCCG41M994JJEX6VN52PEP","worldmonitor-reference","Curated architecture index of the WorldMonitor open-source dashboard. Reference for extracting patterns — vanilla TypeScript, Panel class hierarchy, service layer, CSS grid, API edge functions, refresh scheduler, and 60+ data source integrations.","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fworldmonitor-reference\u002FSKILL.md",[121],{"categoryNo":122,"categoryName":123,"taxonomyType":124,"taxonomyTypeDesc":125},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[127,128,129,130,131,75,132,133,134,135,136,80,137,138,139,140,141,142,143,144],"reference","worldmonitor","worldmonitor reference","architecture","dashboard","css","scheduler","layer","hierarchy","source","extracting","panel","patterns","edge functions","integrations","open","api","data",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":151,"publishedAt":33},"01M6XCCCHWNKG2W4VH9E6A10HF","virtual-list","Implement efficient virtual scrolling for rendering large lists with DOM recycling, chunk-based rendering, and performance optimizations","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fvirtual-list\u002FSKILL.md",[],[152,153,154,155,80,156,105,157,158,159,160],"virtual list","list","virtual","chunk","dom","rendering","recycling","implement","performance",{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":167,"publishedAt":33},"01M6XCC7X8PKMR2DEW91XGHYSV","verify-directory-structure","Diagnose and resolve file access issues by first verifying the directory structure.","https:\u002F\u002Fgithub.com\u002FUF-gzj\u002Fopenspace-claude-evolution\u002Fblob\u002Fmain\u002Fshowcase\u002Fskills\u002Fverify-directory-structure\u002FSKILL.md",[],[168,169,170,171,172,173,88,174,175,176],"directory","verify directory structure","structure","verify","access","first","issues","diagnose","file access"]