You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React Native(Expo Android)中设置PDF输出为A4尺寸

调整Expo Print生成PDF为A4尺寸并提高DPI的方法

核心思路

通过CSS的@page规则定义PDF页面为A4规格,同时结合目标DPI计算对应像素尺寸,在printToFileAsync中配置渲染参数,实现标准A4尺寸+高DPI的PDF输出。

步骤与代码实现

  1. 计算目标DPI对应的A4像素尺寸
    A4物理尺寸为210mm×297mm,根据目标DPI换算像素:
  • 72PPI(默认):595px × 842px
  • 150PPI:1240px × 1754px
  • 300PPI(常用高分辨率):2480px × 3508px
  1. 编写带页面规格的HTML模板
    在HTML样式中通过@page标记A4尺寸,同时设置html/body的像素尺寸匹配目标DPI:
<!DOCTYPE html>
<html>
<head>
  <style>
    @page {
      size: A4; /* 标记PDF页面为A4规格 */
      margin: 10mm; /* 可选:设置页面边距 */
    }
    html, body {
      width: 2480px; /* 300PPI对应的A4宽度 */
      height: 3508px; /* 300PPI对应的A4高度 */
      margin: 0;
      padding: 0;
      font-size: 18px; /* 高DPI下需适当放大字体,避免过小 */
    }
    /* 自定义账单内容样式 */
    .bill-content {
      padding: 20px;
      line-height: 1.6;
    }
  </style>
</head>
<body>
  <div class="bill-content">
    <h2>账单明细</h2>
    <p>账单编号:BN20240520001</p>
    <p>金额:¥123.45</p>
    <!-- 更多账单内容 -->
  </div>
</body>
</html>
  1. 调用Expo Print生成PDF
    在printToFileAsync中传入HTML模板,并配置与目标DPI匹配的width/height参数:
import * as Print from 'expo-print';
import { shareAsync } from 'expo-sharing';

async function generateA4HighDpiPDF() {
  const htmlTemplate = `
    <!-- 上面的HTML模板内容 -->
  `;

  const printOptions = {
    width: 2480,
    height: 3508,
    fileName: 'a4-bill.pdf',
    backgroundColor: '#ffffff',
  };

  try {
    const result = await Print.printToFileAsync({
      html: htmlTemplate,
      ...printOptions,
    });
    console.log('PDF已生成:', result.uri);
    await shareAsync(result.uri); // 可选:分享生成的PDF
  } catch (error) {
    console.error('PDF生成失败:', error);
  }
}

注意事项

  • 若调整DPI,需同步修改HTML中html/body的尺寸和printOptions里的width/height值。
  • @page的size:A4会确保PDF的文档元数据标记为标准A4,避免打开时页面尺寸异常。
  • 高DPI下需调整字体大小、元素间距,保证内容可读性,避免因像素密度过高导致内容过小。

内容的提问来源于stack exchange,提问作者kashif Nawaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:40:39