mirror of
https://github.com/khoaliber/n8nworkflows.xyz.git
synced 2026-04-22 09:08:03 +00:00
creation
This commit is contained in:
+208
@@ -0,0 +1,208 @@
|
||||
Convert HTML to PDF and Compress Files with CustomJS API
|
||||
|
||||
https://n8nworkflows.xyz/workflows/convert-html-to-pdf-and-compress-files-with-customjs-api-3869
|
||||
|
||||
|
||||
# Convert HTML to PDF and Compress Files with CustomJS API
|
||||
|
||||
### 1. Workflow Overview
|
||||
|
||||
This workflow demonstrates how to convert HTML content into a PDF file, compress the resulting PDF, and handle PDF files accessed via URLs by compressing them as well. It leverages the PDF Toolkit nodes from the CustomJS API, requiring a self-hosted n8n instance and a valid CustomJS API key.
|
||||
|
||||
The workflow is logically split into three main blocks:
|
||||
|
||||
- **1.1 Input Trigger and HTML to PDF Conversion:** Starts the workflow manually, converts hardcoded HTML content into a PDF using the CustomJS HTML to PDF node.
|
||||
|
||||
- **1.2 PDF File Compression (from HTML Conversion):** Compresses the PDF generated by the HTML to PDF conversion.
|
||||
|
||||
- **1.3 PDF Compression from URL:** Accepts a PDF URL, fetches the PDF, and compresses it, enabling handling of existing PDF files from external sources.
|
||||
|
||||
---
|
||||
|
||||
### 2. Block-by-Block Analysis
|
||||
|
||||
#### 2.1 Input Trigger and HTML to PDF Conversion
|
||||
|
||||
- **Overview:**
|
||||
This block initiates the workflow manually and converts a static HTML snippet into a PDF document.
|
||||
|
||||
- **Nodes Involved:**
|
||||
- When clicking ‘Test workflow’ (Manual Trigger)
|
||||
- HTML to PDF (CustomJS HTML to PDF node)
|
||||
|
||||
- **Node Details:**
|
||||
|
||||
- **When clicking ‘Test workflow’**
|
||||
- Type: Manual Trigger
|
||||
- Role: Starts workflow on user action.
|
||||
- Configuration: Default manual trigger, no parameters required.
|
||||
- Inputs: None (start node)
|
||||
- Outputs: Connected to both HTML to PDF and Set PDF URL nodes.
|
||||
- Edge Cases: None expected; user must manually trigger workflow.
|
||||
|
||||
- **HTML to PDF**
|
||||
- Type: CustomJS PDF Toolkit - HTML to PDF node
|
||||
- Role: Converts given HTML string into a PDF binary.
|
||||
- Configuration:
|
||||
- `htmlInput` parameter is set statically to `<h1>Hello World</h1>`.
|
||||
- Uses CustomJS API credentials for authentication.
|
||||
- Inputs: Receives trigger from manual node.
|
||||
- Outputs: Sends generated PDF binary data to Compress PDF file node.
|
||||
- Edge Cases:
|
||||
- API authentication failure if API key invalid or missing.
|
||||
- HTML input too large or malformed could cause conversion errors or timeouts.
|
||||
- Version Requirements: CustomJS PDF Toolkit nodes require self-hosted n8n and valid API key.
|
||||
|
||||
---
|
||||
|
||||
#### 2.2 PDF File Compression (from HTML Conversion)
|
||||
|
||||
- **Overview:**
|
||||
Compresses the PDF generated from the HTML to PDF conversion, optimizing file size.
|
||||
|
||||
- **Nodes Involved:**
|
||||
- Compress PDF file (CustomJS Compress PDF node)
|
||||
|
||||
- **Node Details:**
|
||||
|
||||
- **Compress PDF file**
|
||||
- Type: CustomJS PDF Toolkit - Compress PDF node
|
||||
- Role: Compresses PDF data received from HTML to PDF node.
|
||||
- Configuration: Default compression settings; no additional parameters specified.
|
||||
- Inputs: Receives PDF binary data from HTML to PDF node.
|
||||
- Outputs: End node (no further nodes connected).
|
||||
- Credentials: Uses the same CustomJS API key credentials.
|
||||
- Edge Cases:
|
||||
- Compression API failure or timeout.
|
||||
- Large PDF files may exceed API limits.
|
||||
- Version Requirements: Same as above.
|
||||
|
||||
---
|
||||
|
||||
#### 2.3 PDF Compression from URL
|
||||
|
||||
- **Overview:**
|
||||
Handles compressing a PDF file accessible via a URL. First sets a PDF URL, then compresses the PDF retrieved from that URL.
|
||||
|
||||
- **Nodes Involved:**
|
||||
- Set PDF URL (Code node)
|
||||
- Compress PDF file1 (CustomJS Compress PDF node)
|
||||
|
||||
- **Node Details:**
|
||||
|
||||
- **Set PDF URL**
|
||||
- Type: Code (JavaScript) node
|
||||
- Role: Defines a JSON output containing a `path` key with the PDF URL string.
|
||||
- Configuration:
|
||||
- Hardcoded to return `{ "path": "https://www.nlbk.niedersachsen.de/download/164891/Test-pdf_3.pdf.pdf" }`.
|
||||
- Inputs: Triggered by manual trigger node.
|
||||
- Outputs: JSON object with URL path to Compress PDF file1 node.
|
||||
- Edge Cases:
|
||||
- URL may be inaccessible or invalid, leading to failure in the next node.
|
||||
- Version Requirements: n8n v0.146.0+ recommended for Code node v2.
|
||||
|
||||
- **Compress PDF file1**
|
||||
- Type: CustomJS PDF Toolkit - Compress PDF node
|
||||
- Role: Compresses the PDF file located at the given URL.
|
||||
- Configuration:
|
||||
- `resource` parameter set to `"url"`.
|
||||
- `field_name` parameter set dynamically via expression `={{ $json.path }}`, indicating the URL to fetch and compress.
|
||||
- Inputs: Receives JSON with URL from Set PDF URL node.
|
||||
- Outputs: End node.
|
||||
- Credentials: Uses the same CustomJS API key.
|
||||
- Edge Cases:
|
||||
- Network failure or URL inaccessible.
|
||||
- API errors during compression.
|
||||
- Version Requirements: Same as above.
|
||||
|
||||
---
|
||||
|
||||
### 3. Summary Table
|
||||
|
||||
| Node Name | Node Type | Functional Role | Input Node(s) | Output Node(s) | Sticky Note |
|
||||
|-------------------------|----------------------------------|---------------------------------------------|-----------------------------|-----------------------------|---------------------------------------------------------------------------------------------|
|
||||
| When clicking ‘Test workflow’ | Manual Trigger | Starts workflow manually | None | HTML to PDF, Set PDF URL | |
|
||||
| HTML to PDF | CustomJS HTML to PDF | Converts HTML input to PDF | When clicking ‘Test workflow’ | Compress PDF file | ### HTML to PDF<br>- Request HTML Data<br>- Convert HTML to PDF |
|
||||
| Compress PDF file | CustomJS Compress PDF | Compresses PDF from HTML to PDF conversion | HTML to PDF | None | ### Compress Pages from PDF<br>- Compress PDF as a binary file. |
|
||||
| Set PDF URL | Code | Outputs JSON with PDF URL | When clicking ‘Test workflow’ | Compress PDF file1 | ### Set PDF URL<br>- Request PDF from URL. |
|
||||
| Compress PDF file1 | CustomJS Compress PDF | Compresses PDF file from provided URL | Set PDF URL | None | ### Compress Pages from PDF<br>- Compress PDF as a binary file. |
|
||||
| Sticky Note | Sticky Note | Notes for HTML to PDF block | None | None | ### HTML to PDF<br>- Request HTML Data<br>- Convert HTML to PDF |
|
||||
| Sticky Note1 | Sticky Note | Notes for compressing PDF pages | None | None | ### Compress Pages from PDF<br>- Compress PDF as a binary file. |
|
||||
| Sticky Note2 | Sticky Note | Notes for setting PDF URL | None | None | ### Set PDF URL<br>- Request PDF from URL. |
|
||||
| Sticky Note3 | Sticky Note | Notes for compressing PDF from URL block | None | None | ### Compress Pages from PDF<br>- Compress PDF as a binary file. |
|
||||
|
||||
---
|
||||
|
||||
### 4. Reproducing the Workflow from Scratch
|
||||
|
||||
1. **Create a Manual Trigger node**
|
||||
- Type: Manual Trigger
|
||||
- Position: Starting point
|
||||
- No parameters needed.
|
||||
|
||||
2. **Add a CustomJS HTML to PDF node**
|
||||
- Node Name: `HTML to PDF`
|
||||
- Type: `@custom-js/n8n-nodes-pdf-toolkit.html2Pdf`
|
||||
- Parameters:
|
||||
- Set `htmlInput` field to `<h1>Hello World</h1>` (or your desired HTML content).
|
||||
- Credentials:
|
||||
- Configure with your CustomJS API key credentials (create under Credentials > CustomJS API).
|
||||
- Connect: Output of Manual Trigger → Input of HTML to PDF.
|
||||
|
||||
3. **Add a CustomJS Compress PDF node for local PDF compression**
|
||||
- Node Name: `Compress PDF file`
|
||||
- Type: `@custom-js/n8n-nodes-pdf-toolkit.CompressPDF`
|
||||
- Parameters: Default (compress the incoming binary PDF).
|
||||
- Credentials: Use the same CustomJS API key credentials.
|
||||
- Connect: Output of HTML to PDF → Input of Compress PDF file.
|
||||
|
||||
4. **Add a Code node to set the PDF URL**
|
||||
- Node Name: `Set PDF URL`
|
||||
- Type: Code (JavaScript)
|
||||
- Parameters: Insert the following JS code:
|
||||
```javascript
|
||||
return {
|
||||
json: {
|
||||
path: "https://www.nlbk.niedersachsen.de/download/164891/Test-pdf_3.pdf.pdf"
|
||||
}
|
||||
};
|
||||
```
|
||||
- Connect: Output of Manual Trigger → Input of Set PDF URL.
|
||||
|
||||
5. **Add a CustomJS Compress PDF node for URL-based compression**
|
||||
- Node Name: `Compress PDF file1`
|
||||
- Type: `@custom-js/n8n-nodes-pdf-toolkit.CompressPDF`
|
||||
- Parameters:
|
||||
- Set `resource` to `"url"`.
|
||||
- Set `field_name` to expression `={{ $json.path }}` (to use the URL from Code node).
|
||||
- Credentials: Use the same CustomJS API key credentials.
|
||||
- Connect: Output of Set PDF URL → Input of Compress PDF file1.
|
||||
|
||||
6. **Verify all nodes are correctly connected:**
|
||||
- Manual Trigger outputs to both HTML to PDF and Set PDF URL nodes.
|
||||
- HTML to PDF outputs to Compress PDF file.
|
||||
- Set PDF URL outputs to Compress PDF file1.
|
||||
|
||||
7. **Set up CustomJS API Credentials:**
|
||||
- Go to Credentials in n8n.
|
||||
- Create new credentials for CustomJS API.
|
||||
- Paste your API key obtained from https://www.customjs.space (your profile page > Show API key).
|
||||
- Assign these credentials to all CustomJS nodes.
|
||||
|
||||
8. **Save and activate workflow.**
|
||||
- Test by clicking ‘Execute Workflow’ in the Manual Trigger node.
|
||||
|
||||
---
|
||||
|
||||
### 5. General Notes & Resources
|
||||
|
||||
| Note Content | Context or Link |
|
||||
|-----------------------------------------------------------------------------------------------------|--------------------------------------------------------|
|
||||
| Community nodes like `@custom-js/n8n-nodes-pdf-toolkit` require self-hosted n8n instances. | https://docs.n8n.io/integrations/community-nodes/ |
|
||||
| Obtain CustomJS API key by signing up and checking your profile on https://www.customjs.space | https://www.customjs.space |
|
||||
| This workflow can be triggered by other means, e.g., Webhook, and output adapted accordingly. | Replace Manual Trigger with Webhook and add response nodes. |
|
||||
| For large files (>6MB), consider additional logic to handle timeouts or API limits in CustomJS. | Best practice for production workflows |
|
||||
|
||||
---
|
||||
|
||||
This document fully describes the workflow’s logic, nodes, configurations, and setup instructions to enable advanced users and AI agents to understand, reproduce, and maintain the workflow effectively.
|
||||
Reference in New Issue
Block a user