ThinkGeo.com    |     Documentation    |     Premium Support

Pdf file not opening

Hi ThinkGeo Team


I have given all appropriate access rights to ASP.Net in my machine's IIS but when I try to send a map to pdf at first it does not respond at all. When I repeat the process, it fires an exception saying "The process cannot access the file 'C:\WINDOWS\system32\MapSuite PDF Map.pdf' because it is being used by another process."


But when I do the above process right from visual studio, everything goes well. Can you give me a workaround to this problem?


Best Regards,


Vincent



Hi Vincent, 



I think you might use Process.Start method to open the PDF file right? I think there are some options you can test. 

1, Save the pdf file into another folder such as disk d instead of saving to the system folder.

2, Check if the VSweb server is still running, if yes, please stop it.

3, Check if some other program holds PDF file handler such as Adobe Reader etc, if yes, please close it.

4, Do not use Process.Start, just use web method to open it. Such as the code below.


Hope it helps and feel free to let me know if you have more queries.


Thanks,

Howard



OpenPdfFile.txt (641 Bytes)

Hi Howard


Thank you for the reply. I have tried to implement the precedures you gave me as shown in the code below, but if I run it from my project code in VS I get an error access denied for the window.open method. And If I deploy it on web server I get an error on Process.GetProcessesByName("AcroRd32")'


 


 


 Process[] pname = Process.GetProcessesByName("AcroRd32");

            int k = pname.Length;

            if (k != 0)
            {
                string proc_id = System.Diagnostics.Process.GetProcessesByName("AcroRd32")[0].Id.ToString();

                Process proc = Process.GetProcessById(int.Parse(proc_id));
                proc.Kill();
                proc.WaitForExit();
               
            }
            //string filename = "MapSuite PDF Map.pdf";
            document.Save(filename);
           
            OpenPdfFile(filename);
        }



        private void OpenPdfFile(string filename)
        {
            try
            {
                //ClientScript.RegisterStartupScript(this.GetType(), "showPdfFile", "<script language='javascript' type='text/javascript'>function A() {window.open('MapSuite PDF Map.pdf');};A();</script>");
                ClientScript.RegisterStartupScript(this.GetType(), "showPdfFile", "<script language='javascript' type='text/javascript'>function A() {window.open('c:\\GISImageCache\\MapSuite PDF Map.pdf');};A();</script>");
            }
            catch (Win32Exception ex)
            {
                if (ex.Message == "No application is associated with the specified file for this operation")
                {
                    ClientScript.RegisterStartupScript(this.GetType(), "showPdfFile", "<script language='javascript' type='text/javascript'>function A() {alert('Failed to generate PDF file.');};A();</script>");
                }
            }
        }

Best Regards,


Vincent



Hi Vincent, 
  
 I think the problem is that the security of the folder you are saving the PDF files. I tried to save to System32 folder; of cause it is denied. Then I tried save it into the document folder and it’s denied too. Then I add more user or group in the security tab for this folder, it successfully opened without any exception. I don’t know why you want to save the PDF file to a high security folder like system 32, did you consider about saving these pdf files into the configured virtual directory? This is what I was wondering. 
  
 Thanks, 
 Howard 


Hi Howard


Thank you for the reply. In fact I have given full access rights to all users and groups to the folder I have created purposely for storing the pdf file but still I get access denied error message. The code below shows how I am doing it.


 private void OpenPdfFile(string filename)
        {
            try
            {
                string path = @"c:\GISImageCache\MapSuite PDF Map.pdf";               
                ClientScript.RegisterStartupScript(this.GetType(), "showPdfFile", "<script language='javascript' type='text/javascript'>function A() {window.open('" + path + "');};A();</script>");
            }
            catch (Win32Exception ex)
            {
                if (ex.Message == "No application is associated with the specified file for this operation")
                {
                    ClientScript.RegisterStartupScript(this.GetType(), "showPdfFile", "<script language='javascript' type='text/javascript'>function A() {alert('Failed to generate PDF file.');};A();</script>");
                }
            }
        }

Best Regards,


Vincent



Hi Vincent,  
  
 Could you show me your IIS version? I tested with IIS7 and it works fine if I have full security of the folder. Here is our online sample which uses the same method and it works fine on our side. 
 websamples.thinkgeo.com/Samples/Extending%20MapSuite/UsePdfExtension.aspx 
  
 I really need to recreate your issue and then fix it; very sorry for the inconvenience. 
  
 Thanks, 
 Howard

Hi Howard


Thank you for the reply. My development machine is using windows XP professional. I read somewhere over the web that windows XP runs IIS 5.1


Best Regards,


Vincent 



 


Hi Vincent,
Just as Howard has mentioned, it’s a windows credentials issue. When the application runs in IIS, it will run with the Asp.net account, so we need to give the complete trust to that account and “Asp.net worker process”, please refer to support.microsoft.com/kb/555134 for detail and solution. But I don’t think that’s a good way to be taken, there will be security risk for the server, am I right? The workaround is that we can open it with the help of browser’s built-in security capability using JavaScript, because Windows always gives the full control to Browser to start any process. The attached is a demo about it.
Thanks,
Johnny

Hi Johnny


Thank you for the reply. I can not see the attached demo showing how to open pdf file using JavaScript. Can you re-attach it please?


Best Regards,


Vincent



Hi Vincent,


Sorry for the missing, Here it is.


Thanks,


Johnny



UsePdfExtension.zip (3.12 KB)

Hi Johnny & Howard


Thank you very much indeed gentlemen as I am now successfully able to export maps to pdf file.


Best regards,


Vincent



Hi Vincent,  
  
 Glad to hear that it works now. Any questions please be free to post it here. 
  
 Thanks, 
 Johnny