HTML в PDF, используя iTextShart, используя asp.net Место загрузки
Я использую приведенный ниже код в asp.net для экспорта HTML в PDF
protected void btnExport_Click(object sender, EventArgs e)
{
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=Panel.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
pnlPerson.RenderControl(hw);
StringReader sr = new StringReader(sw.ToString());
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f);
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
Response.Write(pdfDoc);
Response.End();
}
Этот код загрузит файл PDF в папку загрузок. Я хочу загрузить его по определенному пути без запроса на загрузку.
3 ответа
Вы пишете PDF в Response.OutputStream
,
Посмотрите здесь: как сохранить PDF на пути к карте сервера, используя iTextsharp
Это не проблема с C# или ASP.NET, это пользовательский агент (то есть браузер), который решает, куда загружать файл, обычно либо после запроса пользователя, либо с помощью каталога по умолчанию, установленного в его конфигурации.
Веб-разработчик не имеет возможности изменить это поведение, и это справедливо. Разрешение веб-сайту решать, где файл должен быть загружен, было бы неприятно для пользователя, который затем должен был бы выследить файл, и из-за недостатка безопасности, позволив третьей стороне размещать вредные вещи в местах, в которых они никогда не должны находиться.
1) ИМХО, вы не можете игнорировать браузер, запрашивающий загрузку по соображениям безопасности (это недоступный параметр клиентского приложения для обычных веб-приложений). Вы можете попробовать перенаправить на какой-нибудь онлайн-сервис просмотра PDF или предоставить свой собственный вместо загрузки.
2) Я не рекомендую такой код, как вы показали (btnExport_Click, заполняйте загружаемый контент, используя ответ текущей страницы). Это приводит к тому, что ваша страница перестает отвечать на запросы (в основном не работает) после нажатия кнопки "Экспорт", поскольку страница имеет только один ответ. Я рекомендую создать отдельную страницу или обработчик http для рендеринга PDF (в соответствии с параметрами запроса): просто перенаправьте на эту страницу / обработчик по нажатию кнопки, и вы получите правильное поведение.
3) Я настоятельно рекомендую использовать wkhtmltopdf и некоторые обертки (например, Печкин). Он работает действительно лучше из коробки в 99% реальных сценариев и требует меньше кода для достижения базового html2pdf рендеринга вещей, обрабатывающих ссылки, CSS, изображения, Unicode и т. Д.