2013-03-19 3 views
1

Я не знаю, что это обязательно важно, но я использую Infragistics iggrid для своей сетки и их материалов для экспорта в PDF.Как лучше всего экспортировать сетку в PDF в ASP.NET MVC

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

Так что я делаю на клиенте, собирает все данные. Это нужно сделать на стороне клиента, потому что я хочу экспортировать данные, поскольку пользователь сортировал, отфильтровывал и упорядочивал столбцы (в противном случае я мог бы просто собрать сервер данных, что сделало бы это проще). Затем я отправляю данные на сервер через POST.

На стороне сервера я создаю файл PDF. Теперь, очевидно, я мог бы сохранить сервер PDF-сервера и перенаправить на сгенерированный файл, но это добавит обслуживание временных файлов, которые я бы предпочел избежать (но в худшем случае я могу туда попасть. Сейчас просто ловить опционы) ,

Я попытался возвращения base64 данные кодируются и затем делать:

window.open("data:application/pdf;base64," + encodedData);

Это не работает (по крайней мере в IE), поскольку предел URL немного более 2K.

Я попытался с помощью downloadDataURI Javascript функция здесь: http://code.google.com/p/download-data-uri/

Но это только кажется, работает с Chrome (даже после того, как закомментировать чек WebKit), и я, видимо, не достаточно умен, чтобы понять, почему.

Уверен, что у меня отсутствует очевидная возможность, которая не требует создания файла на стороне сервера, но я просто не вижу его. (отказ от ответственности: моя дочь разбудила меня ужасно рано этим утром, поэтому ответ может быть действительно тривиальным, и завтра я буду чувствовать глупость, когда мой мозг работает).

ответ

2

На стороне сервера я создаю файл PDF. Теперь, очевидно, я мог бы сохранить сервер PDF-сервера и перенаправить на сгенерированный файл, но добавляет обслуживание временных файлов, которые я бы предпочел избежать (но В худшем случае я могу туда попасть. прямо сейчас).

Не нужно сохранять его на сервере. Вы можете просто передать PDF-файл (я предполагаю, что вы используете его в виде Stream или byte []) для пользователя. Все, что вам нужно сделать, это что-то вроде

Response.ContentType = "application/pdf"; 
Response.AddHeader("Content-Disposition", "filename.pdf"); 
Response.BinaryWrite(bytes); 
Response.Flush(); 
Response.Close(); 
Response.End(); 

И это предложит пользователю либо сохранить файл или открыть его в Adobe Reader. Файл вообще не будет создан на сервере.

+0

Да, я идиот. Я делал .ajax POST, но, конечно, нет причин, по которым я не могу писать сообщение в форме ... – Pete

Смежные вопросы