首页 > 解决方案 > 在 AWS Lambda 上从 TIFF 转换为 PDF 的最简单方法

问题描述

我正在开发一个需要获取 TIFF 文件并将其转换为 PDF 的 AWS Lambda 应用程序。我正在大量使用 ImageMagick,所以最简单的方法是:convert input.tif output.pdf. 这在我的 Mac 环境中运行良好,但无法在 Lambda 环境中转换为真正的 PDF。

基于 Lambda 构建的 ImageMagick 似乎不支持 PDF。如果我convert -list format在 Lambda 环境中运行,则没有 PDF 条目。这是我的测试 Lambda 函数:

const im = require('imagemagick');
const fs = require('fs');

exports.handler = (event, context, callback) => {
  var inputFileName = 'input.tif';
  var imagesPath = 'assets/images';
  var outputFile = '/tmp/output.pdf';


  var args = [
    imagesPath+'/'+inputFileName,
    '-format',
    'pdf',
    outputFile
  ];

  im.convert(args,
    function(err, stdout, stderr){
      if (err) throw err;
      console.log('stdout:', stdout);
      var imageRef = fs.readFileSync(outputFile);
      callback(null, {
        statusCode: 200,
        headers: {
          'Content-Type': 'application/pdf',
          'Content-Disposition': 'attachment; filename=output.pdf'
        },
        body: imageRef.toString('base64'),
        isBase64Encoded: true
      });
    });
}

当我运行identify output.pdf(即下载的文件)时,该文件被报告为 TIFF 文件:

/Users/myuser/Downloads/output.pdf TIFF 517x243 517x243+0+0 8-bit CMYK 1.1314MiB 0.000u 0:00.009

所以 ImageMagick 似乎只是将它作为 TIFF 文件传递​​。

我试过使用 tiff2pdf - 它安装在本地;不确定 Lambda - 但这甚至不适用于我的 Mac。我收到一条错误消息:

tiff2pdf: No support for /path/to/input.tif with 5 samples per pixel.

标签: pdfaws-lambdaimagemagick-convert

解决方案


推荐阅读