SharePoint Tip of the Day – Reminder on how to install Adobe PDF IFilter in SharePoint 2010


There are an outstanding amount of walkthroughs on the web to do it but some are missing some steps or overcomplicating the task. Here’s thus the recipe I give when I deliver projects requiring pdf content results.

  1. Install PDF iFilter 9.0 (64 bit) from http://www.adobe.com/support/downloads/detail.jsp?ftpID=4025
  2. Download PDF icon picture from Adobe web site http://www.adobe.com/misc/linking.html or used the one attached

    Pdf

    (the one from adobe is not clean IMHO) and copy to C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions14TEMPLATEIMAGES 

  3. Add the following entry in C:Program FilesCommon FilesMicrosoft SharedWeb Server Extensions14TEMPLATEXMLdocIcon.xml <Mapping Key=”pdf” Value=”pdf.gif” />
  4. Add a pdf file type on the File Type page under Search Service Application
  5. Open regedit and navigate to the following location HKEY_LOCAL_MACHINESOFTWAREMicrosoftOffice Server14.0SearchSetupContentIndexCommonFiltersExtension. Right-click > Click New > Key to create a new key for .pdf and add the following GUID in the default value {E8978DA6-047F-4E3D-9C78-CDBE46041603}
  6. KB article ask to restart the SharePoint Server Search 14 service and to reboot the SharePoint servers in the farm better not skip that part (and schedule it wisely in production).
  7. Perform a full crawl on all your content sources to get the pdf within your results.

If price is not an issue (hmmm…), you should consider the Foxit IFilter, which offers much better performance (by lowering the time for the crawls). In the meantime, the adobe way is working and fully supported.

Happy configuring

SharePoint Tip of the day : AAM, Hosts, Bindings, Search Scopes and Server Name Mappings reminder


As a SharePoint developer, I don't have to play too much with all the administrative tasks when I'm outside of my VMs as our IT service is responsible for ensuring the proper health status of the production facing site. So stuff like Alternate Access Mappings, Bindings and Server Name Mappings were quite new for me.

So, here is a small reminder of the steps that I did to have my site collection accessible through a fake public url (eg : http://www.company.com) instead of http://sharepoint-dev-01 and ensure the search results are returned properly using the right url.

  • Edit the host file on the server, make 127.0.0.1 point to http://www.company.com
  • Edit the IIS binding (inetmgr -> point the relevant website entry -> bindings and add a new one with www.company.com as the host name on port 80 (all ip addresses unassigned)
  • Add an Internet Alternate Access Mapping for your computer name (in my example : http://sharepoint-dev-01)
  • Fire up your browser and access your website through the new url (you can launch Fiddler and have a look at all requests / responses to ensure everything is properly mapped

The most important part is now what to do (or what to avoid) to ensure that your search is working as you would expect it to do. The general idea is to stick with the server name as the host name instead of already playing with the AAM name. The alternate access mapping created previously will take care of all url rewritting so do not do like me and don't mess your content source or scopes with the fully qualified domain name !

  • Ensure your content source is pointing to the server name instead of the fully qualify domain name (eg : http://sharepoint-dev-01)
  • Ensure all relevant scopes are using the server name instead of the fully qualify domain name on your folder rules (eg Folder = http://sharepoint-dev-01/be-en/products/)
  • Make a full crawl
  • Enjoy your search results being served with the fully qualified domain name when your search page is accessed through http://www.company.com

It must be possible to adapt url of the search results through the "server name mappings" configuration screen but I've never been able to make it work as expected. I guess the main culprit was the fact that I mixed fqdn and server name at various place which confused the search service.

I'll never stop learning 🙂