PDF templates / Business Letter

Personal Letter

Lighter semi-formal letter with warmer typography, minimal chrome, centred dateline, simple salutation and closing. Skips reference numbers and formal enclosures — the body carries the letter.

First page of the Personal Letter template, rendered with its sample data
letter-personal.pdfpage 1 of 2

DSL source

The whole template. Learn the language in the template DSL guide.

js
const template = doc({ size: "A4", title: "Letter — {{reference}}", styles: {
    ".letterhead-name": { "font-family": "Inter", "font-size": 16, "font-weight": "bold", color: "#2c2416" },
    ".letterhead-title": { "font-family": "Inter", "font-size": 9, color: "#7a6f5c", "font-style": "italic" },
    ".letterhead-contact": { "font-family": "Inter", "font-size": 8.5, color: "#5a5040" },
    ".meta-label": { "font-family": "Inter", "font-size": 8, color: "#8a7a5c", "font-weight": "bold" },
    ".meta-value": { "font-family": "Inter", "font-size": 10, color: "#2c2416" },
    ".recipient-name": { "font-family": "Inter", "font-size": 10.5, "font-weight": "bold", color: "#2c2416" },
    ".recipient-line": { "font-family": "Inter", "font-size": 10, color: "#3a3528", "line-height": 1.35 },
    ".subject-line": { "font-family": "Inter", "font-size": 11, "font-weight": "bold", color: "#2c2416" },
    ".salutation": { "font-family": "Inter", "font-size": 11, color: "#2c2416" },
    ".body-para": { "font-family": "Inter", "font-size": 10.5, color: "#2c2416", "line-height": 1.5, align: "justify" },
    ".closing-text": { "font-family": "Inter", "font-size": 11, color: "#2c2416" },
    ".sig-name": { "font-family": "Inter", "font-size": 11, "font-weight": "bold", color: "#2c2416" },
    ".sig-title": { "font-family": "Inter", "font-size": 9.5, color: "#5a5040", "font-style": "italic" },
    ".sig-org": { "font-family": "Inter", "font-size": 9.5, color: "#5a5040" },
    ".enc-heading": { "font-family": "Inter", "font-size": 9, "font-weight": "bold", color: "#8a7a5c" },
    ".enc-item": { "font-family": "Inter", "font-size": 9.5, color: "#3a3528", "line-height": 1.4 },
  }, padding: [40, 50, 40, 50] },
  hdr(
    r({ margin: [0, 0, 0, 4] },
      col("70%",
        s(".letterhead-name", "{{sender.name}}"),
        s(".letterhead-title", "{{sender.title}} · {{sender.org}}"),
      ),
      col("30%", { align: "right" },
        s(".letterhead-contact", "{{sender.address1}}"),
        s(".letterhead-contact", "{{sender.address2}}"),
        s(".letterhead-contact", "{{sender.phone}}"),
        s(".letterhead-contact", "{{sender.email}}"),
      ),
    ),
    hr(6, "#c9b896"),
  ),

  gap(6),

  r(
    col("60%",
      s(".meta-label", "DATE"),
      s(".meta-value", "{{date}}"),
    ),
    col("40%", { align: "right" },
      s(".meta-label", "REFERENCE"),
      s(".meta-value", "{{reference}}"),
    ),
  ),

  gap(14),

  s(".meta-label", "ADDRESSED TO"),
  gap(3),
  s(".recipient-name", "{{recipient.name}}"),
  s(".recipient-line", "{{recipient.title}}"),
  when("recipient.org != ''", s(".recipient-line", "{{recipient.org}}")),
  s(".recipient-line", "{{recipient.address1}}"),
  when("recipient.address2 != ''", s(".recipient-line", "{{recipient.address2}}")),
  when("recipient.address3 != ''", s(".recipient-line", "{{recipient.address3}}")),

  gap(16),

  s(".subject-line", "Re: {{subject}}"),

  gap(12),

  s(".salutation", "{{salutation}},"),

  gap(8),

  each("para in body",
    s(".body-para", { margin: [0, 0, 10, 0] }, "{{para}}"),
  ),

  gap(6),

  s(".closing-text", "{{closing}},"),

  gap(36),

  s(".sig-name", "{{signatureName}}"),
  s(".sig-title", "{{signatureTitle}}"),
  s(".sig-org", "{{signatureOrg}}"),

  gap(18),

  hr(0, "#d9cdb5"),
  gap(6),

  r(
    col("50%",
      s(".enc-heading", "ENCLOSURES"),
      gap(3),
      each("enc in enclosures",
        s(".enc-item", "· {{enc}}"),
      ),
    ),
    col("50%",
      s(".enc-heading", "CC"),
      gap(3),
      each("name in cc",
        s(".enc-item", "· {{name}}"),
      ),
    ),
  ),

  ftrPages("{{sender.org}} · Ref {{reference}}"),
);

const sampleData = {
  date: "20 April 2026",
  reference: "HR-2026-1184",
  subject: "Offer of Employment — Senior Product Designer",
  salutation: "Dear Ms. Patel",
  body: [
    "It is with great pleasure that I extend this formal offer of employment for the position of Senior Product Designer at Northline Studios, reporting to the Head of Design. Your portfolio review, technical interview, and conversations with the design leadership team were overwhelmingly positive, and we are excited about the perspective you will bring to our growing team.",
    "Your starting annual salary will be $142,000, paid semi-monthly, along with a signing bonus of $8,000 payable after ninety days of continuous employment. You will also be eligible to participate in our employee stock option plan, comprehensive health and dental benefits, a 4% matched retirement contribution, and our annual professional development stipend of $2,500.",
    "Your proposed start date is Monday, 18 May 2026, at our Seattle office, with the option to work remotely up to two days per week. Please review the enclosed offer packet, which includes the full employment agreement, benefits summary, and relocation assistance details.",
    "To accept this offer, please sign and return the employment agreement along with the completed I-9 documentation no later than Friday, 1 May 2026. If any of the terms need clarification or adjustment, please don't hesitate to reach out to me directly — we want this transition to work well for you.",
    "We are genuinely looking forward to welcoming you to the team. Congratulations again, and please let me know if there is anything I can do to make the next few weeks smoother."
  ],
  closing: "Warm regards",
  signatureName: "Eleanor M. Whitfield",
  signatureTitle: "Chief People Officer",
  signatureOrg: "Northline Studios, Inc.",
  sender: {
    name: "Eleanor M. Whitfield",
    title: "Chief People Officer",
    org: "Northline Studios, Inc.",
    address1: "1100 Fifth Avenue, Suite 820",
    address2: "Seattle, WA 98101",
    phone: "(206) 555-0142",
    email: "eleanor.whitfield@northlinestudios.com"
  },
  recipient: {
    name: "Ms. Anika Patel",
    title: "Senior Product Designer (candidate)",
    org: "",
    address1: "742 Evergreen Terrace",
    address2: "Apartment 4B",
    address3: "Portland, OR 97209"
  },
  cc: [
    "Marcus Chen, Head of Design",
    "Priya Raman, Design Operations"
  ],
  enclosures: [
    "Employment Agreement (12 pages)",
    "Benefits Summary 2026",
    "Relocation Assistance Policy",
    "Form I-9 and W-4"
  ]
};

Sample data

json
{
  "date": "20 April 2026",
  "reference": "HR-2026-1184",
  "subject": "Offer of Employment — Senior Product Designer",
  "salutation": "Dear Ms. Patel",
  "body": [
    "It is with great pleasure that I extend this formal offer of employment for the position of Senior Product Designer at Northline Studios, reporting to the Head of Design. Your portfolio review, technical interview, and conversations with the design leadership team were overwhelmingly positive, and we are excited about the perspective you will bring to our growing team.",
    "Your starting annual salary will be $142,000, paid semi-monthly, along with a signing bonus of $8,000 payable after ninety days of continuous employment. You will also be eligible to participate in our employee stock option plan, comprehensive health and dental benefits, a 4% matched retirement contribution, and our annual professional development stipend of $2,500.",
    "Your proposed start date is Monday, 18 May 2026, at our Seattle office, with the option to work remotely up to two days per week. Please review the enclosed offer packet, which includes the full employment agreement, benefits summary, and relocation assistance details.",
    "To accept this offer, please sign and return the employment agreement along with the completed I-9 documentation no later than Friday, 1 May 2026. If any of the terms need clarification or adjustment, please don't hesitate to reach out to me directly — we want this transition to work well for you.",
    "We are genuinely looking forward to welcoming you to the team. Congratulations again, and please let me know if there is anything I can do to make the next few weeks smoother."
  ],
  "closing": "Warm regards",
  "signatureName": "Eleanor M. Whitfield",
  "signatureTitle": "Chief People Officer",
  "signatureOrg": "Northline Studios, Inc.",
  "sender": {
    "name": "Eleanor M. Whitfield",
    "title": "Chief People Officer",
    "org": "Northline Studios, Inc.",
    "address1": "1100 Fifth Avenue, Suite 820",
    "address2": "Seattle, WA 98101",
    "phone": "(206) 555-0142",
    "email": "eleanor.whitfield@northlinestudios.com"
  },
  "recipient": {
    "name": "Ms. Anika Patel",
    "title": "Senior Product Designer (candidate)",
    "org": "",
    "address1": "742 Evergreen Terrace",
    "address2": "Apartment 4B",
    "address3": "Portland, OR 97209"
  },
  "cc": [
    "Marcus Chen, Head of Design",
    "Priya Raman, Design Operations"
  ],
  "enclosures": [
    "Employment Agreement (12 pages)",
    "Benefits Summary 2026",
    "Relocation Assistance Policy",
    "Form I-9 and W-4"
  ]
}

Render it with your data

Any API key can render this template by its ID. This call uses the sample data; add a data object to use your own. See the API reference.

bash
curl -X POST https://makespdf.com/api/v1/render \
  -H "Authorization: Bearer $MAKESPDF_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"templateId": "letter-personal"}' \
  -o output.pdf