You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX质保审核程序从数据库生成PDF/LaTeX报告的方案咨询

解决方案:JavaFX程序中从数据库生成PDF与LaTeX文档

针对你用NetBeans开发的JavaFX质保审核系统,我分PDF自动生成和LaTeX文档生成两部分给你具体的实现方案,还有适合NetBeans的工具建议:

一、动态生成质保审核PDF报告(替代Excel流程)

1. 推荐的Java库(无需插件,直接集成)

不用依赖NetBeans插件,用成熟的Java PDF生成库更灵活,推荐这两个:

  • iText 7:功能强大,支持从模板生成或完全动态构建PDF,非常适合从数据库取数据填充内容
  • Apache PDFBox:轻量简洁,适合生成结构简单的文档,也支持表单填充

2. 实现步骤(以iText 7为例)

步骤1:在NetBeans中添加依赖

如果用Maven,在pom.xml里加入:

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext7-core</artifactId>
    <version>7.2.5</version>
</dependency>

如果是普通Java项目,直接下载iText的jar包添加到项目库即可。

步骤2:从数据库获取测试数据

假设你已经有JDBC连接工具类,先查询目标申请的测试数据:

// 示例:从test_data表获取选中申请的测试数据
public List<TestData> getTestDataByApplicationId(int appId) throws SQLException {
    List<TestData> dataList = new ArrayList<>();
    String sql = "SELECT test_item, result, test_date FROM test_data WHERE application_id = ?";
    try (Connection conn = DBUtil.getConnection();
         PreparedStatement pstmt = conn.prepareStatement(sql)) {
        pstmt.setInt(1, appId);
        ResultSet rs = pstmt.executeQuery();
        while (rs.next()) {
            TestData data = new TestData();
            data.setTestItem(rs.getString("test_item"));
            data.setResult(rs.getString("result"));
            data.setTestDate(rs.getDate("test_date"));
            dataList.add(data);
        }
    }
    return dataList;
}

步骤3:动态生成PDF

你可以先制作带表单域的PDF模板(用Adobe Acrobat),再填充数据;也可以完全动态构建文档,示例如下:

public void generateAuditPdf(int appId, String outputPath) throws IOException, SQLException {
    List<TestData> testDataList = getTestDataByApplicationId(appId);
    // 获取对应质保申请的基础信息
    ApplicationInfo appInfo = getApplicationInfoById(appId);

    PdfWriter writer = new PdfWriter(outputPath);
    PdfDocument pdf = new PdfDocument(writer);
    Document document = new Document(pdf);

    // 添加标题与基础信息
    document.add(new Paragraph("质保申请审核报告").setFontSize(18).setBold().setTextAlignment(TextAlignment.CENTER));
    document.add(new Paragraph("申请编号:" + appInfo.getAppId()).setFontSize(12).setMarginTop(10));
    document.add(new Paragraph("申请人:" + appInfo.getApplicant()).setFontSize(12));

    // 添加测试数据表格
    Table table = new Table(new float[]{2, 2, 1});
    table.addHeaderCell(new Cell().add(new Paragraph("测试项")));
    table.addHeaderCell(new Cell().add(new Paragraph("测试结果")));
    table.addHeaderCell(new Cell().add(new Paragraph("测试日期")));

    for (TestData data : testDataList) {
        table.addCell(new Cell().add(new Paragraph(data.getTestItem())));
        table.addCell(new Cell().add(new Paragraph(data.getResult())));
        table.addCell(new Cell().add(new Paragraph(data.getTestDate().toString())));
    }
    document.add(table.setMarginTop(15));

    document.close();
}

3. NetBeans相关工具

如果想要可视化编辑PDF模板,可以安装NetBeans PDF Editor插件,在插件中心搜索就能找到,能帮你快速制作带表单的PDF模板,之后用代码填充数据更高效。


二、生成LaTeX格式文档并调用数据库信息

1. 实现思路

LaTeX本质是文本文件,所以可以通过Java代码动态拼接LaTeX内容,再调用本地LaTeX编译器(比如TeX Live)生成PDF;用模板引擎能简化占位符替换的工作。

2. 具体实现步骤

步骤1:准备LaTeX模板

先写一个基础的LaTeX模板(比如audit_template.tex),用占位符标记需要替换的数据库数据:

\documentclass{article}
\usepackage{ctex}
\usepackage{booktabs}
\begin{document}
\title{质保申请审核报告}
\author{质保审核系统}
\date{\today}
\maketitle

\section{申请基本信息}
申请编号:{{appId}}\\
申请人:{{applicant}}\\
申请日期:{{appDate}}

\section{测试数据记录}
\begin{table}[h]
    \centering
    \begin{tabular}{lll}
        \toprule
        测试项 & 测试结果 & 测试日期 \\
        \midrule
        {{testDataRows}}
        \bottomrule
    \end{tabular}
\end{table}
\end{document}

步骤2:用Java代码替换占位符并生成.tex文件

推荐用FreeMarker模板引擎来简化拼接,避免手动拼接字符串的繁琐:

// 用FreeMarker模板引擎生成LaTeX内容
public void generateLatexFile(int appId, String templateDir, String outputTexPath) throws Exception {
    ApplicationInfo appInfo = getApplicationInfoById(appId);
    List<TestData> testDataList = getTestDataByApplicationId(appId);

    // 准备数据模型
    Map<String, Object> dataModel = new HashMap<>();
    dataModel.put("appId", appInfo.getAppId());
    dataModel.put("applicant", appInfo.getApplicant());
    dataModel.put("appDate", appInfo.getAppDate().toString());

    // 拼接测试数据行
    StringBuilder testRows = new StringBuilder();
    for (TestData data : testDataList) {
        testRows.append(data.getTestItem()).append(" & ").append(data.getResult())
                .append(" & ").append(data.getTestDate()).append(" \\\\ \n");
    }
    dataModel.put("testDataRows", testRows.toString());

    // 加载FreeMarker模板
    Configuration cfg = new Configuration(Configuration.VERSION_2_3_32);
    cfg.setDirectoryForTemplateLoading(new File(templateDir));
    Template template = cfg.getTemplate("audit_template.tex");

    // 生成LaTeX文件
    try (Writer writer = new FileWriter(outputTexPath)) {
        template.process(dataModel, writer);
    }
}

步骤3:调用LaTeX编译器生成PDF

在Java中通过ProcessBuilder调用本地的LaTeX编译器(需要先安装TeX Live或MikTeX):

public void compileLatexToPdf(String texFilePath, String outputDir) throws IOException {
    // 调用pdflatex命令
    ProcessBuilder pb = new ProcessBuilder("pdflatex", "-output-directory", outputDir, texFilePath);
    pb.redirectErrorStream(true);
    Process process = pb.start();

    // 读取编译输出(用于调试)
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
    }

    // 等待编译完成
    try {
        int exitCode = process.waitFor();
        if (exitCode == 0) {
            System.out.println("LaTeX编译成功,PDF已生成");
        } else {
            System.err.println("LaTeX编译失败,退出码:" + exitCode);
        }
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        throw new IOException("编译被中断", e);
    }
}

3. NetBeans插件支持

  • 安装LaTeX Editor插件:提供LaTeX语法高亮、代码补全,方便你编辑模板文件
  • 如果需要可视化预览,可以安装TeX Preview插件,在NetBeans里直接预览LaTeX生成的PDF

三、额外建议

  1. 模板复用:不管是PDF还是LaTeX,尽量用模板方式,避免硬编码内容,后期维护更方便
  2. 异常处理:数据库查询、文件生成、编译过程都要加完善的异常处理,比如捕获SQL异常、IO异常
  3. 性能优化:如果数据量较大,尽量批量读取数据库数据,避免频繁查询
  4. 测试:先测试小数据量的文档生成,确保格式正确后再处理大量数据

内容的提问来源于stack exchange,提问作者Nelson Ortiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:11:06