@dariyd/ react-native-pdf-页面图像
在 React Industrial 中将 PDF 页面改为 JPEG 或 PNG 图像 。 修建于 新建筑 (土耳其语:Turbo Modules + Codegen).
- iOS系统缩写:PDFKit
- 机器人页:1
安装
npm install @dariyd/react-native-pdf-page-image
# or
yarn add @dariyd/react-native-pdf-page-image
iOS系统
cd ios && pod install
机器人
不需要额外的设置——通过Gradle自动连接.
所需资源
- 原生反应 0.76+ (中文(简体) ) (新架构启用)
- iOS系统 15.0+ (韩语)
- Android API 软件 24岁以上
2.1中有什么新鲜事
PdfPageImage.compress(uri, options?)——写一个PDF的更小的副本,每页重编码为JPEG(默认为150 dpi,质量为70). 页面大小保留;文本成为页面图像的一部分. 在一行背景线上逐行工作,长扫描不会突起内存. Android上的JPEG是直接嵌入的(系统)PdfDocument将存储它们未压缩.
const result = await PdfPageImage.compress('file:///path/to/scan.pdf', { dpi: 150, quality: 70 });
if (result.bytes < result.originalBytes * 0.8) {
// keep result.uri (a file:// in the temp/cache directory)
}
最好的扫描和照片。 用文字制作的PDF(电子邮件发票)可能更大,总是比较 bytes 与 originalBytes。 。 。 .
2.0中的变化
- JPEG 默认输出 (单位:千美元)
quality: 80——~10-20× 扫描/相片页比PNG小. 过{ format: 'png' }对旧行为. - iOS 以真实的 1x 尺度制作 . 之前输出被设备屏幕尺度(现代iPhones上3×)默相乘以,所以
scale: 1.0出产了3×像素——与Android大小不同. 现在 1 PDF 点=scale两个平台上的像素. - 新设
maxDimension选项 ——在不知页面大小的情况下将长边以像素标出. 喜欢缩略图. - 移动了 iOS 临时文件 从应用程序的文档目录到临时目录(如果
close()页:1.
API 密码
PdfPageImage.open(uri)
打开 PDF 并返回页数.
const info = await PdfPageImage.open('file:///path/to/document.pdf');
console.log(info.pageCount); // 5
回返情况: Promise<{ uri: string, pageCount: number }>
PdfPageImage.generate(uri, page, scale?, options?)
将一页刻入图像.
// Full-quality render at 2x
const image = await PdfPageImage.generate('file:///path/to/document.pdf', 0, 2.0);
// Lightweight thumbnail: long edge capped at 640 px
const thumb = await PdfPageImage.generate(pdfUri, 0, 1.0, { maxDimension: 640 });
console.log(thumb.uri); // file:///.../<uuid>.jpg
| 参数 | 类型 | 说明 |
|---|---|---|
uri | string | PDF 文件 URI |
page | number | 页索引 (基于 0) |
scale | number? | 每个 PDF 点的像素( 默认 ): 1.0范围 : 0.1 – 说吧 – 10.0(中文(简体) ) |
options | GenerateOptions? | 输出选项 (以下) |
GenerateOptions数字 :
| 选项 | 类型 | 说明 |
|---|---|---|
format | 'jpeg' | 'png' | 输出编码( 默认 ): 'jpeg'(中文(简体) ) |
quality | number? | JPEG 质量 1- 100( 默认 : 80; 忽略 PNG ) |
maxDimension | number? | 将长边以像素为单位; 需要时缩小有效尺度( 默认 : 0 = 无上限) |
回返情况: Promise<{ uri: string, width: number, height: number }>
PdfPageImage.generateAllPages(uri, scale?, options?)
将所有页面渲染到图像中。 一样 options 作为 generate,每页应用.
const pages = await PdfPageImage.generateAllPages(pdfUri, 1.5, { quality: 90 });
pages.forEach((page, i) => {
console.log(`Page ${i}: ${page.uri} (${page.width}x${page.height})`);
});
回返情况: Promise<Array<{ uri: string, width: number, height: number }>>
PdfPageImage.close(uri)
关闭 PDF 并删除临时图像文件。 解脱记忆后再打这个电话.
await PdfPageImage.close('file:///path/to/document.pdf');
回返情况: Promise<void>
支持的 URI 格式
| 格式 | 示例 |
|---|---|
| 文件路径 | /path/to/file.pdf |
| 文件 URI | file:///path/to/file.pdf |
| HTTP/HTTPS 软件 | https://example.com/doc.pdf |
| Base64 数据 URI | data:application/pdf;base64,JVBERi0... |
| 内容 URI (Android) | content://com.provider/doc.pdf |
示例
import { PdfPageImage } from '@dariyd/react-native-pdf-page-image';
async function renderPdfThumbnails(pdfUri: string) {
try {
const { pageCount } = await PdfPageImage.open(pdfUri);
console.log(`PDF has ${pageCount} pages`);
// Render first page as a lightweight thumbnail
const thumbnail = await PdfPageImage.generate(pdfUri, 0, 1.0, {
maxDimension: 640,
});
// Use thumbnail.uri in an <Image /> component
// Or render all pages at full quality
const allPages = await PdfPageImage.generateAllPages(pdfUri, 2.0, {
quality: 90,
});
// Clean up when done
await PdfPageImage.close(pdfUri);
} catch (error) {
console.error('PDF rendering failed:', error);
}
}
页:1
- 页面按 URI + 页面索引 + 比例 + 选项进行缓存 – 重复调用立即返回缓存结果
- 临时图像文件存储在临时目录(iOS)或缓存目录(Android)中
- 总是打电话
close()当解开内存并删除临时文件时 - 页面绘制在白背景上, 因此 JPEG( 无 alpha 通道) 将一无所有
- 在iOS上自动处理页面旋转( 90°, 180°, 270°)
许可证
麻省理工学院