fix: use pdf previews for documents
This commit is contained in:
@@ -3,27 +3,25 @@
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Document;
|
||||
use App\Services\DocumentPdfPreviewService;
|
||||
use App\Services\DocumentService;
|
||||
use App\Services\MarkdownRenderService;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class DocumentController extends Controller
|
||||
{
|
||||
protected DocumentService $documentService;
|
||||
protected MarkdownRenderService $markdownRenderService;
|
||||
protected DocumentPdfPreviewService $pdfPreviewService;
|
||||
|
||||
public function __construct(
|
||||
DocumentService $documentService,
|
||||
MarkdownRenderService $markdownRenderService
|
||||
DocumentPdfPreviewService $pdfPreviewService
|
||||
) {
|
||||
$this->documentService = $documentService;
|
||||
$this->markdownRenderService = $markdownRenderService;
|
||||
$this->pdfPreviewService = $pdfPreviewService;
|
||||
}
|
||||
|
||||
/**
|
||||
* 预览文档的 Markdown 内容(支持图片显示)
|
||||
* 预览文档的 PDF 内容
|
||||
* 需求:11.1, 11.3, 11.4
|
||||
*
|
||||
* @param Document $document
|
||||
@@ -31,42 +29,37 @@ class DocumentController extends Controller
|
||||
*/
|
||||
public function preview(Document $document)
|
||||
{
|
||||
// 验证用户权限(使用 DocumentPolicy)
|
||||
// 需求:11.3
|
||||
if (!Gate::allows('view', $document)) {
|
||||
abort(403, '您没有权限预览此文档');
|
||||
}
|
||||
|
||||
// 检查文档是否已完成转换
|
||||
if ($document->conversion_status !== 'completed') {
|
||||
return view('documents.preview', [
|
||||
'document' => $document,
|
||||
'markdownHtml' => null,
|
||||
]);
|
||||
return view('documents.preview', [
|
||||
'document' => $document,
|
||||
'canPreviewPdf' => $this->pdfPreviewService->canPreview($document),
|
||||
'previewPdfUrl' => $this->pdfPreviewService->previewUrl($document),
|
||||
]);
|
||||
}
|
||||
|
||||
public function previewPdf(Document $document)
|
||||
{
|
||||
if (! Gate::allows('view', $document)) {
|
||||
abort(403, '您没有权限预览此文档');
|
||||
}
|
||||
|
||||
$markdownHtml = null;
|
||||
|
||||
try {
|
||||
// 使用 DocumentPreviewService 的 Markdown 预览方法
|
||||
// 这会修复图片路径并渲染 Markdown
|
||||
// 需求:11.1
|
||||
$previewService = app(\App\Services\DocumentPreviewService::class);
|
||||
$markdownHtml = $previewService->convertMarkdownToHtml($document);
|
||||
} catch (\Exception $e) {
|
||||
// 记录错误但不中断流程
|
||||
\Log::error('Markdown 预览失败', [
|
||||
$path = $this->pdfPreviewService->getPreviewPath($document);
|
||||
} catch (\Throwable $e) {
|
||||
\Log::error('PDF 预览生成失败', [
|
||||
'document_id' => $document->id,
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
|
||||
abort(500, 'PDF 预览生成失败:' . $e->getMessage());
|
||||
}
|
||||
|
||||
// 处理内容为空的情况
|
||||
// 需求:11.4
|
||||
// 返回渲染后的 HTML 视图
|
||||
return view('documents.preview', [
|
||||
'document' => $document,
|
||||
'markdownHtml' => $markdownHtml,
|
||||
return response()->file($path, [
|
||||
'Content-Type' => 'application/pdf',
|
||||
'Content-Disposition' => 'inline; filename="document-' . $document->getKey() . '.pdf"',
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user