该错误通常是由于将非文本数据(二进制数据)作为UTF-8字符串进行处理而导致的。解决方法是将二进制数据正确地转换为UTF-8字符串。
以下是一个使用Apex代码解决此问题的示例:
// 获取二进制数据(BLOB对象)
Blob imageBlob = [SELECT Body FROM Attachment WHERE Id = 'attachmentId'].Body;
// 将二进制数据转换为Base64编码的字符串
String base64String = EncodingUtil.base64Encode(imageBlob);
// 将Base64编码的字符串转换为UTF-8字符串
String utf8String = EncodingUtil.base64Decode(base64String).toString();
// 创建PDF对象并将UTF-8字符串写入PDF
PdfDocument pdfDoc = new PdfDocument();
pdfDoc.load(utf8String);
// 将PDF保存到文件系统或其他位置
pdfDoc.save('filePath');
在上面的示例中,首先从数据库中获取二进制数据(BLOB对象)。然后使用EncodingUtil.base64Encode()
方法将二进制数据转换为Base64编码的字符串。接下来,使用EncodingUtil.base64Decode()
方法将Base64编码的字符串转换为UTF-8字符串。最后,使用PdfDocument类将UTF-8字符串写入PDF并保存到文件系统或其他位置。
请根据实际需求调整代码中的变量和方法。