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

JavaScript中使用iText遇类型错误:FileChannelRandomAccessSource非函数

TIFF转PDF的JavaScript代码报错排查

我将Java的TIFF转PDF代码转换为JavaScript(基于iText库),代码如下:

// 原Java示例改编
importPackage(java.io);
importPackage(org.apache.commons.io);
importPackage(com.itextpdf.text.Document);
importPackage(com.itextpdf.text.Image);
importPackage(com.itextpdf.text.Rectangle);
importPackage(com.itextpdf.text.io.FileChannelRandomAccessSource);
importPackage(com.itextpdf.text.pdf.PdfWriter);
importPackage(com.itextpdf.text.pdf.RandomAccessFileOrArray);
importPackage(com.itextpdf.text.pdf.codec.TiffImage);

function generatePdfFromTiff(sourceFile)  
{
       var aFile = new RandomAccessFile(sourceFile, "r");
        var inChannel = aFile.getChannel();
        var fcra =  new FileChannelRandomAccessSource();
        
        var document = new Document();
        var baos = new java.io.ByteArrayOutputStream();
        PdfWriter.getInstance(document, baos);
        document.open();              
        var rafa = new RandomAccessFileOrArray(fcra);
        
        var pages = TiffImage.getNumberOfPages(rafa);
        var image;
        for (var i = 1; i <= pages; i++) {            
            image = TiffImage.getTiffImage(rafa, i);
            var pageSize = new Rectangle(image.getWidth(), image.getHeight());
            document.setPageSize(pageSize);
            document.newPage();
            document.add(image);
        }
        document.close();
        aFile.close();       

       return org.apache.commons.codec.binary.Base64.encodeBase64String(baos.toByteArray());
}

运行时持续收到错误:

TypeError: [JavaPackage com.itextpdf.text.io.FileChannelRandomAccessSource] is not a function, it is object.

问题原因及解决方法

  • 核心错误:FileChannelRandomAccessSource的实例化缺少必要参数。Java中该类的构造函数需要传入FileChannel对象,当前代码是空参数调用,导致Rhino无法识别为合法的构造函数调用。
  • 修正步骤:
    1. 将var fcra = new FileChannelRandomAccessSource();修改为var fcra = new FileChannelRandomAccessSource(inChannel);,传入之前获取的文件通道对象。
    2. 确保运行环境已正确加载包含com.itextpdf.text.io.FileChannelRandomAccessSource类的iText jar包。
    3. 简化替代方案:可跳过手动实例化FileChannelRandomAccessSource,直接用文件路径初始化RandomAccessFileOrArray,即var rafa = new RandomAccessFileOrArray(sourceFile);,减少中间步骤的出错概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:02:02