I am trying to work out how can I add a relative path hyperlink to a shapefile in QGIS. I have found several great tips on various forums but only one has so far potential to be implemented. The overall goal is for the end user to be able to access a hyperlinked pdf/png/jpg etc without me having to set up any software dependencies under layer properties Actions tab in QGIS. I assume that the end user will have the software required to open a document but I would like the end user's computer to choose a default program to open the files. One of the possibilities would be to use a 'Python' action which I located on one of the forums which after several modifications did not work for me: http://lists.osgeo.org/pipermail/qgis-user/2011-May/012117.html.

Here is the screenshot of my layer's action properties: enter image description here

In the attribute table, the column with hyperlink is called 'PDF and the relative hyperlink is: /doc/document.pdf

My folder structure is:

 - /HyperlinksTest
 -- /data
 --- Renewable_Energy_Zones.shp
 -- /doc
 --- document.pdf

When I identify the feature, I get the following Python error:

enter image description here

Am I using wrong variables in the Python code? Is there any other way of using relative paths in hyperlinking data to external documents? I noticed there is eVis extension but as far as I see it relies on specyfying software to open a document with, which I'd like to avoid.

Many thanks, Magda

  • 1
    Why you dont use that generic action to open pdf ( cmd /c file.pdf ) actually that "cmd /c filename" uses system default to open any file. about taht python code, you have Path+doc wrong, Path + "/doc/document.pdf" should work. Commented Jan 9, 2013 at 13:38
  • Thanks for your suggestions. I have previously tried a generic action (cmd /c [% "Field Name" %]) which used absolute path to the pdf document and it work fine, however it does not worknot work for me with relative paths. As you suggested, I tried o use cmd /c myfilename.pdf as a Generic Action but the pdf doesn't open....... I didn't mention I actually have more than 1 pdf document associated with the shapefile (at least 2 polygons) so not sure how would that work with the cmd /c myfilename.pdf action?
    – Magda
    Commented Jan 9, 2013 at 15:08
  • With your Python suggestion, I managed to open my pdf document when included "/doc/document.pdf" at the end, however have you got a suggestion for how to perform the same action when having eg 10 attributes each linked to a different pdf in the same folder? Many thanks, Magda
    – Magda
    Commented Jan 9, 2013 at 15:15

1 Answer 1


Something like this should work:

from os import startfile
from os.path import abspath, dirname, join
proj = QgsProject.instance()
urfile = str(proj.fileName())
path = join(abspath(dirname(urfile)), "HyperlinksTest", "[% PDF %]")

You can just paste this in as in you don't need to have it all one one line.

  • 1
    Hi Nathan, thanks for your code - it works with a little addition: in the table of contents I needed to insert '..' just before the relative path so eg. '../doc/document.pdf'. Anyway, all is working now, thanks very much!
    – Magda
    Commented Jan 10, 2013 at 9:38
  • @Magda don't forget to tick the accept button so we can close the question off.
    – Nathan W
    Commented Jan 11, 2013 at 4:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.