2013-12-04 5 views
-1

Я использую ITextSharp для создания pdf в ASP.net, все отлично работает на моем локальном компьютере, когда я запускаю его на сервере IIS, pdf создается успешно и может быть открытым и просматривать в папка сделана, но я не могу открыть pdf программно с C#. Я использую Process.Start(path), чтобы открыть файл.Не удается открыть pdf, созданный ITextSharp

PdfWriter.GetInstance(doc, new FileStream(Server.MapPath("TransferLetter/" + filenamee), FileMode.Create)); 
doc.Open(); 

DateTime date = DateTime.Now.Date; 
html = html.Replace("[Date]", Request["Date"] + ""); 
html = html.Replace("[Address]", Request["MailingAddress"].ToString()); 
html = html.Replace("[PlotNo]", Request["PlotNumber"].ToString()); 
html = html.Replace("[Block]", Request["Block"].ToString()); 
html = html.Replace("[Size]", Request["PlotSize"].ToString()); 


string pa = Server.MapPath("TransferLetter/" + filenamee); 
System.Diagnostics.Process.Start(pa); 
+1

, пожалуйста, поделитесь своим кодом. –

+0

Перейдите к команде запуска и укажите точный путь, который вы передаете для Process.Start(), и посмотрите, работает ли он. В основном путь к файлу неверен. – Kurubaran

+0

Вы пытаетесь открыть Acrobat Reader изнутри IIS? Или с какой-то другой машины? Process.Start ничего не читает. Он выполняет команды или запускает зарегистрированную программу для указанного документа. Он откроет только читатель для документа, если на самом деле установлен ридер. Другими словами, вы установили Acrobat Reader на машине, где вы запустили Process.Start? –

ответ

0

вам нужно использовать ~tilde оператору задать путь по current project папку,

Попробуйте:

string pa = Server.MapPath("~/TransferLetter/" + filenamee); 
1

Это никогда не будет работать таким образом. System.Diagnostics.Process.Start() работает на сервере, а не на клиенте. Когда вы разрабатываете на своем локальном компьютере, вы находитесь исервер и клиент поэтому он работает, но как только вы отделите эти два, вы получите свой сбой.

Сказать, что еще раз, но по-другому, вы спрашиваете серверу построить свой PDF, а затем вы инструктаж сервера для запуска его локальной копии Adobe Reader и отображением PDF на тот, кто физически вошел в сервер в данный момент. (Хорошо, но не на 100%, но довольно близко.)

Вместо этого вам нужно отправить PDF клиенту, используя что-то вроде Response.Redirect() или Response.Write(). Глядя на ваш код, вы должны быть в состоянии выполнить:

Response.Redirect("TransferLetter/" + filenamee) 

Использование iTextSharp вы на самом деле не нужно даже писать PDF на диск. Вы можете использовать MemoryStream вместо FileStream, позвонить MemoryStream.ToArray() написать перед удалением его и использовать Response.Write() на этом массиве байтов. Если вы пишете небольшие PDF-файлы и/или планируете доступ к нескольким людям, это может быть более безопасным способом.

+0

Я, ваше предложение, кажется, лучшее, я слышал что-то вроде этого от друга, я попробую это сегодня. Надеюсь, это сработает. И жаль, что я еще не могу проголосовать. : / –

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