pdf - 在 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.
解决方案
推荐阅读
- aframe - AFrame - 使用 setAttribute 更改控件类型
- c++ - 为什么 std::condition_variable 采用 unique_lock 而不是 lock_guard?
- ios - Xcode / Swift 在键盘打开时调整 UIWebView 的大小
- jquery - 如何在不加载 MVC 中的 html 的情况下更新部分数据
- javascript - SAPUI5 模拟服务器不接收请求
- javascript - 平均分配一组总数的最佳方法是什么?
- python - 如何使用 Selenium 24x7 直到出现任何错误
- django - Django使用另一个表的查询来更新一个字段
- php - 使用 preg_replace 单步重置位置指针以替换所有出现的模式直到分隔符
- php - Laravel 应用程序使用率超过 90% 的 CPU 使用率对于 100 个并发用户具有高服务器配置