Показать PDF в HTML в Интернете - PullRequest
2 голосов
/ 14 июня 2010

Я использую тег объекта для визуализации PDF в HTML, но я делаю это в MVC следующим образом:

<object data="/JDLCustomer/GetPDFData?projID=<%=ViewData["ProjectID"]%>&folder=<%=ViewData["Folder"] %>"
    type="application/pdf" width="960" height="900">
</object>

, а Controller / Action -

    public void GetPDFData(string projID, Project_Thin.Folders folder)
    {
        Highmark.BLL.Models.Project proj = GetProject(projID);
        List<File> ff = proj.GetFiles(folder, false);
        if (ff != null && ff.Count > 0 && ff.Where(p => p.FileExtension == "pdf").Count() > 0)
        {
            ff = ff.Where(p => p.FileExtension == "pdf").ToList();

            Response.ClearHeaders();
            Highmark.BLL.PDF.JDLCustomerPDF pdfObj = new JDLCustomerPDF(ff, proj.SimpleDbID);
            byte[] bArr = pdfObj.GetPDF(Response.OutputStream);
            pdfObj = null;

            Response.ContentType = "application/" + System.IO.Path.GetExtension("TakeOffPlans").Replace(".", "");
            Response.AddHeader("Content-disposition", "attachment; filename=\"TakeOffPlans\"");
            Response.BinaryWrite(bArr);
            Response.Flush();
        }
    }

Проблема в том, что когда я сначала загружаю данные с сервера, а затем возвращаю байтовые данные, загрузка занимает некоторое время, поэтому я хочу показать какой-то прогресс в отображении обработки.

Пожалуйста, помогите мнена этом.

Ответы [ 2 ]

0 голосов
/ 26 июня 2010

К сожалению, нет способа (afaik) взаимодействовать с плагином Acrobat и посмотреть, когда он будет готов к отображению вашего PDF-документа.

Доступны компоненты, которые заменяют Acrobat и предоставляют надлежащий интерфейс Javascript.Я работаю над TallComponents над их продуктом PDFWebViewer.NET , который будет отображать PDF без каких-либо плагинов и работает с ASP.NET MVC.

У вас есть и другие варианты.Если вам нужен индикатор прогресса, потому что генерация PDF занимает больше времени, чем вы хотели бы, вы можете опросить сервер о прогрессе, используя вызовы AJAX.На сервере вам понадобится какая-то информация о прогрессе, которую вы сможете вернуть в результате вызова ajax.В браузере вы будете использовать результат для предоставления информации о прогрессе пользователю.В сети есть несколько хороших примеров (например, этот блог ).Здесь также есть другие вопросы о SO (например, здесь ) с хорошими указателями на дополнительную информацию.

Если процесс генерации занимает всего пару секунд, вы, вероятно, можете получить способ показатьиндикатор занятости.Это может быть так же просто, как показывать div на вашей странице, когда вы запускаете загрузку с сервера.

Кстати, если я не ошибаюсь, вы должны заменить ключевое слово attachment на inline в заголовке Content-Disposition.Установка этого значения на attachment приведет к загрузке всего PDF перед отображением любого содержимого.Если вы установите его как встроенный, Acrobat начнет показывать первую страницу, как только он загрузит достаточно данных для этого.

0 голосов
/ 16 июня 2010

Вы можете попробовать следующее (не проверено во всех браузерах):

<div style="background: transparent url(progress.gif) no-repeat">
    <object 
        data="<%= Url.Action("GetPDFData, new { projID = ViewData["ProjectID"], folder = ViewData["Folder"] }") %>" 
        type="application/pdf" 
        width="640" 
        height="480">
        <param value="transparent" name="wmode"/>
    </object>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...