Guides
复制页面
ComPDF React Native SDK 提供页面复制接口,用于复制当前 PDF 文档中的指定页面,并将复制后的页面插入到目标位置。这个接口适合用于页面重排、模板页复用和快速生成相似内容页面的场景。
API 概览
页面复制接口位于 CPDFDocument:
ts
copyPage(pageIndex: number, insertIndex: number): Promise<boolean>;参数说明:
| 参数 | 说明 |
|---|---|
pageIndex | 要复制的源页面索引,从 0 开始 |
insertIndex | 复制页面插入位置,从 0 开始;传入 -1 时表示追加到文档末尾 |
返回值为 Promise<boolean>:
true:页面复制并插入成功。false:页面索引无效、插入位置无效,或原生平台复制失败。
复制指定页面
使用 copyPage(pageIndex, insertIndex) 可以复制当前文档中的某一页,并将副本插入到指定位置。
tsx
const result = await pdfReaderRef.current?._pdfDocument.copyPage(0, 1);
console.log("Copy page result:", result);上面示例会将第 1 页复制一份,并插入到第 2 页之前。
如果将 insertIndex 设为 -1,则会把复制页追加到文档末尾:
tsx
const result = await pdfReaderRef.current?._pdfDocument.copyPage(0, -1);在 CPDFReaderView 中使用
在阅读器页面中,可以通过 CPDFReaderView 实例的 _pdfDocument 调用相同接口。复制完成后,通常需要刷新阅读器页面以显示新的页数。
tsx
import { CPDFReaderView } from "@compdfkit_pdf_sdk/react_native";
async function copyCurrentPage(reader: CPDFReaderView, pageIndex: number) {
const result = await reader._pdfDocument.copyPage(pageIndex, -1);
if (result) {
await reader.reloadPagesPreservingPosition();
}
}这个方式适用于在自定义工具栏、页面菜单或批量页面操作中提供页面复制能力。
完整示例
下面示例演示如何在已加载的阅读器中复制第一页,并将复制页追加到文档末尾。
tsx
import { useRef } from "react";
import { Button } from "react-native";
import { CPDFReaderView } from "@compdfkit_pdf_sdk/react_native";
export default function CopyPageExample() {
const pdfReaderRef = useRef<CPDFReaderView>(null);
const duplicateFirstPage = async () => {
const reader = pdfReaderRef.current;
if (!reader) {
return;
}
const result = await reader._pdfDocument.copyPage(0, -1);
if (!result) {
throw new Error("Copy page failed.");
}
await reader.reloadPagesPreservingPosition();
console.log("Page copied successfully.");
};
return (
<>
<CPDFReaderView
ref={pdfReaderRef}
document="file:///path/to/sample.pdf"
style={{ flex: 1 }}
/>
<Button title="Copy First Page" onPress={duplicateFirstPage} />
</>
);
}注意事项
pageIndex必须是当前文档中存在的页面索引,否则接口会返回false。insertIndex支持0..pageCount,传入-1时表示追加到文档末尾。- 页面复制会改变文档页数,如果你在阅读器中使用该接口,请在成功后刷新页面状态。
- 当文档为空、页面索引无效或原生 SDK 不支持当前文档状态时,接口会返回
false。 - 如果需要复制多页,请按业务顺序多次调用
copyPage,或先将目标页整理后再执行复制。