@@ -14,6 +14,8 @@ import (
1414 "strings"
1515 "sync"
1616 "text/template"
17+
18+ "github.com/Masterminds/semver/v3"
1719)
1820
1921var (
@@ -153,6 +155,25 @@ func (s *Session) Thumbnail(page int) (string, error) {
153155 return thumbPath , nil
154156}
155157
158+ func getInkscapeVersion () (* semver.Version , error ) {
159+
160+ cmd := exec .Command ("inkscape" , "--version" )
161+ verBytes , err := cmd .Output ()
162+ if err != nil {
163+ return nil , fmt .Errorf ("failed to get inkscape version: %s" , cmdErr (err ))
164+ }
165+ verMatch := regexp .MustCompile (`(?i)inkscape\s+([0-9.]+)` ).FindStringSubmatch (string (verBytes ))
166+ if verMatch == nil {
167+ return nil , fmt .Errorf ("failed to parse inkscape version: %s" , string (verBytes ))
168+ }
169+ sv , err := semver .NewVersion (verMatch [1 ])
170+ if err != nil {
171+ return nil , fmt .Errorf ("failed to parse inkscape version: %s" , string (verMatch [1 ]))
172+ }
173+
174+ return sv , nil
175+ }
176+
156177// Annotate blocks and launches Inkscape to annotate the page.
157178// It returns true if the page was annotated by the user this time around.
158179func (s * Session ) Annotate (page int ) (bool , error ) {
@@ -165,10 +186,25 @@ func (s *Session) Annotate(page int) (bool, error) {
165186
166187 srcPath := s .srcPath (page )
167188 if _ , err := os .Stat (srcPath ); err != nil {
168- cmd := exec .Command ("inkscape" , "--pages=" + strconv .Itoa (page + 1 ), "--export-type=svg" ,
189+
190+ // Page selection flag has changed between Inkscape versions. Check the
191+ // inkscape version first.
192+
193+ sv , err := getInkscapeVersion ()
194+ if err != nil {
195+ return false , err
196+ }
197+ var pagesFlag string
198+ if sv .LessThan (semver .MustParse ("1.3.0" )) {
199+ pagesFlag = "--pdf-page="
200+ } else {
201+ pagesFlag = "--pages="
202+ }
203+
204+ cmd := exec .Command ("inkscape" , pagesFlag + strconv .Itoa (page + 1 ), "--export-type=svg" ,
169205 "--pdf-poppler" , "--export-filename=" + srcPath + ".svg" , s .path )
170206 if _ , err := cmd .Output (); err != nil {
171- return false , fmt .Errorf ("failed to convert page %d of '%s' to svg: %s" , page , s .path , cmdErr (err ))
207+ return false , fmt .Errorf ("failed to convert page %d of '%s' to svg: %s" , page + 1 , s .path , cmdErr (err ))
172208 }
173209 _ = os .Rename (srcPath + ".svg" , srcPath )
174210 }
0 commit comments