{"id":27185362,"url":"https://github.com/santwer/exporter","last_synced_at":"2025-04-09T17:46:32.751Z","repository":{"id":48789893,"uuid":"514875089","full_name":"santwer/Exporter","owner":"santwer","description":"Package for easy Word exports in Laravel on given Templates.","archived":false,"fork":false,"pushed_at":"2025-04-08T10:48:20.000Z","size":74,"stargazers_count":1,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-08T11:30:24.839Z","etag":null,"topics":["docx","docx-generator","docx-template","export","laravel","laravel-package","package","pdf","pdf-document","pdf-generation","php","php8","replace-text","word"],"latest_commit_sha":null,"homepage":"https://santwer.github.io/Exporter/","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/santwer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2022-07-17T15:02:18.000Z","updated_at":"2025-04-08T10:48:24.000Z","dependencies_parsed_at":"2024-03-13T20:39:02.231Z","dependency_job_id":"991d74e6-c79e-4627-9ca4-12ad2c7def5a","html_url":"https://github.com/santwer/Exporter","commit_stats":{"total_commits":17,"total_committers":3,"mean_commits":5.666666666666667,"dds":0.5294117647058824,"last_synced_commit":"ab4dab563bc634171198af898b679db64509bf60"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/santwer%2FExporter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/santwer%2FExporter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/santwer%2FExporter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/santwer%2FExporter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/santwer","download_url":"https://codeload.github.com/santwer/Exporter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248081312,"owners_count":21044666,"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":["docx","docx-generator","docx-template","export","laravel","laravel-package","package","pdf","pdf-document","pdf-generation","php","php8","replace-text","word"],"created_at":"2025-04-09T17:46:32.117Z","updated_at":"2025-04-09T17:46:32.741Z","avatar_url":"https://github.com/santwer.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Word Template Exporter #\nPackage for easy Word exports in Laravel on given Templates. \nThis package is based on [phpoffice/phpword](https://github.com/PHPOffice/PHPWord). \n\n\u003cp style=\"text-align: center;\"\u003e\n\u003ca href=\"https://github.com/santwer/exporter\"\u003e\u003cimg src=\"https://img.shields.io/github/commit-activity/m/santwer/exporter\" alt=\"Commit Activity\"\u003e\u003c/a\u003e\n\u003ca href=\"https://packagist.org/packages/santwer/exporter\"\u003e\u003cimg src=\"https://img.shields.io/packagist/dt/santwer/exporter\" alt=\"Total Downloads\"\u003e\u003c/a\u003e\n\u003ca href=\"https://packagist.org/packages/santwer/exporter\"\u003e\u003cimg src=\"https://img.shields.io/packagist/v/santwer/exporter\" alt=\"Latest Stable Version\"\u003e\u003c/a\u003e\n\u003ca href=\"https://packagist.org/packages/santwer/exporter\"\u003e\u003cimg src=\"https://img.shields.io/packagist/l/santwer/exporter\" alt=\"License\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## Table of Contents\n- [Installation](#installation)\n- [Configuration](#configuration-optional)\n- [How to use with ExportClasses](#how-to-use-with-exportclasses)\n    - [Usage](#usage)\n    - [Creating a New Export](#creating-a-new-export)\n    - [Example](#example)\n    - [Charts](#charts)\n    - [Images](#images)\n    - [Tables](#tables)\n- [How to use in Query](#how-to-use-in-query)\n    - [Basic Export](#basic-export)\n    - [Export as PDF](#export-as-pdf)\n    - [Autoloading Relations](#autoloading-relations)\n    - [Variables](#variables)\n    - [Template Variables/Blocks](#template-variablesblocks)\n    - [Relation Variable with Condition](#relation-variable-with-condition)\n- [Template](#template)\n\n## Installation\n\nExporter is installed via [Composer](https://getcomposer.org/).\nTo [add a dependency](https://getcomposer.org/doc/04-schema.md#package-links) to Exporter in your project, either\n\nRun the following to use the latest stable version\n```sh\n    composer require santwer/exporter\n```\nor if you want the latest master version\n```sh\n    composer require santwer/exporter:dev-master\n```\n\nYou can of course also manually edit your composer.json file\n```json\n{\n    \"require\": {\n       \"santwer/exporter\": \"v0.3.*\"\n    }\n}\n```\n\n### Configuration (optional)\nTo use pdf export it is needed to install LibreOffice. WordTemplateExporter is using the soffice command to convert the docx file to pdf. \n\n```sh\n    sudo apt-get install libreoffice\n```\n#### Windows\nDownload and install LibreOffice from [here](https://www.libreoffice.org/download/download/)\nAlso add the path to the soffice command to the system environment variables.\n\n```sh\n    export PATH=$PATH:/path/to/soffice\n```\n\n## How to use with ExportClasses\n\n### Usage\nYou can use the WordExporter Facade as follows. The format of the exported file is determined by the file extension. Supported formats are .docx and .pdf.\n```php\nuse WordExporter\\Facades\\WordExporter;\n\n// Download as a Word file\nWordExporter::download(new MyExportClass(), 'final-word.docx');\n\n// Store the exported file\nWordExporter::store(new MyExportClass(), 'path/to/save/export.docx');\n\n// Store the exported file with an certain filename\nWordExporter::storeAs(new MyExportClass(), 'path/to/save/', 'export.docx');\n\n// Store the exported file with an certain filename as a batch\nWordExporter::batchStore(\n    new Exportable(new MyExportClass(), 'path/to/save/', 'export.docx'),\n    new Exportable(new MyExportClass1(), 'path/to/save/', 'export1.docx'),\n    new Exportable(new MyExportClass2(), 'path/to/save/', 'export2.pdf'),\n    );\n\n// Queue it for later processing\nWordExporter::queue(new MyExportClass(), 'path/to/save/export.docx');\n```\n\n### Creating a New Export\nYou can create a new export using the following Artisan command:\n```sh\n    php artisan make:word {className}\n```\nReplace {className} with the name of the new export class.\n\nInterfaces\n\nThe object $export can be implemented with the following interfaces:\n\n\n| Interface         | Description                                                                               | Example                                         |\n|-------------------|-------------------------------------------------------------------------------------------|-------------------------------------------------|\n| `FromWordTemplate` | Required. Interface indicating the export is from a Word template.                        | `class MyExportClass implements FromWordTemplate` |\n| `GlobalTokens`    | Interface for providing global tokens for replacement in Word template.                   | `class MyGlobalTokens implements GlobalTokens`   |\n| `TokensFromArray` | Interface for providing tokens from an array for replacement in Word template.            | `class MyArrayTokens implements TokensFromArray` |\n| `TokensFromCollection` | Interface for providing tokens from a collection for replacement in Word template.        | `class MyCollectionTokens implements TokensFromCollection` |\n| `TokensArray`     | Interface for providing tokens from an array without any block data                       |                                                            |\n| `TokensFromObject` | Interface for providing tokens from an object/class without any block data                |                                                            |\n| `TokensFromModel` | Interface for prodiding tokens from a model without any block data                        |                                                            |\n| `WithCharts`      | Interface that allows you to replace text charts as array                                 |                                                            |\n| `WithCheckboxes`  | Interfaces that allows you to replace text with Checkboxes, either checked or not checked |                                                            |\n| `WithImages`      | Interface that allows you to replace text with Images                                     |                                                            |\n\nEach of these interfaces defines methods that need to be implemented according to the specific requirements of the export process. These methods typically involve returning an array of key-value pairs where keys represent placeholders in the Word template and values are the data to replace those placeholders with.\n\n### Example\n\nWord file:\n```word\n${TownDateFormat}\n\n\n${customer}\n    ${name}, ${email}\n    ${deliveryAddress.street}, ${deliveryAddress.city} ${deliveryAddress.postcode} \n${/customer}\n```\n\nController:\n```php\nnamespace App\\Http\\Controllers;\n\nuse App\\Http\\Export\\FirstExport;\nuse Santwer\\Exporter\\Facade\\WordExport;\n\nclass HomeController extends Controller\n{\n    public function index()\n    {\n        return WordExport::download(new FirstExport(), 'myExport.docx');\n    }\n}\n```\n\nExport Class:\n\n```php\nnamespace App\\Http\\Export;\n\nuse Santwer\\Exporter\\Concerns\\FromWordTemplate;\nuse Santwer\\Exporter\\Concerns\\GlobalTokens;\nuse Santwer\\Exporter\\Concerns\\TokensFromCollection;\nuse Illuminate\\Support\\Collection;\n\nclass FirstExport implements FromWordTemplate, TokensFromCollection, GlobalTokens\n{\n\tpublic function items(): Collection\n\t{\n\t\treturn collect([\n\t\t\t[\n\t\t\t\t'name' =\u003e 'Jane Smith',\n\t\t\t\t'email' =\u003e 'jane.smith@example.com',\n\t\t\t\t'deliveryAddress' =\u003e [\n\t\t\t\t\t'street' =\u003e 'Main Street',\n\t\t\t\t\t'city' =\u003e 'Metropolis',\n\t\t\t\t\t'postcode' =\u003e '543210',\n\t\t\t\t],\n\t\t\t],\n\t\t\t[\n\t\t\t\t'name' =\u003e 'Alice Johnson',\n\t\t\t\t'email' =\u003e 'alice.johnson@example.com',\n\t\t\t\t'deliveryAddress' =\u003e [\n\t\t\t\t\t'street' =\u003e 'Elm Street',\n\t\t\t\t\t'city' =\u003e 'Springfield',\n\t\t\t\t\t'postcode' =\u003e '987654',\n\t\t\t\t],\n\t\t\t],\n\t\t\t[\n\t\t\t\t'name' =\u003e 'Bob Williams',\n\t\t\t\t'email' =\u003e 'bob.williams@example.com',\n\t\t\t\t'deliveryAddress' =\u003e [\n\t\t\t\t\t'street' =\u003e 'Oak Avenue',\n\t\t\t\t\t'city' =\u003e 'Townsville',\n\t\t\t\t\t'postcode' =\u003e '135792',\n\t\t\t\t],\n\t\t\t],\n\t\t]);\n\t}\n\n\tpublic function blockName():string\n\t{\n\t\treturn 'customer';\n\t}\n\n\tpublic function values(): array\n\t{\n\t\treturn [\n\t\t\t'TownDateFormat' =\u003e 'Townsville, '. now()-\u003eformat('Y-m-d'),\n\t\t];\n\t}\n\n\tpublic function itemTokens($item) : array\n\t{\n\t\treturn $item;\n\t}\n\n\tpublic function wordTemplateFile(): string\n\t{\n\t\treturn 'uploads/myDocFile.docx';\n\t}\n}\n```\n\n### Charts\nTo replace a chart in a Word template, you can use the `WithCharts` interface. This interface requires the implementation of the `charts` method, which should return an array of key-value pairs where keys represent placeholders in the Word template and values are the data to replace those placeholders with.\nYou can find all infos about the charts [here](https://phpoffice.github.io/PHPWord/usage/template.html#setchartvalue)\n\nPossible types are `'pie', 'doughnut', 'line', 'bar', 'stacked_bar', 'percent_stacked_bar', 'column', 'stacked_column', 'percent_stacked_column', 'area', 'radar', 'scatter'`\n\n```php\nnamespace App\\Http\\Export;\nuse Santwer\\Exporter\\Concerns\\FromWordTemplate;\nuse Santwer\\Exporter\\Concerns\\GlobalTokens;\nuse Santwer\\Exporter\\Concerns\\WithCharts;\nuse Santwer\\Exporter\\Concerns\\TokensFromCollection;\nuse Illuminate\\Support\\Collection;\n\nclass FirstExport implements FromWordTemplate, TokensFromCollection, GlobalTokens, WithCharts\n{\n    public function charts(): array\n\t{\n\n\t\treturn [\n\t\t\t'radar' =\u003e function () {\n\t\t\t\t$categories = array('A', 'B', 'C', 'D', 'E');\n\t\t\t\t$series1 = [1, 3, 2, 5, 4];\n\n\t\t\t\t$chart = new Chart('radar', $categories, $series1,\n\t\t\t\t\t[\n\t\t\t\t\t\t'width' =\u003e 1000000*5,\n\t\t\t\t\t\t'height' =\u003e 1000000*5,\n\t\t\t\t\t\t'showLegend' =\u003e true\n\n\t\t\t\t\t],'Series 1');\n\t\t\t\t$chart-\u003eaddSeries($categories, [3, 4, 5, 1, 2], 'Series 2');\n\t\t\t\treturn $chart;\n\t\t\t},\n\t\t];\n\t}\n\t\n\tpublic function items(): Collection\n\t{\n\t\treturn collect([\n            \n\t\t]);\n\t}\n\n\t...\n}\n\n```\n\n### Images\nTo replace an image in a Word template, you can use the `WithImages` interface. This interface requires the implementation of the `images` method, which should return an array of key-value pairs where keys represent placeholders in the Word template and values are the data to replace those placeholders with.\n\nFor more Details how to set Images you can find [here](https://phpoffice.github.io/PHPWord/usage/template.html#setimagevalue)\n\n```php\nnamespace App\\Http\\Export;\n\nuse Santwer\\Exporter\\Concerns\\FromWordTemplate;\nuse Santwer\\Exporter\\Concerns\\GlobalTokens;\nuse Santwer\\Exporter\\Concerns\\WithImages;\nuse Santwer\\Exporter\\Concerns\\TokensFromCollection;\nuse Illuminate\\Support\\Collection;\n\nclass FirstExport implements FromWordTemplate, TokensFromCollection, GlobalTokens, WithImages\n{\n    public function images(): array\n    {\n        return [\n            'CompanyLogo' =\u003e public_path('images/logo.jpg'),\n            'UserLogo' =\u003e 'path' =\u003e public_path('images/logo.jpg'), 'width' =\u003e 100, 'height' =\u003e 100, 'ratio' =\u003e false,\n            'image1' =\u003e function () {\n                return [\n                    'path' =\u003e public_path('images/image1.jpg'),\n                    'width' =\u003e 100,\n                    'height' =\u003e 100,\n                    'ratio' =\u003e false,\n                ];\n            },\n        ];\n    }\n    \n    public function items(): Collection\n    {\n        return collect([\n            \n        ]);\n    }\n\n    ...\n}\n\n```\n\n### Tables\n\nTo replace a table in a Word template, you can use the `WithTables` interface. This interface requires the implementation of the `tables` method, which should return an array of key-value pairs where keys represent placeholders in the Word template and values are the data to replace those placeholders with.\n\nNote: For export in pdf at least the headers need the width of the columns. Not settet column widths might not be shown.\n\n```php\nnamespace App\\Http\\Export;\n\nuse Santwer\\Exporter\\Concerns\\FromWordTemplate;\nuse Santwer\\Exporter\\Concerns\\GlobalTokens;\nuse Santwer\\Exporter\\Concerns\\WithTables;\nuse Santwer\\Exporter\\Concerns\\TokensFromCollection;\nuse Illuminate\\Support\\Collection;\n\nclass FirstExport implements FromWordTemplate, TokensFromCollection, GlobalTokens, WithTables\n{\n    public function tables(): array\n    {\n        return [\n            'table1' =\u003e function () {\n                return [\n                    'headers' =\u003e [['width' =\u003e 3000, 'text' =\u003e 'Name'], 'Email', 'Address'],\n                    'rows' =\u003e [\n                        ['Jane Smith', 'jane@smith.com', 'Main Street'],\n                        ['Alice Johnson', 'alice@johnson.com', 'Elm Street'],\n                        ['Bob Williams', 'bob@williams.com', 'Oak Avenue'],\n                    ],\n                    'style' =\u003e [\n                        'borderSize' =\u003e 6,\n                        'borderColor' =\u003e 'green',\n                        'width' =\u003e 6000,\n                    ],\n                ];\n            },\n        ];\n    }\n    \n    public function items(): Collection\n    {\n        return collect([\n            \n        ]);\n    }\n\n    ...\n}\n    \n```\n\n## How to use in Query\nAdd Trait *Exportable*\n```php\nuse Santwer\\Exporter\\Exportable;\n\nclass User {\n    use Exportable;\n    ...\n}\n```\n\nAs default all Variables are available of the Model.\nAdd a Concern for special export fields.\n```php\nuse Santwer\\Exporter\\Exportable;\nuse Santwer\\Exporter\\Concerns\\HasTokens;\n...\n\nclass User implements HasTokens {\n    use Exportable;\n    ...\n    public function exportTokens(): array\n    {\n        return [\n            'name'  =\u003e $this-\u003ename,\n            'email' =\u003e $this-\u003eemail,\n        ];\n    }\n}\n```\n\nYou can add a fixed Template for each Model.\n```php\nuse Santwer\\Exporter\\Exportable;\nuse Santwer\\Exporter\\Concerns\\HasTemplate;\n...\n\nclass User implements HasTemplate {\n    use Exportable;\n    ...\n    public function exportTemplate(): string\n    {\n        return '/template.docx';\n    }\n}\n```\n\nYou can also define own Blocknames for the use of the Model in a template. \n```php\nuse Santwer\\Exporter\\Exportable;\n...\n\nclass User implements HasTemplate {\n    use Exportable;\n    ...\n    protected $exportBlock = 'customer';\n}\n```\n\n### Basic Export\n\nexport() gives download response back.\n```php\nreturn User::where(...)\n        -\u003etemplate('templatefile.docx')\n        -\u003eexport();\n```\n\nIf you defined export template in Model.\n```php\nreturn User::where(...)\n        -\u003eexport();\n```\n\n\n```php\nreturn User::where(...)\n        -\u003etemplate('templatefile.docx')\n        -\u003estore('storage/path');\n```\n\n```php\nreturn User::where(...)\n        -\u003etemplate('templatefile.docx')\n        -\u003estoreAs('storage/path', 'name.docx');\n```\nIt's also possible to set Export-Command after Executing the query or on a Model after Find-Command\n```php\nreturn User::where(...)\n        -\u003efirst()\n        -\u003eexport('filename.docx', ['template' =\u003e' templatefile.docx']);\n```\n```php\nreturn User::find(1234)\n        -\u003eexport('filename.docx', ['template' =\u003e' templatefile.docx']);\n```\n\n### Export as PDF\nGenerally with the option format = pdf it is possible to export pdf. \nIt is important that libreOffice is installed for that actions.\n```php\nreturn User::where(...)\n        -\u003etemplate('templatefile.docx')\n        -\u003eexport(['format' =\u003e 'pdf']);\n```\nFor short terms it is possible to call Export functions as PDF\n```php\nreturn User::where(...)\n        -\u003eexportPdf();\n```\n```php\nreturn User::where(...)\n        -\u003eexportFirstPdf();\n```\n\n\n### Autoloading Relations\n\nBefore exporting, the Package is checking for defined Relations.\nIf there is no related Variable it will automatically remove unneeded relations. \nThis behavior can be changed within the config. For that it is needed to set up a config File exporter.php in config/\n\n```php\nreturn [\n    'removeRelations' =\u003e false,\n]\n```\n\nAlso is the Package checking for relations that are not loaded yet. It will automatically load the Relations before exporting.\nTherefore, it is possible to reduce the Export-Code from \n```php\nreturn User::with('posts')\n        -\u003ewith('posts.comments')\n        -\u003ewith('posts.comments.user')\n        -\u003etemplate('templatefile.docx')\n        -\u003eexport();\n```\nto \n```php\nreturn User::template('templatefile.docx')-\u003eexport();\n```\nIf the Relation is already loaded it will not be affected. \n\n### Variables\n\nIt is possible to set up variables which are not affected by the Model or Query.\n```php\nuse Santwer\\Exporter\\Processor\\GlobalVariables;\n...\n       GlobalVariables::setVariable('Date', now()-\u003eformat('d.m.Y'));\n```\n\n```php\nuse Santwer\\Exporter\\Processor\\GlobalVariables;\n...\n      GlobalVariables::setVariables([\n          'Time' =\u003e  now()-\u003eformat('H:i'),\n          'Date' =\u003e  now()-\u003eformat('Y-m-d'),\n      ]);\n```\n\n### Template Variables/Blocks\n\nIn the template the package always looks for loops/Blocks (except for Global Variables). \nBy Default the Blockname is the name of the table. It is also possible to use an own name for that. \n```php\nuse Santwer\\Exporter\\Exportable;\n...\n\nclass User implements HasTemplate {\n    use Exportable;\n    ...\n    protected $exportBlock = 'customer';\n}\n```\n\nTo export Customers with Name and e-mail addresses, it is needed to add the Block.\n```word\n${customer}\n    ${name}, ${email}\n${/customer}\n```\n\nIf there is a Relation within the customer.\n\n```php\nuse Santwer\\Exporter\\Exportable;\n...\n\nclass User implements HasTemplate {\n    use Exportable;\n    ...\n    protected $exportBlock = 'customer';\n    \n    public function deliveryAddress()\n    {\n        return $this-\u003ehasOne(Address::class);\n    }\n\n}\n```\n```word\n${customer}\n    ${name}, ${email}\n    ${deliveryAddress.street}, ${deliveryAddress.city} ${deliveryAddress.postcode} \n${/customer}\n```\n\nIf there is a Relation with a collection of Entries.\n\n```php\nuse Santwer\\Exporter\\Exportable;\n...\n\nclass User implements HasTemplate {\n    use Exportable;\n    ...\n    protected $exportBlock = 'customer';\n    \n    public function orders()\n    {\n        return $this-\u003ehasOne(Order::class);\n    }\n    \n    public function deliveryAddress()\n    {\n        return $this-\u003ehasOne(Address::class);\n    }\n\n}\n```\n```word\n${customer}\n    ${name}, ${email}\n    ${orders}\n        ${orders.product_id} ${orders.order_date}\n        ${deliveryAddress.street}, ${deliveryAddress.city} ${deliveryAddress.postcode} \n    ${/orders}\n${/customer}\n```\n\nFor each Relation it will add up its relation block name.\n\n\n### Relation Variable with Condition\n\nIt is possible to define Variables which are Related to many Entries. Therefore, you can \nreduce it to one relation and get a certain Value in the relation.\n\nIt will only select one entry.\n\n```word\n${customer}\n    ${name}, ${email}\n    Order 15: ${orders:15.product_id} ${orders:15.order_date}\n${/customer}\n```\n\nHowever, you can set up one where condition to get the entry. \n```word\n${customer}\n    ${name}, ${email}\n    Order 15: ${orders:product_id,=,4.product_id} ${orders:product_id,=,4.order_date}\n${/customer}\n```\n\nIf the Entry is not found the Values of the Model will be null.\n\n## Template\n\nThe Template should be DOCX or DOC. The File will be cloned and saved in the sys_temp_folder as long it has no store option.\nFor PDF exports it is needed to use LibreOffice. Therefore, the soffice command needs to be executable.\n\nFor the Templateprocessing it uses [phpoffice/phpword](https://github.com/PHPOffice/PHPWord)\nMore Infos you can find [here](https://phpword.readthedocs.io/en/latest/templates-processing.html)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsantwer%2Fexporter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsantwer%2Fexporter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsantwer%2Fexporter/lists"}