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

如何用JavaScript在浏览器中检测PDF文件为US Legal或US Letter格式

实现PDF页面格式检测方案

你当前持有的是浏览器端application/pdf类型的File对象,jsPDF本身仅支持PDF生成,不具备现有PDF解析能力,可通过以下方案实现需求:

推荐方案:使用pdf.js实现(稳定性最高)

pdf.js是专门用于浏览器环境的PDF解析库,可直接读取File对象并提取页面尺寸属性,实现逻辑如下:

核心实现代码

// 单位转换常量:PDF默认单位为点,1英寸 = 72点
const INCH_TO_POINT_RATIO = 72;
// 误差阈值,避免PDF生成时的精度问题导致判断失败
const TOLERANCE = 0.1;

async function checkPdfPageFormat(pdfFile) {
  // 1. 将File对象转为ArrayBuffer
  const arrayBuffer = await pdfFile.arrayBuffer();
  
  // 2. 加载PDF文档
  const pdf = await pdfjsLib.getDocument({ data: arrayBuffer }).promise;
  
  // 3. 遍历所有页面提取尺寸(如果仅需判断第一页可直接取页码1)
  const results = [];
  for (let pageNum = 1; pageNum <= pdf.numPages; pageNum++) {
    const page = await pdf.getPage(pageNum);
    const [x1, y1, x2, y2] = page.mediaBox;
    // 计算页面实际宽高(点单位)
    const widthPt = Math.abs(x2 - x1);
    const heightPt = Math.abs(y2 - y1);
    // 转为英寸单位
    let widthIn = widthPt / INCH_TO_POINT_RATIO;
    let heightIn = heightPt / INCH_TO_POINT_RATIO;
    
    // 横竖朝向无关,统一取短边、长边比较
    const shortSide = Math.min(widthIn, heightIn);
    const longSide = Math.max(widthIn, heightIn);
    
    let format = 'other';
    // 判断是否符合US Letter: 8.5in * 11in
    if (
      Math.abs(shortSide - 8.5) <= TOLERANCE &&
      Math.abs(longSide - 11) <= TOLERANCE
    ) {
      format = 'US Letter';
    } 
    // 判断是否符合US Legal: 8.5in *14in
    else if (
      Math.abs(shortSide - 8.5) <= TOLERANCE &&
      Math.abs(longSide - 14) <= TOLERANCE
    ) {
      format = 'US Legal';
    }
    
    results.push({
      pageNum,
      format,
      widthIn,
      heightIn
    });
  }
  
  return results;
}

// 调用示例
// const file = document.querySelector('input[type="file"]').files[0];
// checkPdfPageFormat(file).then(console.log);

轻量备选方案:使用pdf-lib实现

如果项目对包体积要求较高,可以选择更轻量的pdf-lib库实现,核心逻辑和上述一致,仅API调用方式有区别。

注意事项

  • 若PDF设置了裁剪框(CropBox),实际显示尺寸以CropBox为准,可将代码中的page.mediaBox替换为page.cropBox适配这类场景
  • 可根据业务需求调整判断逻辑:如果要求所有页面均符合指定格式,可遍历所有页面统一校验;如果仅需判断首页格式,直接读取第1页即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:12:00