{"id":25013868,"url":"https://github.com/code4recovery/pdf","last_synced_at":"2025-10-10T11:06:15.881Z","repository":{"id":43739050,"uuid":"387072822","full_name":"code4recovery/pdf","owner":"code4recovery","description":"Meeting schedule PDF generation service","archived":false,"fork":false,"pushed_at":"2025-02-08T17:27:08.000Z","size":548,"stargazers_count":3,"open_issues_count":3,"forks_count":2,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-04-12T22:06:25.508Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://pdf.code4recovery.org","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/code4recovery.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-07-18T02:17:49.000Z","updated_at":"2025-02-08T17:27:12.000Z","dependencies_parsed_at":"2023-02-09T21:15:32.449Z","dependency_job_id":"b295273c-3b4f-4b02-8483-3c59c29d4a8d","html_url":"https://github.com/code4recovery/pdf","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code4recovery%2Fpdf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code4recovery%2Fpdf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code4recovery%2Fpdf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code4recovery%2Fpdf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/code4recovery","download_url":"https://codeload.github.com/code4recovery/pdf/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248637768,"owners_count":21137538,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-02-05T07:16:35.330Z","updated_at":"2025-10-10T11:06:15.787Z","avatar_url":"https://github.com/code4recovery.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Meeting Schedule PDF Generator\n\nThis service accepts a [Meeting Guide-formatted JSON feed](https://github.com/code4recovery/spec) and returns inside pages for a PDF meeting schedule.\n\nThis system is designed for weekly in-person recovery meetings. It does not display online-only, inactive, or by-appointment meetings.\n\n## Assemble a PDF\n\nThis service provides the inside pages of a meeting book. To create the outer pages and merge it all into a single PDF:\n\n1. Decide on a paper size. The default is 4.25 x 11, so that it can be printed on standard US Letter and stapled down the middle.\n1. Create a Google or Word doc at that paper size. [Here is an example \"before\" Google doc](https://docs.google.com/document/d/1bmDg2j8cyalcqnw5GV1JJll7g8Av7uW6O6o4kVADwEc/edit?usp=sharing) you can copy. (Note: Google Docs doesn't support custom paper sizes, but the [Page Sizer app](https://workspace.google.com/marketplace/app/page_sizer/595382898724) will enable that functionality).\n1. Download it as a PDF, taking note of how many pages it is.\n1. Now generate your inside pages at (pdf.code4recovery.org)[https://pdf.code4recovery.org]. Set the paper size and starting page number according to the results of the steps above.\n1. Open the downloaded PDF document locally. I used Preview (on Mac) for this. Then you can drag your \"Meeting Directory Before\" PDF to the start of this document, in the thumbnails area on the left side. (Note: I found that it works better if I add my Google Doc _to_ my generated PDF, and not vice-versa).\n1. If you don't want to add content after the meetings, you're done! If you do then [here is an example \"after\" doc](https://docs.google.com/document/d/1whm-ZL1JbZFinSRnbt4uKvFM6Hhv8e246TYtadsnVZQ/edit?usp=sharing) you can copy.\n1. Set the page numbers to start where they need to and save the PDF locally.\n1. Now drag it to the bottom of your thumbnails in Preview and hit save. Now you have a complete meeting schedule PDF.\n\n## Booklet printing\n\nOnce nice way to use this is to print a meeting booklet for a central office. To get booklet printing to work properly, the first step is to assemble the booklet following the instructions above.\n\nYou will need a duplex printer and a program such as [Adobe Reader](https://get.adobe.com/reader/) (free) to print bookletized. Open the file in Reader, hit Print, and:\n\n-   Select \"Booklet\"\n-   Booklet subset should be \"Both Sides\"\n-   Binding should be \"Left (Tall)\"\n-   Then eliminate page margins by going to to Page Setup… -\u003e Paper Size \u003e Custom \u003e 8.5 x 11 and set the margins to 0\n\nThis should print a stack of pages that you can fold and staple down the middle. Voila!\n\n## Next steps\n\n-   [x] group by region / sub-region\n-   [x] home page form\n-   [x] publish\n-   [x] invalid URL / JSON error handling\n-   [x] stream mode\n-   [ ] printing screencast video\n-   [ ] mode to show which meetings are skipped\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcode4recovery%2Fpdf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcode4recovery%2Fpdf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcode4recovery%2Fpdf/lists"}