We’ve
recently deployed SP2010 at a new client .Things are dandy, except the
users are complaining that they are prompted to save PDFs when they
click on them, instead of the PDF opening up in Adobe Acrobat. What??
That seems insane, but it turns out it is “by design” as I found out on
Sean’s blog: http://blog.brainlitter.com/archive/2010/05/19/sharepoint-2010-treats-pdf-and-other-file-types-as-insecure.aspx
This
worked on the top level site collection ,but not on doc libs on other
site collections in the web application, so I saw within this forum
post: http://social.technet.microsoft.com/Forums/en-US/sharepoint2010setup/thread/80365b88-937a-4188-85ef-45cbdc2cd10d that someone suggested the following:
“The
http header X-Download-Options: noopen is added by the Browser File
Handling and the two setting that are in it. But the Read-only and
Edit prompt are driven by SharePoint and a setting in the DOCICON.XML
file. If you have added PDF as a Document extension inside the
DOCICON.XML you will need to also add an additional attribute in the
line and that is opencontrol=”” this seems to stop SharePoint from
applying it's header to open the document. <Mapping Key="pdf" Value="icpdf.gif" OpenControl=""/> “
I did this as well but
we were still getting prompted. Oddly enough, if you checked out
the document, then you could open the PDF directly. Also, NEW doc
libraries on these sites would open PDFs correctly. This is all very
strange.
I then tried changing
the document library setting to force documents to open in the the
client application. (Settings > Advanced Settings > Opening Files
in the Browser). Still no luck.
At
this point, my instinct was that some setting on the document library,
that I could not see from the UI, was not getting properly set when I
changed the web application level setting.
Well, thanks to Todd Klindt’s blog, http://www.toddklindt.com/blog/Lists/Posts/Post.aspx?ID=214,
plus some Powershell wrangling, I was able to find a way to go to the
properties of the doc lib and verify that it’s BrowserFileHandling
property was still set to “Strict”!
PS C:\ > Add-PSSnapin Microsoft.SharePoint.Powershell
PS C:\> $site = Get-SPSite(“http://mysubsitecollectionurl”)
PS C:\> $web = $site.OpenWeb()
PS C:\> $list = $web.GetList(“http://mysubsitecollectionurl/List”);
PS C:\> $list.browserfilehandling
Strict
No wonder we were
still having issues! Using powershell, I was able to set this property
to “Permissive”, and my PDFs immediately began opening in Adobe. Whoo
hoo!
PS C:\> $list.browserfilehandling = “Permissive” ; $list.update();
PS C:\> $list.browserfilehandling
Permissive
Now I want to be able
to go through all my existing doc libs and switch that property.
Unfortunately there wasn’t any way to filter out which libraries needed
to be switched (manually created ones) and ones that did not (default
SharePoint doc libs), so I ended up going through the sites on a case by
case basis, mostly driven off the doc lib names b/c we had used site
templates to deploy the same doc libs to the different sites.
PS
C:> foreach ($list in $rsrWeb.Lists) { if($list.title -match
"Documents") { if($list.browserfilehandling -eq "Strict") {
$list.browserfilehandling = "Permissive"; $list.update(); $site.url,
$list.title, $list.browserfilehandling} } }
Use the line above to copy into your Powershell window, but let me break it out down below:
foreach ($list in $web.Lists)
{
if($list.title -match "Documents") //return any
lists with a title containing “Documents”
{
if($list.browserfilehandling -eq "Strict") //if the profile is
set to strict
{
$list.browserfilehandling = "Permissive";
$list.update();
$site.url, $list.title, $list.browserfilehandling //print
the list url/name for verification
}
}
}
Woo hoo!! Hope this helps you out when dealing with WHY THE HECK is SharePoint hating on PDFs??!!
14 comments:
I am trying our your method on my sites, but I cannot seem to work with any site other than the top-level site in the site collection. This script will not allow me to get into lists within subsites of that site collection to make necessary changes.
Yes, this script is to go on a site by site basis. So if you start out by setting $site = Get-SPSite([Enter your subsite url here]) you should be able to get to your subsite lists.
I did this on a site by site basis b/c my lists were different on different sites. You could probably write a powershell script to recursively go through all the subsites in a site and all the lists in each subsite. I just did not do this b/c I did not need to at the time.
I tried this, but when I got to the last PS command (to show the current browserfilehandling), it didn't give any feedback. Any suggestions?
@The 200 - if you type
$list.Title
do you get anything back? Want to ensure you actually loaded the list.
Thanks for posting this...very informative and helpful.
Thanks for the info, I was banging my head against the wall trying to figure out why I was not in permissive.
Thanks for the information. I was banging my head against the wall trying to figure out why I was not in permissive.
Sharepoint appears to be determined to shred my sanity one point at a time.
Everything in the system says this should work. The admin site says it's set to permissive. The library reports permissive at the PowerShell. And yet it still prompts me to save every single PDF in the library rather than just opening it. I've checked IE's settings, Acroread's settings. Chrome saves the file, Firefox gives you the option to open or save.
I've even tried rebooting the Sharepoint server.
Any thoughts?
Right. Definitely failed a SAN check somewhere there. 3 site collections, guess which one I'd not set to Permissive.
So, note for the future. Even if the library itself reports permissive when you check, that gets over-ridden if you've not set the site collection to permissive.
Aarrgh!
Wow, nice find. Sorry I couldn't help ya before, but thanks for reporting your solution here!
Thanks so much for the help. I have not been able to find where we can set a site collection to Permissive? Can someone help??
Thanks
Hi There,
I set the site collection to permissive, i ran the powershell commands and it says that the library is also permissive.
Still no luck.
Do i have to take some more steps ?
Thanks in advance!
I have read this was fixed in the december sharepoint 2010 cumulative update, can anyone confirm that?
Nice ^-^ this solved my problems
Post a Comment