Skip to content

Onboarding notice — generate this PDF with Java (Template)

JQuick-PdfScenario Demos

Template1 页 A4 · 44 KB

Red-header onboarding notice on a single page.

Download the PDFView raw template fileBack to all demos

Onboarding notice — Template
Rendered output

Output specs

PDF pages
1
Chart type
Template
Template lines
56
Source lines
101

Java source · JQuickBiz74OnboardNotice.java

This is the complete test class that produced the PDF above — copy it and run as-is; see the quick-start section for the Maven dependency.

/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Copyright (c) [2025-2099] Martin ([email protected])
 */
package com.github.paohaijiao.biz.scenario;

import com.github.paohaijiao.config.JPdfConfig;
import com.github.paohaijiao.executor.JQuickPdfFactory;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map;

public class JQuickBiz74OnboardNotice {

    private static final String PDF_DIR = "D:/test/pdf/";
    private static final String IMG_DIR = "D:/test/image/";
    private static final String OUT_FILE = PDF_DIR + "74_onboard_notice.pdf";
    private static final String TEMPLATE = "report/biz/74_onboard_notice.txt";

    public static void main(String[] args) throws IOException {
        new File(PDF_DIR).mkdirs();
        new File(IMG_DIR).mkdirs();

        // ---------- 1. 图片:红头 logo ----------
        generateLogo(IMG_DIR + "74_logo.png");

        // ---------- 2. 数据(普通 Map,无实体类)----------
        Map<String, Object> data = new LinkedHashMap<String, Object>();
        data.put("companyName", "××数字科技有限公司");
        data.put("noticeNo", "人事〔2026〕入职第 086 号");
        data.put("employeeName", "许安");
        data.put("position", "资深 Java 后端工程师(P6)");
        data.put("checkInTime", "2026年11月02日(星期一)上午 9:30");
        data.put("checkInAddress", "××市浦东新区××路 88 号 JQ 大厦 12 层 人力资源部");
        data.put("salaryInfo", "月基本工资 28,000 元,绩效奖金按季度考核发放;试用期 3 个月,试用期工资为转正工资的 80%;"
                + "按上海市规定缴纳五险一金,另享补充商业医疗保险与年度体检。");

        // 报到材料:逐条 bind 为 material1~6
        String[] materials = {
                "身份证原件及复印件 2 份",
                "最高学历、学位证书原件及复印件各 1 份(境外学历需附教育部认证报告)",
                "原单位离职证明原件",
                "一寸白底免冠照片 4 张(含电子版)",
                "本人名下银行卡复印件 1 份(用于工资发放)",
                "近三个月体检报告(三级甲等医院)"
        };
        for (int i = 0; i < materials.length; i++) {
            data.put("material" + (i + 1), materials[i]);
        }

        data.put("issueDate", "2026年10月19日");

        // ---------- 3. 渲染 ----------
        JPdfConfig config = new JPdfConfig();
        config.getLayoutConfig().setFlexLayout(true);
        // 公文版心:上 60、下 55,左右 70(约 2.5cm 标准公文页边距)
        config.getDoc().setMargins(Arrays.asList(60, 70, 55, 70));
        config.getFooterConfig().setEnabled(false);

        JQuickPdfFactory factory = new JQuickPdfFactory(config);
        factory.bindAll(data);
        byte[] pdf = factory.executeResource(TEMPLATE);

        FileOutputStream out = new FileOutputStream(OUT_FILE);
        out.write(pdf);
        out.close();
        System.out.println("已生成:" + OUT_FILE);
    }

    private static void generateLogo(String path) throws IOException {
        BufferedImage image = new BufferedImage(80, 80, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = image.createGraphics();
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g.setColor(new Color(0xB7, 0x1C, 0x1C));
        g.fillOval(2, 2, 76, 76);
        g.setColor(Color.WHITE);
        g.setFont(new Font("Microsoft YaHei", Font.BOLD, 30));
        g.drawString("JQ", 17, 52);
        g.dispose();
        ImageIO.write(image, "png", new File(path));
    }
}

Minimal invocation (3 lines)

Skip the full test class — the core is these three lines: bind the chart SVG, execute the template, get the PDF bytes. Copy them straight into your project.

// config 可省略;svg 来自 JChartRendererFactory.renderChart(...),见下方完整源码
byte[] pdf = new JQuickPdfFactory(config).executeResource("report/biz/74_onboard_notice.txt");

Template file · 74_onboard_notice.txt

An HTML-like template with inline CSS that renders to PDF once bound to data. The full template is below — copy it or download the raw file.

<pdf>
<body>
  <div style="display:flex; justifyContent:space-between; borderBottom:2px solid #B71C1C; paddingBottom:6px">
    <div style="width:80px">
      <image src='D:/test/image/74_logo.png' style="width:40px; height:40px"></image>
    </div>
    <div style="width:300px; textAlignment:center">
      <h1 style="fontSize:18pt; bold:true; color:#B71C1C; characterSpacing:3pt">${companyName}</h1>
    </div>
    <div style="width:80px; textAlignment:right">
      <p style="fontSize:8pt; color:#B71C1C">'人力资源部'</p>
    </div>
  </div>
  <div style="borderBottom:1px solid #B71C1C; marginTop:2px; marginBottom:12px"></div>

  <h2 style="fontSize:17pt; bold:true; color:#1A2733; textAlignment:center; characterSpacing:6pt; marginTop:6px">'入 职 通 知 书'</h2>
  <p style="fontSize:9pt; color:#5A6B7C; textAlignment:center; marginBottom:14px">${noticeNo}</p>

  <p style="fontSize:11pt; bold:true; color:#1A2733; marginBottom:6px">${employeeName}' 先生/女士:'</p>
  <p style="fontSize:10.5pt; color:#333333; textIndent:21pt; marginBottom:5px">'您好!感谢您对我司的信任与关注。经综合评估,我司决定录用您担任 '${position}' 一职。现将有关入职事宜通知如下,请按期办理报到手续。'</p>

  <p style="fontSize:11pt; bold:true; color:#1A2733; marginTop:10px; marginBottom:4px">'一、报到时间与地点'</p>
  <p style="fontSize:10.5pt; color:#333333; textIndent:21pt; marginBottom:3px">'报到时间:'${checkInTime}</p>
  <p style="fontSize:10.5pt; color:#333333; textIndent:21pt; marginBottom:3px">'报到地址:'${checkInAddress}</p>
  <p style="fontSize:10.5pt; color:#333333; textIndent:21pt; marginBottom:3px">'请携带本通知书打印件,于报到当日 9:30 前到前台登记,由人力资源部安排后续流程。'</p>

  <p style="fontSize:11pt; bold:true; color:#1A2733; marginTop:10px; marginBottom:4px">'二、薪资待遇'</p>
  <p style="fontSize:10.5pt; color:#333333; textIndent:21pt; marginBottom:3px">${salaryInfo}</p>

  <p style="fontSize:11pt; bold:true; color:#1A2733; marginTop:10px; marginBottom:4px">'三、报到所需材料'</p>
  <list style="listStyleType:decimal; paddingLeft:26px; fontSize:10.5pt; color:#333333">
    <li style="marginBottom:3px">${material1}</li>
    <li style="marginBottom:3px">${material2}</li>
    <li style="marginBottom:3px">${material3}</li>
    <li style="marginBottom:3px">${material4}</li>
    <li style="marginBottom:3px">${material5}</li>
    <li style="marginBottom:3px">${material6}</li>
  </list>

  <p style="fontSize:11pt; bold:true; color:#1A2733; marginTop:10px; marginBottom:4px">'四、其他事项'</p>
  <p style="fontSize:10.5pt; color:#333333; textIndent:21pt; marginBottom:5px">'如您因特殊原因无法按期报到,请提前 3 个工作日致电人力资源部说明情况;逾期未报到且未作说明的,视为放弃录用资格,本通知书自动失效。'</p>
  <p style="fontSize:10.5pt; color:#333333; textIndent:21pt; marginBottom:5px">'本通知书自签发之日起 15 日内有效,请妥善保管,不得转借他人。'</p>

  <p style="fontSize:10.5pt; color:#333333; textIndent:21pt; marginTop:12px">'特此通知。'</p>

  <div style="marginTop:26px">
    <p style="fontSize:10.5pt; bold:true; color:#1A2733; textAlignment:right">${companyName}' 人力资源部'</p>
    <p style="fontSize:10.5pt; color:#333333; textAlignment:right; marginTop:4px">${issueDate}</p>
  </div>

  <div style="borderTop:1px solid #B71C1C; marginTop:22px; paddingTop:5px">
    <p style="fontSize:8pt; color:#8a939b; textAlignment:center">${companyName}' 地址:××市××区××路 88 号 电话:021-0000-0000 网址:www.example.com'</p>
  </div>
</body>
</pdf>

More demos in this group

The PDF, preview image, template and source code on this page were all produced by a real JQuick-Pdf run and are free to copy into your own project.