anaksor-ocr
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
An n8n workflow that takes a resume PDF sent to a Telegram bot and has an OpenAI model sort it into sections. It builds a tidy HTML page, prints it to PDF with Gotenberg and sends the PDF back.
Telegram resume turned into a clean PDF with Gotenberg is an n8n workflow in the Business category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.
A PDF sent to a Telegram bot
It starts when someone sends your bot a message:
A tidy PDF of the resume in the same Telegram chat
What you need before you start.
Chat
Takes the PDF the user sends and delivers the new PDF.
NeedsA bot token from BotFather, in a Telegram credential, and your chat ID
Chat model
Sorts the resume text into sections with gpt-5.6-terra.
NeedsAn OpenAI API key, in an OpenAI credential
PDF printer
Prints the built HTML page to a PDF.
NeedsA running Gotenberg server that n8n can reach
Checked by Mindket on 13 Nov 2026
This n8n workflow turns a resume PDF into a new, tidy PDF through Telegram. You send the PDF to your bot. The workflow reads its text and asks OpenAI’s gpt-5.6-terra to sort it into personal details, technologies, jobs, education, projects and volunteering. Small code steps turn each section into HTML. Gotenberg prints the page to a PDF, and the bot sends it back. Thirty-three nodes do the work, beside ten sticky notes.
Recruiters and career coaches who want every resume in one clean layout. Skip it for scanned resumes. The workflow reads the PDF’s text layer, so a PDF that holds only pictures of pages gives it nothing to read.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Recruitment | Recruiters | Put resumes from many candidates into one layout | A recruiter forwards a candidate’s PDF to the bot and gets back a clean copy to share with a client. |
| Career coaching | Coaches | Tidy a client’s resume before an application | A coach sends a draft and gets the neat version back in the same chat. |
| Education | Career offices | Give students a standard format | An office runs student resumes through the bot before a job fair. |
| Staffing | Agency staff | Prepare resumes for a client without each candidate’s own styling | A coordinator converts a pile of PDFs one after the other in a private chat. |
You need good n8n skills and three services: Telegram, OpenAI and a Gotenberg server. Telegram sends each message to your n8n over HTTPS, so n8n needs a public address.
Any n8n that Telegram can reach over HTTPS will run it, next to a Gotenberg server that n8n can call.
Generate plain PDF doc with a call to a different serviceDownload saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Three services are involved.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or on a server of your own with a public HTTPS address |
| Telegram | A bot made with BotFather, its token in a Telegram credential, and your own chat ID |
| OpenAI | An API key, saved in an OpenAI credential |
| Gotenberg | A running Gotenberg server that n8n can reach |
| A resume | A PDF with a text layer, up to 20 MB |
workflow.json.Generate plain PDF doc. The file points at http://gotenberg:3000, which works when both run in one Docker network.Telegram trigger, Get file and Send PDF to the user.OpenAI Chat Model and OpenAI Chat Model1.Auth, in place of 0. To find it, send your bot a message and read message.chat.id in the trigger’s output.Send a PDF file to the bot. After a short wait the bot sends back a PDF named after the person on the resume. The bot ignores the /start message and any message from a chat other than yours.
| To change | Where |
|---|---|
| The fields it extracts | jsonSchema in Structured Output Parser |
| The instruction to the model | The message in Parse resume data |
| The layout of each section | The HTML in the six section nodes and the four Convert … to HTML code nodes |
| The order of the sections | The text in Set final data |
| The model | model in OpenAI Chat Model and OpenAI Chat Model1 |
| The file name | fileName in Send PDF to the user |
| Who may use the bot | The chat ID in Auth |
A recruiter sends a two page PDF resume to the bot.
The bot replies with a PDF named after the candidate, such as jane-doe.pdf. All six sections sit in a plain layout.
If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. Gotenberg is a small server that prints web pages to PDF. Here it turns the page the workflow builds into a PDF file.
For experts. The node Parse resume data is a Basic LLM Chain version 1.3. An auto-fixing output parser sits in front of a structured one, so a malformed answer goes back to the model for repair. The five Merge nodes join the six sections in multiplex mode.
| Node | What it does | What to know |
|---|---|---|
Telegram trigger | Starts the run for each message the bot gets | Telegram needs an HTTPS address for the webhook |
Auth | Lets only the chat with your ID through | The file holds 0 as a placeholder, so nothing passes until you change it |
Extract text from PDF | Reads the text layer of the PDF | A scanned resume gives it no text |
Parse resume data | Asks OpenAI for the resume as JSON that fits the schema | The model runs in JSON mode, and the schema lists the fields |
Convert to HTML | Turns the page text into a file called index.html | The text is base64, which this node version expects by default |
Generate plain PDF doc | Posts the file to Gotenberg’s Chromium route and receives the PDF | Gotenberg expects the page to be named index.html |
Send PDF to the user | Sends the PDF back in the chat that asked | The file name comes from the name on the resume, with its first space replaced by a hyphen |
The model was replaced and the sticky notes that promoted outside channels were dropped. Mindket did not run this workflow.
gpt-4-turbo-preview, which points to gpt-4-0125-preview. OpenAI’s deprecations page, read on 12 November 2026, lists that snapshot as shut down on 26 March 2026. Mindket’s copy uses gpt-5.6-terra in both chat nodes. The second one, for the auto-fixing parser, had no model set, so n8n’s default gpt-5-mini would have run, which OpenAI shuts down on 11 December 2026linkedin and foreign_languages are in the schema, but the page does not show them/start must carry a documentAn n8n workflow that takes a resume PDF sent to a Telegram bot and has an OpenAI model sort it into sections. It builds a tidy HTML page, prints it to PDF with Gotenberg and sends the PDF back.
workflow.json: the workflow as n8n exports it, forty-three nodes. Thirty-three do the work and ten are sticky notes that label the steps. It holds no credential.README.md: these notes.gpt-4-turbo-preview, which points to gpt-4-0125-preview. OpenAI’s deprecations page, read on 12 November 2026, lists that snapshot as shut down on 26 March 2026. Mindket’s copy uses gpt-5.6-terra.gpt-5-mini, which OpenAI shuts down on 11 December 2026. It now uses gpt-5.6-terra too.workflow.json.Generate plain PDF doc. The file points at http://gotenberg:3000, which works when both run in one Docker network.Telegram trigger, Get file and Send PDF to the user.OpenAI Chat Model and OpenAI Chat Model1.Auth, in place of 0. To find it, send your bot a message and read message.chat.id in the trigger’s output.Telegram trigger starts the run for each message. Auth lets only your chat through, and Check if start message drops /start.Get file downloads the PDF, and Extract text from PDF reads its text.Parse resume data asks OpenAI for the resume as JSON. Auto-fixing Output Parser and Structured Output Parser check it against the schema.Set final data puts them in order.Convert raw to base64 and Convert to HTML save the page as index.html.Generate plain PDF doc posts the file to Gotenberg’s Chromium route and receives the PDF. Send PDF to the user sends it back in the chat.jsonSchema in Structured Output Parser.Parse resume data.Convert … to HTML code nodes.Set final data.model in OpenAI Chat Model and OpenAI Chat Model1.fileName in Send PDF to the user.Auth./forms/chromium/convert/html with the form field files, and requires the page to be named index.html.http://gotenberg:3000 in the file is a Docker service name. Change it if your Gotenberg runs elsewhere.linkedin and foreign_languages are in the schema, but the page does not show them./start must carry a document.Auth is a placeholder.NOTICE.md 654 B README.md 5 KB workflow.json 31 KB
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
Qwen · Kit
Qwen2.5-7B-Instruct as GGUF files in eight quantization sizes, to chat with locally through llama.cpp. For people who want a capable 7.6B model on their own co…
ACE-Step · Kit
Generates music from text with a 4B diffusion decoder, 50 steps and guidance control, aiming for higher audio quality than the base. For creators with a GPU of…
perplexity-ai · Kit
Picks the best option for a decision from text and images, such as which team should handle a request, with a probability for each choice, for developers who b…
numind · Kit
Reads documents as text or images and fills a JSON template with the fields you ask for, or converts the pages to Markdown. A 4B model for teams that process s…
nace-ai · Kit
Scores yes or no, multiple choice and rating questions about a document in one pass, with a probability for every option. An 8B decision model from Nace.AI tha…