Skip to content

Commit 29fde63

Browse files
committed
PDFHelper:new:优化脚本导入和处理逻辑、优化缩略图显示
1 parent 0cc765d commit 29fde63

7 files changed

Lines changed: 433 additions & 95 deletions

File tree

PDFHelper/components/PDFHelperView.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,17 @@ export function PDFHelperView() {
115115
() => selectedPages.filter((page) => page.kind === "image").length,
116116
[selectedPages]
117117
)
118+
const selectedTotalPageCount = useMemo(() => {
119+
let count = 0
120+
for (const page of selectedPages) {
121+
if (page.kind === "pdf-whole") {
122+
count += page.pageCount
123+
} else {
124+
count += 1
125+
}
126+
}
127+
return count
128+
}, [selectedPages])
118129

119130
const isBusy = processing || loadingMessage !== null
120131
const canConvert = selectedImageCount > 0 && !isBusy
@@ -332,7 +343,7 @@ export function PDFHelperView() {
332343
<VStack spacing={8} padding={24}>
333344
<Text>点右上角「+」添加文件或照片</Text>
334345
<Text foregroundStyle="secondaryLabel">
335-
图片将显示整图PDF 将按页展示缩略图,可逐页勾选后执行转换或合并
346+
图片将显示整图PDF 可选择按页展示缩略图(文件页数较大时不显示缩略图)或作为整体导入,支持自定义导入页码范围
336347
</Text>
337348
</VStack>
338349
) : (
@@ -352,7 +363,7 @@ export function PDFHelperView() {
352363
<VStack spacing={8} padding={12}>
353364
<HStack>
354365
<Text foregroundStyle="secondaryLabel">
355-
已选择 {selectedPages.length} 页(图片 {selectedImageCount}
366+
已选择 {selectedPages.length} 项 · 共 {selectedTotalPageCount} 页(图片 {selectedImageCount}
356367
</Text>
357368
<Spacer />
358369
{loadingMessage ? (

PDFHelper/components/SourceBlockView.tsx

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ function rowSwipeDelete(onDelete: () => void) {
4545
}
4646

4747
function PdfPreview(props: { page: PageItem }) {
48-
if (props.page.kind !== "pdf") return null
48+
if (props.page.kind === "image") return null
4949

5050
if (props.page.previewImage) {
5151
return (
@@ -147,6 +147,37 @@ function PdfRow(props: {
147147
)
148148
}
149149

150+
function PdfWholeRow(props: {
151+
source: SourceItem
152+
page: PageItem
153+
onTogglePage: (sourceId: string, pageId: string) => void
154+
onDeletePage: (sourceId: string, pageId: string) => void
155+
}) {
156+
if (props.page.kind !== "pdf-whole") return null
157+
const onToggle = () => props.onTogglePage(props.source.id, props.page.id)
158+
159+
return (
160+
<HStack
161+
key={props.page.id}
162+
spacing={10}
163+
padding={{ top: 8, bottom: 8 }}
164+
frame={{ maxWidth: "infinity", alignment: "leading" }}
165+
background={"rgba(0,0,0,0.001)"}
166+
onTapGesture={onToggle}
167+
trailingSwipeActions={rowSwipeDelete(() => props.onDeletePage(props.source.id, props.page.id))}
168+
>
169+
<PdfPreview page={props.page} />
170+
<VStack spacing={6} frame={{ maxWidth: "infinity", alignment: "leading" }}>
171+
<Text>{props.page.title}</Text>
172+
<Text font="footnote" foregroundStyle="secondaryLabel">
173+
{props.source.name}
174+
</Text>
175+
</VStack>
176+
<SelectionMark selected={props.page.selected} selectedOrder={props.page.selectedOrder} />
177+
</HStack>
178+
)
179+
}
180+
150181
export function SourceBlockView(props: {
151182
source: SourceItem
152183
onTogglePage: (sourceId: string, pageId: string) => void
@@ -164,14 +195,22 @@ export function SourceBlockView(props: {
164195
)}
165196
>
166197
{props.source.pages.map((page) =>
167-
props.source.kind === "image" ? (
198+
page.kind === "image" ? (
168199
<ImageRow
169200
key={page.id}
170201
source={props.source}
171202
page={page}
172203
onTogglePage={props.onTogglePage}
173204
onDeletePage={props.onDeletePage}
174205
/>
206+
) : page.kind === "pdf-whole" ? (
207+
<PdfWholeRow
208+
key={page.id}
209+
source={props.source}
210+
page={page}
211+
onTogglePage={props.onTogglePage}
212+
onDeletePage={props.onDeletePage}
213+
/>
175214
) : (
176215
<PdfRow
177216
key={page.id}

PDFHelper/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import { Navigation, Script } from "scripting"
22
import { PDFHelperView } from "./components/PDFHelperView"
3+
import { cleanUpPreviewDirectory } from "./utils/preview"
34

45
async function run() {
56
await Navigation.present({ element: <PDFHelperView /> })
7+
await cleanUpPreviewDirectory()
68
Script.exit()
79
}
810

PDFHelper/types.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export type PageItem = ImagePageItem | PdfPageItem
1+
export type PageItem = ImagePageItem | PdfPageItem | PdfWholeItem
22

33
export type SourceItem = {
44
id: string
@@ -31,6 +31,19 @@ export type PdfPageItem = {
3131
previewFilePath: string | null
3232
}
3333

34+
export type PdfWholeItem = {
35+
id: string
36+
kind: "pdf-whole"
37+
title: string
38+
sourceName: string
39+
selected: boolean
40+
selectedOrder?: number
41+
pdfPath: string
42+
pageCount: number
43+
previewImage: UIImage | null
44+
previewFilePath: string | null
45+
}
46+
3447
export type ImportResult = {
3548
sources: SourceItem[]
3649
notices: string[]

0 commit comments

Comments
 (0)