目录

java-实现页面可拖拽选项并生成pdf

java 实现页面可拖拽选项并生成pdf

java 实现页面可拖拽选项并生成pdf 要使用 Java 实现页面可拖拽选项并生成 PDF,可分为两个主要部分:前端实现页面可拖拽选项,后端使用 Java 生成 PDF。下面为你详细介绍实现步骤及示例代码。

前端实现页面可拖拽选项

前端部分可使用 HTML、CSS 和 JavaScript 来创建一个可拖拽选项的页面。这里使用 HTML5 的 draggable 属性和 drag 相关事件来实现拖拽功能。

登录后复制

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>可拖拽选项</title>
    <style>
        #drag-items {
            display: flex;
            gap: 10px;
        }

        .drag-item {
            width: 100px;
            height: 50px;
            background-color: lightblue;
            text-align: center;
            line-height: 50px;
            cursor: move;
        }

        #drop-area {
            width: 300px;
            height: 200px;
            border: 2px dashed gray;
            margin-top: 20px;
            padding: 10px;
        }
    </style>
</head>

<body>
    <div id="drag-items">
        <div class="drag-item" draggable="true">选项 1</div>
        <div class="drag-item" draggable="true">选项 2</div>
        <div class="drag-item" draggable="true">选项 3</div>
    </div>
    <div id="drop-area" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
    <button onclick="submitData()">提交生成 PDF</button>

    <script>
        function allowDrop(ev) {
            ev.preventDefault();
        }

        function drag(ev) {
            ev.dataTransfer.setData("text", ev.target.textContent);
        }

        function drop(ev) {
            ev.preventDefault();
            var data = ev.dataTransfer.getData("text");
            var newDiv = document.createElement('div');
            newDiv.textContent = data;
            ev.target.appendChild(newDiv);
        }

        function submitData() {
            var dropArea = document.getElementById('drop-area');
            var items = [];
            for (var i = 0; i < dropArea.children.length; i++) {
                items.push(dropArea.children[i].textContent);
            }
            // 发送数据到后端
            fetch('/generate-pdf', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json'
                },
                body: JSON.stringify({ items: items })
            })
           .then(response => response.blob())
           .then(blob => {
                var url = window.URL.createObjectURL(blob);
                var a = document.createElement('a');
                a.href = url;
                a.download = 'output.pdf';
                a.click();
                window.URL.revokeObjectURL(url);
            });
        }
    </script>
</body>

</html>

后端使用 Java 生成 PDF

后端使用 Spring Boot 框架和 iText 库来处理前端发送的数据并生成 PDF。

1. 创建 Spring Boot 项目

你可以使用 Spring Initializr( )来创建一个基本的 Spring Boot 项目,添加以下依赖:

  • Spring Web
  • Lombok(可选,用于简化代码)
2. 添加 iText 依赖

pom.xml 中添加 iText 依赖:

登录后复制

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext7-core</artifactId>
    <version>7.2.5</version>
    <type>pom</type>
</dependency>
3. 创建控制器

登录后复制

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Map;

@RestController
public class PdfController {

    @PostMapping("/generate-pdf")
    public ResponseEntity<byte[]> generatePdf(@RequestBody Map<String, List<String>> request) throws IOException {
        List<String> items = request.get("items");

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        PdfWriter writer = new PdfWriter(outputStream);
        PdfDocument pdf = new PdfDocument(writer);
        Document document = new Document(pdf);

        for (String item : items) {
            document.add(new Paragraph(item));
        }

        document.close();

        byte[] pdfBytes = outputStream.toByteArray();

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_PDF);
        headers.setContentDispositionFormData("attachment", "output.pdf");

        return new ResponseEntity<>(pdfBytes, headers, HttpStatus.OK);
    }
}

运行项目

  1. 启动 Spring Boot 项目。
  2. 打开前端 HTML 文件,进行拖拽操作,点击“提交生成 PDF”按钮,即可下载生成的 PDF 文件。

通过以上步骤,你就可以实现页面可拖拽选项并生成 PDF 的功能。