使用Google Apps Script调用Labelary API返回空白PDF问题排查
问题原因及修复方案
你的代码存在三个关键错误,导致生成空白PDF:
1. Payload格式错误
Labelary API接收的POST请求体是纯ZPL文本,但你用JSON.stringify(label)把ZPL转成了JSON字符串,API解析后拿到的是带引号的无效ZPL内容,自然生成空白标签。
2. Content-Type设置错误
因为要传递纯文本ZPL,请求头的Content-Type应该设为text/plain,而不是application/x-www-form-urlencoded。
3. 文件写入方式错误
getDataAsString()会把二进制PDF数据转换成字符串,再写入文件时会破坏二进制结构,导致PDF无法正常渲染。应该直接使用HTTP响应的Blob对象来创建文件。
修正后的完整代码
function testPdfConversion() { var zpl = "^xa^cfa,50^fo100,100^fdHello World^fs^xz"; var labelPdf = convertToPdf(zpl); DriveApp.getFoldersByName("Labels").next().createFile("Test.pdf", labelPdf.getBlob(), "application/pdf"); } function convertToPdf(label) { const url = "http://api.labelary.com/v1/printers/8dpmm/labels/4x6/0/"; const options = { method: 'POST', headers: { 'Accept': 'application/pdf', 'X-Linter': 'On' }, contentType: 'text/plain', // 修正Content-Type payload: label // 直接传递ZPL文本,无需JSON转换 }; return UrlFetchApp.fetch(url, options); }
验证说明
修正后:
- API能正确解析ZPL代码生成带"Hello World"的PDF标签
- 直接用Blob写入文件,保留了PDF的二进制结构,打开后能正常显示内容
内容的提问来源于stack exchange,提问作者Thimo
相关产品推荐
相关产品推荐

