PDF templates / Civic / Government
Notice of Public Hearing
Municipal notice of public hearing derived from published US and Canadian hearing notices: masthead with hearing meta box, proposal summary, property and request details, numbered participation steps with comment deadline and accommodation note, and publication certification with clerk sign-off. Renders as a tagged PDF/A-2A + PDF/UA-1 document.

DSL source
The whole template. Learn the language in the template DSL guide.
const template = doc(
{ size: "Letter", title: "{{jurisdiction}} Notice of Public Hearing — {{caseNumber}}", padding: [36, 40, 36, 40],
styles: {
".masthead": { "font-family": "Inter", "font-size": 20, "font-weight": "bold", color: "#0b3d91", "margin": [0, 0, 2, 0] },
".doc-kind": { "font-family": "Inter", "font-size": 13, "font-weight": "bold", color: "#1a1a1a", "margin": [0, 0, 2, 0] },
".doc-line": { "font-family": "Inter", "font-size": 10, color: "#333", "line-height": 1.4 },
".meta-label": { "font-family": "Inter", "font-size": 8, "font-weight": "bold", color: "#555" },
".meta-value": { "font-family": "Inter", "font-size": 9.5, color: "#1a1a1a" },
".notice-box": { "background-color": "#f0f4fa", "border": [1, 1, 1, 1], "border-color": "#0b3d91", padding: [8, 10, 8, 10] },
".notice-text": { "font-family": "Inter", "font-size": 9, color: "#1a1a1a", "line-height": 1.45 },
".section-title":{ "font-family": "Inter", "font-size": 12, "font-weight": "bold", color: "#0b3d91", "border": [0, 0, 1, 0], "border-color": "#0b3d91", "padding": [0, 0, 3, 0], "margin": [0, 0, 6, 0] },
".body": { "font-family": "Inter", "font-size": 9.5, color: "#1a1a1a", "line-height": 1.5 },
".prop-label": { "font-family": "Inter", "font-size": 8, "font-weight": "bold", color: "#555" },
".prop-value": { "font-family": "Inter", "font-size": 9.5, color: "#1a1a1a", "line-height": 1.4 },
".step-number": { "font-family": "Inter", "font-size": 10, "font-weight": "bold", color: "#0b3d91" },
".step-text": { "font-family": "Inter", "font-size": 9.5, color: "#1a1a1a", "line-height": 1.45 },
".cert": { "font-family": "Inter", "font-size": 9, color: "#333", "line-height": 1.5 },
".sig-name": { "font-family": "Inter", "font-size": 10, "font-weight": "bold", color: "#1a1a1a", "margin": [0, 0, 0, 0] },
".sig-title": { "font-family": "Inter", "font-size": 9, color: "#444", "margin": [0, 0, 0, 0] },
},
},
// Masthead
s(".masthead", "{{jurisdiction}}"),
s(".doc-kind", "Notice of Public Hearing — {{hearingBody}}"),
s(".doc-line", "{{caseNumber}} — {{subject}}"),
gap(8),
// Hearing meta box
r({ "border": [1, 1, 1, 1], "border-color": "#0b3d91", padding: [8, 10, 8, 10] },
col("50%",
s(".meta-label", "HEARING DATE / TIME"),
s(".meta-value", "{{hearingDate}} at {{hearingTime}}"),
gap(4),
s(".meta-label", "LOCATION"),
s(".meta-value", "{{location}}"),
),
col("50%",
s(".meta-label", "CASE NUMBER"),
s(".meta-value", "{{caseNumber}}"),
gap(4),
s(".meta-label", "PUBLISHED"),
s(".meta-value", "{{publishedAt}}"),
),
),
gap(8),
// Proposal summary
r({ class: "notice-box" },
col("100%", s(".notice-text", "{{proposal}}")),
),
gap(10),
// Property details
s(".section-title", "Property and Request"),
r({ grid: ["130pt", "1fr"], "margin": [0, 0, 4, 0] },
col(s(".prop-label", "ADDRESS")),
col(s(".prop-value", "{{propertyAddress}}")),
),
r({ grid: ["130pt", "1fr"], "margin": [0, 0, 4, 0] },
col(s(".prop-label", "APPLICANT")),
col(s(".prop-value", "{{applicant}}")),
),
r({ grid: ["130pt", "1fr"], "margin": [0, 0, 4, 0] },
col(s(".prop-label", "CURRENT / PROPOSED")),
col(s(".prop-value", "{{currentZoning}} to {{proposedZoning}}")),
),
r({ grid: ["130pt", "1fr"], "margin": [0, 0, 0, 0] },
col(s(".prop-label", "REQUEST")),
col(s(".prop-value", "{{request}}")),
),
gap(4),
s(".body", "{{description}}"),
gap(10),
// How to participate
s(".section-title", "How to Participate"),
each("step in steps",
r({ grid: ["24pt", "1fr"], "margin": [0, 0, 4, 0] },
col(s(".step-number", "{{step.number}}")),
col(s(".step-text", "{{step.text}}")),
),
),
gap(4),
s(".body", "{{commentDeadline}}"),
gap(4),
s(".body", "{{accommodation}}"),
gap(8),
// Publication + sign-off
s(".cert", "{{certification}}"),
gap(8),
s(".sig-name", "{{clerkName}}"),
s(".sig-title", "City Clerk, {{jurisdiction}}"),
ftrPages("{{jurisdiction}} Notice of Public Hearing {{caseNumber}}"),
);
const sampleData = {
jurisdiction: "City of Riverton",
hearingBody: "Planning Commission",
caseNumber: "Case Z-25-09",
subject: "Rezoning of 1200 Mill Road from R-2 to MU-N",
hearingDate: "21 October 2025",
hearingTime: "7:00 PM",
location: "Riverton City Hall, Council Chambers, 450 Civic Center Drive",
publishedAt: "3 October 2025 in the Riverton Gazette and on the City website",
proposal: "The Riverton Planning Commission will hold a public hearing on a request to rezone 1200 Mill Road (Assessor's Parcel 042-118-07, 2.4 acres) from R-2 (Low-Density Residential) to MU-N (Mixed-Use Neighborhood) to allow a three-storey building with ground-floor retail and twelve apartments above. The Commission will take public testimony and forward a recommendation to the City Council.",
propertyAddress: "1200 Mill Road, Riverton (Assessor's Parcel 042-118-07, 2.4 acres)",
applicant: "Mill Road Partners LLC, 88 Depot Street, Riverton",
currentZoning: "R-2 (Low-Density Residential)",
proposedZoning: "MU-N (Mixed-Use Neighborhood)",
request: "Map amendment plus a conditional-use permit for ground-floor retail in the MU-N district",
description: "The site is currently a vacant lot on the north side of Mill Road between Elm Street and the rail crossing. Surrounding uses are single-family homes to the north, the Elm Street commercial frontage to the south, and the water-treatment plant buffer to the east. Staff analysis finds the request consistent with the General Plan's Neighborhood Mixed-Use designation for this corridor; the full staff report is available at the Planning counter and on the City website from 14 October 2025.",
steps: [
{ number: "1", text: "Attend in person — sign up to speak when the chair calls Case Z-25-09. Speakers are limited to three minutes each." },
{ number: "2", text: "Join remotely — the hearing streams live at riverton.example.gov/meetings with call-in instructions posted the Friday before." },
{ number: "3", text: "Write in — email planning@riverton.example.gov or mail the Planning Division, 450 Civic Center Drive, Riverton, so it arrives before the deadline below." },
],
commentDeadline: "Written comments must arrive by 12:00 noon on 20 October 2025 to be included in the staff packet; later comments are accepted at the hearing and entered into the record.",
accommodation: "To request disability-related accommodation or language assistance, contact the City Clerk at (555) 014-2800 at least 48 hours before the hearing.",
certification: "I certify that this notice was published in the Riverton Gazette on 3 October 2025, posted at Riverton City Hall, and mailed to all property owners within 500 feet of the subject property on 2 October 2025. — D. Reyes, City Clerk",
clerkName: "D. Reyes",
};Sample data
{
"jurisdiction": "City of Riverton",
"hearingBody": "Planning Commission",
"caseNumber": "Case Z-25-09",
"subject": "Rezoning of 1200 Mill Road from R-2 to MU-N",
"hearingDate": "21 October 2025",
"hearingTime": "7:00 PM",
"location": "Riverton City Hall, Council Chambers, 450 Civic Center Drive",
"publishedAt": "3 October 2025 in the Riverton Gazette and on the City website",
"proposal": "The Riverton Planning Commission will hold a public hearing on a request to rezone 1200 Mill Road (Assessor's Parcel 042-118-07, 2.4 acres) from R-2 (Low-Density Residential) to MU-N (Mixed-Use Neighborhood) to allow a three-storey building with ground-floor retail and twelve apartments above. The Commission will take public testimony and forward a recommendation to the City Council.",
"propertyAddress": "1200 Mill Road, Riverton (Assessor's Parcel 042-118-07, 2.4 acres)",
"applicant": "Mill Road Partners LLC, 88 Depot Street, Riverton",
"currentZoning": "R-2 (Low-Density Residential)",
"proposedZoning": "MU-N (Mixed-Use Neighborhood)",
"request": "Map amendment plus a conditional-use permit for ground-floor retail in the MU-N district",
"description": "The site is currently a vacant lot on the north side of Mill Road between Elm Street and the rail crossing. Surrounding uses are single-family homes to the north, the Elm Street commercial frontage to the south, and the water-treatment plant buffer to the east. Staff analysis finds the request consistent with the General Plan's Neighborhood Mixed-Use designation for this corridor; the full staff report is available at the Planning counter and on the City website from 14 October 2025.",
"steps": [
{
"number": "1",
"text": "Attend in person — sign up to speak when the chair calls Case Z-25-09. Speakers are limited to three minutes each."
},
{
"number": "2",
"text": "Join remotely — the hearing streams live at riverton.example.gov/meetings with call-in instructions posted the Friday before."
},
{
"number": "3",
"text": "Write in — email planning@riverton.example.gov or mail the Planning Division, 450 Civic Center Drive, Riverton, so it arrives before the deadline below."
}
],
"commentDeadline": "Written comments must arrive by 12:00 noon on 20 October 2025 to be included in the staff packet; later comments are accepted at the hearing and entered into the record.",
"accommodation": "To request disability-related accommodation or language assistance, contact the City Clerk at (555) 014-2800 at least 48 hours before the hearing.",
"certification": "I certify that this notice was published in the Riverton Gazette on 3 October 2025, posted at Riverton City Hall, and mailed to all property owners within 500 feet of the subject property on 2 October 2025. — D. Reyes, City Clerk",
"clerkName": "D. Reyes"
}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.
curl -X POST https://makespdf.com/api/v1/render \
-H "Authorization: Bearer $MAKESPDF_API_KEY" \
-H "Content-Type: application/json" \
-d '{"templateId": "hearing-notice"}' \
-o output.pdf