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

将用户修改后的PDF保存至Blob的技术实现问题

问题分析与解决方案:获取浏览器中修改后的PDF内容并保存

你的核心问题在于:用户通过<embed>标签对PDF做的修改仅存在于浏览器本地内存中,并不会自动同步到服务器。你当前的C#代码是直接请求服务器上的原始PDF文件,自然拿不到用户修改后的内容。

要实现保存修改后的PDF,需要分前端和后端配合处理:

1. 前端替换原生<embed>,使用支持编辑与导出的PDF库

原生<embed>没有提供获取修改后PDF数据的API,必须使用具备编辑能力的PDF处理库(比如pdf.js生态下的编辑组件,或专门的PDF编辑器库)。以下是简化的前端处理逻辑:

// 示例:使用支持编辑的PDF库(需替换为实际使用的库的API)
async function saveModifiedPdf() {
    // 从编辑器实例中导出修改后的PDF为Blob
    const modifiedPdfBlob = await pdfEditor.exportAsBlob();
    
    // 构造FormData用于发送到后端
    const formData = new FormData();
    formData.append('modifiedPdf', modifiedPdfBlob, 'modified_dnd_char_sheet.pdf');
    
    // 发送POST请求到后端保存接口
    const response = await fetch('/api/save-modified-pdf', {
        method: 'POST',
        body: formData
    });
    
    if (response.ok) {
        console.log('修改后的PDF已成功保存');
    } else {
        console.error('保存失败');
    }
}

2. 后端C#接口接收并保存Blob

替换你原有的Save方法,改为接收前端上传的修改后文件:

[HttpPost("api/save-modified-pdf")]
public async Task<IActionResult> SaveModifiedPdf(IFormFile modifiedPdf)
{
    if (modifiedPdf == null || modifiedPdf.Length == 0)
    {
        return BadRequest("未接收到修改后的PDF文件");
    }

    string savePath = @"C:\path\to\save\modified_dnd_char_sheet.pdf";

    try
    {
        using (var fileStream = new FileStream(savePath, FileMode.Create))
        {
            await modifiedPdf.CopyToAsync(fileStream);
        }
        return Ok("PDF保存成功");
    }
    catch (Exception ex)
    {
        return StatusCode(500, $"保存过程中出现错误: {ex.Message}");
    }
}

关键说明

  • 不要依赖原生<embed>处理可编辑PDF:它仅用于展示,无法获取用户修改后的内容。
  • 前后端配合是必须的:修改后的内容在浏览器端生成Blob,再通过HTTP请求上传到服务器,后端才能获取并保存。

内容的提问来源于stack exchange,提问作者Eagle Brosi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 08:53:09