Skip to content

Commit f5a93cd

Browse files
committed
Update deps and use correct page flag for inkscape version
1 parent c6371e0 commit f5a93cd

3 files changed

Lines changed: 46 additions & 3 deletions

File tree

go.mod

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@ module github.com/oxplot/pdfrankenstein
22

33
go 1.18
44

5-
require github.com/gotk3/gotk3 v0.6.1
5+
require (
6+
github.com/Masterminds/semver/v3 v3.2.1
7+
github.com/gotk3/gotk3 v0.6.2
8+
)

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,6 @@
1+
github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0=
2+
github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
13
github.com/gotk3/gotk3 v0.6.1 h1:GJ400a0ecEEWrzjBvzBzH+pB/esEMIGdB9zPSmBdoeo=
24
github.com/gotk3/gotk3 v0.6.1/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
5+
github.com/gotk3/gotk3 v0.6.2 h1:sx/PjaKfKULJPTPq8p2kn2ZbcNFxpOJqi4VLzMbEOO8=
6+
github.com/gotk3/gotk3 v0.6.2/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=

session/session.go

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import (
1414
"strings"
1515
"sync"
1616
"text/template"
17+
18+
"github.com/Masterminds/semver/v3"
1719
)
1820

1921
var (
@@ -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.
158179
func (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

Comments
 (0)