// transforms the page tree from the file into an array of pages func getPages(file *pdf.File, ref pdf.ObjectReference) []pdf.Dictionary { pages := []pdf.Dictionary{} pageNode := file.Get(ref).(pdf.Dictionary) switch pageNode["Type"] { case pdf.Name("Pages"): for _, kidRef := range pageNode["Kids"].(pdf.Array) { kidPages := getPages(file, kidRef.(pdf.ObjectReference)) pages = append(pages, kidPages...) file.Free(kidRef.(pdf.ObjectReference).ObjectNumber) } case pdf.Name("Page"): pages = append(pages, pageNode) file.Free(ref.ObjectNumber) default: panic(string(pageNode["Type"].(pdf.Name))) } return pages }