Salesforce中Blob对象的toPdf方法的字符集问题
我需要打印出pdf文档中的土耳其字符,如“ş”、“ç”、“ü”等。 我正在使用以下代码Salesforce中Blob对象的toPdf方法的字符集问题,salesforce,apex-code,Salesforce,Apex Code,我需要打印出pdf文档中的土耳其字符,如“ş”、“ç”、“ü”等。 我正在使用以下代码 global class InvoicePDFGenerator { public static final String FORM_HTML_START = '<HTML><BODY>'; public static final String FORM_HTML_END = '</BODY></HTML>'; webservice
global class InvoicePDFGenerator {
public static final String FORM_HTML_START = '<HTML><BODY>';
public static final String FORM_HTML_END = '</BODY></HTML>';
webservice static void generateInvoicePDF(String invoiceId){
OppoInvoice__c invoice= [SELECT Id,Account_Name__c FROM OppoInvoice__c WHERE Id=:invoiceId];
String pdfContent = '';
try {
pdfContent = '<html><head><meta http-equiv=content-type content=text/html;charset=iso-8859-9></meta></head><body>';
pdfContent = pdfContent + '<P>' + invoice.Account_Name__c+ '</P>';
pdfContent = pdfContent + FORM_HTML_END;
}catch(Exception e){
pdfContent = '' + FORM_HTML_START;
pdfContent = pdfContent + '<P>THERE WAS AN ERROR GENERATING PDF: ' + e.getMessage() + '</P>';
pdfContent = pdfContent + FORM_HTML_END;
}
Attachment attachmentPDF = new Attachment();
attachmentPDF.parentId = invoice.Id;
attachmentPDF.Name = 'Invoice.pdf';
attachmentPDF.body = Blob.toPDF(pdfContent); //This creates the PDF content
insert attachmentPDF;
}
}
全局类InvoicePDFGenerator{
公共静态最终字符串FORM_HTML_START='';
公共静态最终字符串形式_HTML_END='';
webservice静态void generateInvoicePDF(字符串invoiceId){
OppoInvoice\uuuuuC发票=[从OppoInvoice\uuuuC中选择Id、帐户名称\uuuuuuC,其中Id=:invoiceId];
字符串pdfContent='';
试一试{
pdfContent='';
pdfContent=pdfContent+''+发票。账户名称\uuuu c+'
';
pdfContent=pdfContent+FORM\u HTML\u END;
}捕获(例外e){
pdfContent=''+表单\u HTML\u开始;
pdfContent=pdfContent+'生成PDF时出错:'+e.getMessage()++'
';
pdfContent=pdfContent+FORM\u HTML\u END;
}
附件attachmentPDF=新附件();
attachmentPDF.parentId=invoice.Id;
附件pdf.Name='Invoice.pdf';
attachmentPDF.body=Blob.toPDF(pdfContent);//这将创建PDF内容
插入附件PDF;
}
}
我认为问题是由附件pdf.body=Blob.toPDF(pdfContent)行引起的。您对这个问题有什么想法吗?这可能是您应该向Salesforce报告的
Blob.toPDF
方法的一个限制
我能想到的最接近的解决方案是对每个字符串使用escapeHtml4()
方法,但这只包括字符实体的子集。它将示例字符串'abcşidça'
转换为'abcşidç;a'
如果
meta
标记不太可能影响输出,您可以尝试仅使用
启动HTML,看看这是否有帮助。我将带有土耳其语字符的字符串常量推入pdfContent。输出为“öçÖÜ”
对于输入值为“çşāıāŞĞ࢜”
这是没有查询的代码
global class AccountPDFGenerator
{
webservice static void generateInvoicePDF(String accountId)
{
// Account account = [SELECT Id,Name FROM Account WHERE Id=:accountId];
String accId = accountId;
String pdfContent = '';
try
{
pdfContent = '<html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-9"></meta></head><body>';
pdfContent = pdfContent + '<p style="color:red">' + 'öçşğüıÖÇŞĞÜİ' + '</p>';
pdfContent = pdfContent + '</body></html>';
}catch(Exception e)
{
pdfContent = pdfContent + '<P>THERE WAS AN ERROR GENERATING PDF: ' + e.getMessage() + '</P>';
}
pdfContent = 'öçşğüıÖÇŞĞÜİ';
Attachment attachmentPDF = new Attachment();
attachmentPDF.parentId = accId;
attachmentPDF.Name = 'Invoice.pdf';
// attachmentPDF.body= Blob.valueOf(pdfContent);
attachmentPDF.body = Blob.toPDF(pdfContent); //This creates the PDF content
insert attachmentPDF;
}
}
这是html文件内容
<html><head><meta http-equiv=content-type content=text/html;charset=iso-8859-9></meta></head><body><p>öçşğüıÖÇŞĞÜİ</p></body></html>
发生了什么?我假设Salesforce在其字符串中使用UTF-8。您是否尝试省略了试图设置charset=iso-8859-9
的META
标记?我也尝试了UTF-8,但结果没有改变。代码工作正常,但不显示土耳其语字符。例如,如果pdfContent变量的值为“abcşidça”,则pdf文档的输出为“abcida”。它是如何编写一个元标记的?你能给我举个例子吗?(1)你能发布一个不使用查询的代码版本吗?换句话说,您可以将带有土耳其语字符的字符串常量推送到pdfContent中吗。这将允许其他人(如我)在不同的条件下尝试Blob.toPDF()。(2) 你能用这些相同的土耳其语字符创建一个html文件,并验证这个文件在浏览器中工作。这是一个没有查询的代码<代码>全局类AccountPDFGenerator{webservice静态void generateInvoicePDF(字符串accountId){//Account Account=[选择Id,帐户名称,其中Id=:accountId];字符串pdfContent='çşĞııÌĞÜİ';附件附件附件PDF=新附件();attachmentPDF.parentId=accountId;attachmentPDF.Name='Invoice.pdf';//attachmentPDF.body=Blob.valueOf(pdfContent);attachmentPDF.body=Blob.topf(pdfContent);//这将创建pdf内容插入attachmentPDF;}
<html><head><meta http-equiv=content-type content=text/html;charset=iso-8859-9></meta></head><body><p>öçşğüıÖÇŞĞÜİ</p></body></html>