diff --git a/app.py b/app.py index 2687a09..5cc81f2 100644 --- a/app.py +++ b/app.py @@ -673,12 +673,33 @@ def compare_view(translation_id): return jsonify({ 'id': translation.id, 'filename': translation.original_filename, - 'original': original_content or '原文内容未找到(可能PDF已被删除或为扫描版)', + 'original': original_content or '', + 'original_pdf_url': f'/api/original-pdf/{translation.id}' if translation.upload_path else None, 'translated': translated_content, 'pages': translated_pages }) +@app.route('/api/original-pdf/') +def get_original_pdf(translation_id): + """获取原始PDF文件""" + user = get_current_user() + if not user: + return jsonify({'error': '请登录后使用此功能'}), 401 + + translation = Translation.query.get(translation_id) + if not translation or (translation.user_id != user.id and user.user_type != 'admin'): + return jsonify({'error': '无权访问'}), 403 + + if not translation.upload_path or not os.path.exists(translation.upload_path): + return jsonify({'error': '原PDF文件不存在'}), 404 + + return send_file(translation.upload_path, + mimetype='application/pdf', + as_attachment=False, + download_name=translation.original_filename) + + # ==================== 路由: 用户系统 ==================== @app.route('/login', methods=['GET', 'POST']) def login(): diff --git a/templates/translation.html b/templates/translation.html index 1773a57..89dbd73 100644 --- a/templates/translation.html +++ b/templates/translation.html @@ -84,11 +84,21 @@ const response = await fetch(`/api/compare/${translationId}`); const result = await response.json(); + // 原文面板:如果有PDF URL用iframe显示,否则显示提取的文本 + let originalHtml = ''; + if (result.original_pdf_url) { + originalHtml = ``; + } else if (result.original && result.original.length > 0) { + originalHtml = `
${escapeHtml(result.original)}
`; + } else { + originalHtml = '
原文内容未找到(可能PDF已被删除)
'; + } + document.getElementById('resultContent').innerHTML = `
-
原文
-
${escapeHtml(result.original)}
+
原文 PDF
+ ${originalHtml}
译文
@@ -98,7 +108,7 @@ `; } catch (error) { - alert('加载对比失败'); + alert('加载对比失败: ' + error.message); } } else { loadResult();