Как создать PDF с помощью веб-сервиса - PullRequest
0 голосов
/ 28 марта 2012

Я использую jquery ajax для вызова функции из веб-сервиса.

В этой функции я создаю PDF-файл, используя инструмент itextsharp. Я хочу, чтобы при создании мой PDF-файл открывался в браузере.

Может кто-нибудь помочь мне, какой должен быть мой тип возврата для этого

Ниже приведен код, который я использую в веб-сервисе

 public void GeneratePDf(string ID) {
            string attachment = "attachment; filename=" + ID + ".pdf";
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.AddHeader("content-disposition", attachment);
            HttpContext.Current.Response.ContentType = "application/pdf";
            StringWriter stw = new StringWriter();
            HtmlTextWriter htextw = new HtmlTextWriter(stw);
            htextw.AddStyleAttribute("font-size", "12px");
            htextw.AddStyleAttribute("color", "Black");
            Page pg = new Page();
            HtmlForm frm = new HtmlForm();
            pg.EnableEventValidation = false;

            pg.RenderControl(htextw);
            Document document = new Document();

            document = new Document(PageSize.A4, 10, 10, 0, 0);
            PdfWriter.GetInstance(document, HttpContext.Current.Response.OutputStream);
            document.Open();
            Font verdana = FontFactory.GetFont("Verdana", 10, Font.BOLD, new CMYKColor(75, 68, 67, 90));
            PdfPCell blank1 = new PdfPCell(new Phrase("Hello ", verdana));
            document.Add(blank1);
            //document.Add(tablegrid);
            StringReader str = new StringReader(stw.ToString());
            HTMLWorker htmlworker = new HTMLWorker(document);
            htmlworker.Parse(str);

            document.Close();
            HttpContext.Current.Response.Write(document);
}

Может кто-нибудь сказать мне, что я делаю не так

1 Ответ

0 голосов
/ 28 марта 2012

Короткий ответ: «Не используйте AJAX для этого», вы создаете ненужные осложнения. Вместо этого просто сделайте обычный запрос GET / POST через ваш браузер. Вы все еще можете использовать JavaScript, если хотите, но важная часть заключается в том, что браузер выполняет запрос, чтобы он мог получить ответ.

Длинный ответ ...

Веб-серверы отвечают на запросы веб-браузеров, и все происходит так, как вы ожидаете (обычно). У веб-браузеров есть список типов контента, которые они знают, и используют этот список, чтобы иногда анализировать ответ сервера, а иногда передавать его стороннему приложению. Как только вы начинаете возиться с AJAX и другими подобными технологиями, вы ломаете эту модель и говорите, что хотите обрабатывать обработку вместо браузера. Браузер будет обрабатывать ваш запрос и ответ сервера, но в противном случае он ничего не сделает, если вы не сообщите об этом. Это прекрасно работает для строковых вещей, но становится намного сложнее, когда вы имеете дело с двоичными данными.

...