I hate handwritten notes. So the first thing I do when I work in a new place is make a door sign like “We’ll be back in a minute.”

But what if your colleague from another campsite sees it and wants one too? And then their colleague?

I’m too lazy to make signs for the whole country, and honestly, my heart breaks when someone scribbles a phone number on my carefully designed sign. The examples in this post are quick mock-ups, just to show how it works. Want a version that won’t make your guests cry? Hire me for the real thing. 😉

Python to the rescue!

You can see the script in action on my Streamlit page : https://rcsmit.streamlit.app/?choice=58

What It Does

This tool:

  • Loads a branded template PDF from GitHub
  • Inserts a custom phone number and camping name/code on each page
  • Positions the text precisely using per-page Y-coordinates
  • Applies custom fonts (like Jupiteroid)
  • Lets you choose your own colors
  • Can support batch generation (from code or spreadsheet) (after modification)
  • Runs entirely in your browser with Streamlit, no manual PDF editing needed

To follow this tutorial you will need to know how to work and run a script in Python

Step 1: Make a template

You can create a template in Illustrator, Corel Vector (formerly Gravit Designer), or even Canva.
Just make sure there’s enough space for the phone number and camping code and leave those areas blank. The script has been tested for portrait A4, but it will work probably on all sizes and orientations.

Save the result as a PDF, and upload it to GitHub or a file host if needed.

Step 2 : Find a font

Look for .ttf fonts (TrueType), these work with PyMuPDF.

I used Jupiteroid, an open domain font, but you should try to use your company’s official font for visual consistency.

Not sure which font your company uses? Open one of their PDFs in Illustrator or Corel Vector, it will show you the exact font name.

Step 3: Install the packages

The script uses streamlit, pymupdf and requests.

pip install streamlit pymupdf requests

Step 4: Copy and adapt the script

It can be found on my github : https://github.com/rcsmit/streamlit_scripts/blob/main/public_doorsigns.py

You might want to change these variables

  • y_position_dict_str = "{0: 570, 1: 645, 2: 665, 3: 600, 4: 480, 5: 690, 6: 670}" – the vertical position (in points) of the phone number per page (remember: page 1 = index 0)
  • x_position_camping_name = 30 – left offset for the camping code
  • y_position_camping_name = 810 – vertical position for the camping code

Tip: Match Text Positions to Script

When designing, it’s helpful to note down the Y-positions in centimeters. In the Python script, these are converted to points: 1 cm = 28.35 points

So if you want the phone number to appear 6.5 cm from the top, set: y = 6.5 * 28.35 ≈ 184.3

Step 5: Run the script

Use streamlit run public_doorsigns.py

Step 6 : Fill in the phone number and camping name/code

Now you can use the interface:

  • Enter the camping name/code
  • Enter the phone number
  • Choose your colors for both text elements

Step 7 : Download the result

Just hit the download button

Step 8 : Enjoy the result

Here you go 🙂

Also for housenumbers and parking signs!

You can also use/adapt the script for housenumbers or parking signs. Isn’t it cool?

Little remark

The process is fully automated. Some fonts may cause numbers or text to appear misaligned if certain characters are narrower or shorter. It also doesn’t account for things like overshoot.

Keep that in mind when using the script and templates. As you see above, the misalignment is not there when you put everything on a horizontal “line”.

Need Customization?

Want to:

  • Add logos or QR codes?
  • Adjust font size or page layouts?
  • Pull phone numbers dynamically from a spreadsheet?

Get in touch with me!