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

如何在Django中渲染从Egnyte获取的字节编码PDF?

问题分析与解决方法

你直接把字节类型的PDF内容传给iframe/embed的src是行不通的,浏览器无法解析原始字节格式的src值,这就是页面空白的原因。下面是两种可行的解决方式:

方式一:转成Data URI(适合小体积PDF)

把PDF字节内容编码为Base64,拼接成浏览器能识别的Data URI格式:

  1. 在Django视图中处理编码:
import base64

# 假设已从Egnyte获取到response.content(PDF字节数据)
pdf_base64 = base64.b64encode(response.content).decode('utf-8')
pdf_data_uri = f'data:application/pdf;base64,{pdf_base64}'

return render(request, 'template.html', {'pdf_src': pdf_data_uri})
  1. 模板中引用:
<iframe src="{{ pdf_src }}" width="100%" height="600px"></iframe>

注意:如果PDF文件过大,Data URI会导致浏览器加载缓慢、内存占用过高,这种情况建议用第二种方式。

方式二:通过Django视图返回PDF流(适合大体积PDF)

单独写一个视图来返回PDF内容,让iframe的src指向这个视图的URL:

  1. 编写PDF服务视图:
from django.http import HttpResponse

def serve_egnyte_pdf(request):
    # 这里写从Egnyte获取PDF内容的逻辑,拿到response.content
    pdf_content = response.content
    
    # 构造响应,指定内容类型为PDF,设置内联显示
    response = HttpResponse(pdf_content, content_type='application/pdf')
    response['Content-Disposition'] = 'inline; filename="egnyte_document.pdf"'
    return response
  1. 配置路由(urls.py):
from django.urls import path
from .views import serve_egnyte_pdf

urlpatterns = [
    # 其他路由...
    path('egnyte-pdf/', serve_egnyte_pdf, name='serve_egnyte_pdf'),
]
  1. 模板中引用:
<iframe src="{% url 'serve_egnyte_pdf' %}" width="100%" height="600px"></iframe>

为什么原来的方法失效?

你之前传入的b'%PDF-1.6\r...'是Python字节对象的字符串表示,浏览器会把它当作无效的URL处理,自然无法加载PDF内容,最终显示空白。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:07:19