Files
n8nworkflows.xyz/workflows/Convert HTML to PDF and Compress Files with CustomJS API-3869/readme-3869.md
nusquama 51e8181499 creation
2025-11-12 18:41:51 +01:00

208 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 workflows logic, nodes, configurations, and setup instructions to enable advanced users and AI agents to understand, reproduce, and maintain the workflow effectively.