2

ASP.Net MVC 3

我有一个动作,它在导入 PDF 文档并在其上加盖水印后返回 FileStreamResult。由于可能出现文件未找到错误,我如何返回视图而不是文件流?

为了使事情复杂化,我使用 Philip Hutchison 的 jQuery PDFObject ( http://pdfobject.com ) 来调用操作并将其呈现在 DIV 中,因此我无法在服务器端重定向。

重申一下:它是页面上的一个 jQuery 链接,它使用 PDF 文件流的结果填充 DIV。我能想到的唯一“黑客”事情是发送一个 Error.pdf 文件。

你的意见?

4

1 回答 1

0

我最终创建了一个错误的 PDF 内存流。

MemoryStream ms = new MemoryStream();
try
    {
        PdfReader reader = new PdfReader(readerURL);
        StampWatermark(WO, ms, reader);
    }

catch (Exception ex)
    {
        RenderErrorPDF(WO, ms, ex);
    }

byte[] byteinfo = ms.ToArray();
ms.Write(byteinfo, 0, byteinfo.Length);
ms.Position = 0;
ms.Seek(0, SeekOrigin.Begin);
return new FileStreamResult(ms, "application/pdf");

RenderErrorPDF 方法

private static void RenderErrorPDF(WorkOrder WO, MemoryStream ms, Exception ex)
    {
        BaseFont bfTimes = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, false);
        var doc = new Document(new Rectangle(792f, 540f));
        var wr = PdfWriter.GetInstance(doc, ms);
        doc.Open();
        doc.Add(new Paragraph("There was an error rendering the file that you requested...", new Font(bfTimes, 24f)));
        doc.Add(new Paragraph(string.Format("\r\rFile: {0}", WO.DRAWING_FILE)));

        doc.Add(new Paragraph(string.Format("\r\rError: {0}", ex.Message)));
        wr.CloseStream = false;
        doc.Close();
    }
于 2012-01-05T19:22:55.327 回答