@@ -19,9 +19,11 @@ package api
1919import (
2020 "io"
2121 "os"
22+ "sort"
2223 "time"
2324
2425 "github.com/pdfcpu/pdfcpu/pkg/log"
26+ "github.com/pdfcpu/pdfcpu/pkg/pdfcpu"
2527 "github.com/pdfcpu/pdfcpu/pkg/pdfcpu/model"
2628 "github.com/pdfcpu/pdfcpu/pkg/pdfcpu/types"
2729 "github.com/pkg/errors"
@@ -134,7 +136,7 @@ func RemovePages(rs io.ReadSeeker, w io.Writer, selectedPages []string, conf *mo
134136 conf .Cmd = model .REMOVEPAGES
135137
136138 fromStart := time .Now ()
137- ctx , durRead , durVal , durOpt , err := ReadValidateAndOptimize (rs , conf , fromStart )
139+ ctx , _ , _ , _ , err := ReadValidateAndOptimize (rs , conf , fromStart )
138140 if err != nil {
139141 return err
140142 }
@@ -143,31 +145,38 @@ func RemovePages(rs io.ReadSeeker, w io.Writer, selectedPages []string, conf *mo
143145 return err
144146 }
145147
146- fromWrite := time .Now ()
147-
148- pages , err := PagesForPageSelection (ctx .PageCount , selectedPages , false , true )
148+ pages , err := RemainingPagesForPageRemoval (ctx .PageCount , selectedPages , true )
149149 if err != nil {
150150 return err
151151 }
152152
153- // ctx.Pagecount gets set during validation.
154- if len (pages ) >= ctx .PageCount {
155- return errors .New ("pdfcpu: operation invalid" )
153+ if len (pages ) == 0 {
154+ if log .CLIEnabled () {
155+ log .CLI .Println ("aborted: missing page numbers!" )
156+ }
157+ return nil
156158 }
157159
158- // No special context processing required.
159- // WriteContext decides which pages get written by checking conf.Cmd
160+ var pageNrs []int
161+ for k , v := range pages {
162+ if v {
163+ pageNrs = append (pageNrs , k )
164+ }
165+ }
166+ sort .Ints (pageNrs )
160167
161- ctx . Write . SelectedPages = pages
162- if err = WriteContext ( ctx , w ); err != nil {
168+ ctxDest , err := pdfcpu . ExtractPages ( ctx , pageNrs , false )
169+ if err != nil {
163170 return err
164171 }
165172
166- durWrite := time .Since (fromWrite ).Seconds ()
167- durTotal := time .Since (fromStart ).Seconds ()
168- logOperationStats (ctx , "remove pages, write" , durRead , durVal , durOpt , durWrite , durTotal )
173+ if conf .ValidationMode != model .ValidationNone {
174+ if err = ValidateContext (ctxDest ); err != nil {
175+ return err
176+ }
177+ }
169178
170- return nil
179+ return WriteContext ( ctxDest , w )
171180}
172181
173182// RemovePagesFile removes selected inFile pages and writes the result to outFile..
0 commit comments