Salesforce中Blob对象的toPdf方法的字符集问题



我需要在pdf文档中打印出土耳其语字符,如"ş","ç","ü"等。我正在使用以下代码。

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;
    }
}

我认为问题是由attachmentPDF.body = Blob.toPDF(pdfContent)线引起的。你对这个问题有什么想法吗?

这可能是您应该向 Salesforce 报告Blob.toPDF方法的限制。

我能想到的最接近的解决方案是对每个字符串使用 escapeHtml4() 方法,但这只涵盖字符实体的子集。 它将您的示例字符串'abcşidça'转换为'abcşid&ccedil;a'

如果 meta 标签影响输出,您可以尝试仅用 <html><body> 启动 HTML,看看是否有帮助。

我将带有土耳其字符的字符串常量推送到 pdfContent 中。Output is 'öçüÖÇÜ'for input value that is 'öçşğüıÖÇŞĞÜİ'.

这是没有查询的代码。

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;
    } 
}

这是为自定义按钮创建的javascript代码,其中设置>自定义>帐户>按钮和链接

{!REQUIRESCRIPT("/soap/ajax/15.0/connection.js")}
{!REQUIRESCRIPT("/soap/ajax/15.0/apex.js")}
sforce.apex.execute("AccountPDFGenerator","generateInvoicePDF", {id:"{!Account.Id}"});
window.alert("Account Id is sent." );

这是 html 文件内容

<html><head><meta http-equiv=content-type content=text/html;charset=iso-8859-9></meta></head><body><p>öçşğüıÖÇŞĞÜİ</p></body></html>

最新更新