PDFにバーコードを出力する

SalesforceのVisualforceページで「renderAs=“PDF”」属性を使うと、ページをPDFファイルに書き出すことができます。PDFファイルとは、アドビシステムズ株式会社が開発した文書フォーマットの1つです。PDFにRayBarcodeで生成したバーコードを出力するには、Web APIを使用します。 Web APIを使用するにあたり、アクセストークンの生成が必要となるため、PDFを書き出すVisualforceページの前に、トークンを生成するページの表示が必要です。たとえばSalesforceの画面上に「PDFを表示」ボタンを用意します。ユーザがこのボタンをクリックし、画面がPDFファイルのページに遷移する直前にトークンを生成する方法があります。

前提

次の知識が必要です。

  • Visualforceページの開発
  • JavaScriptの開発

利用手順

ユーザは次の手順で利用します。

sequenceDiagram participant ユーザ participant Salesforce participant RayBarcode ユーザ->>Salesforce: 「PDFを表示」ボタンをクリックする Salesforce->>RayBarcode: ApexかJavaScriptでアクセストークンを要求する RayBarcode->>Salesforce: アクセストークンを返す Salesforce->>RayBarcode: アクセストークンとURLからバーコードを要求する RayBarcode->>Salesforce: バーコード画像を返す Salesforce->>ユーザ: Visualforceで生成したPDFファイルを返す

サンプルコード

まず、PDFを出力するVisualforceページとそのコントローラを作成します。

Salesforce Classicの場合、「設定 > ビルド > 開発 > Apexクラス」に次のコントローラを追加します。Lightning Experienceの場合、歯車アイコンをクリックした後「設定 > プラットフォームツール > カスタムコード > Apexクラス」に次のコントローラを追加します。

// RenderBarcodeAsPDFFilePageController.cls
public class RenderBarcodeAsPDFFilePageController {
    public String qrCodeImageURL {get; set;}
    public String barcodeValue {get; set;}
    static final String GCBARCODE_BASEURL = 'https://gcbarcode.azurewebsites.net';
    
    public RenderBarcodeAsPDFFilePageController()
    {
        this.barcodeValue= System.currentPageReference().GetParameters().get('value');        
        this.qrCodeImageURL = '';        
        String token = gcbc__GcBarcodeSetting__c.getInstance(UserInfo.getUserId()).gcbc__AccessToken__c;        
        this.qrCodeImageURL = GCBARCODE_BASEURL + '/api/Png/qrcode?Width=300&Height=300&value=' + BarcodeValue + '&token=' + token;        
    }
}

その後、このコントローラを呼び出すVisualforceページを追加します。このVisualforceページを「プレビュー」実行しても、この時点では空のPDFファイルが表示されます。

PDFファイルを描画するVisualforceページです。通常のVisualforceページとは異なる「renderAs=“PDF”」属性がPDF出力を示します。

<!-- RenderBarcodeAsPDFFilePage.vfp -->
<apex:page controller="RenderBarcodeAsPDFFilePageController" renderAs="PDF">
    <apex:outputPanel id="barcodeImgPane">
        <apex:image alt="{!BarcodeValue}" url="{!QRCodeImageURL}"/>
    </apex:outputPanel>
</apex:page>

次に、PDFファイルを呼び出すためのVisualforceページとそのコントローラを作成します。このページは「バーコードの値」入力ボックスと「PDFを表示」ボタンを持ちます。ユーザが入力ボックスに任意の値を入力して「PDFを表示」ボタンをクリックすると、その値がQRコードとしてPDFに表示されます。

コントローラを作成するには、Salesforce Classicの場合、「設定 > ビルド > 開発 > Apexクラス」を表示します。Lightning Experienceの場合、歯車アイコンをクリックした後「設定 > プラットフォームツール > カスタムコード > Apexクラス」を表示します。または、Salesforceの「開発者コンソール」を使用します。

// BarcodePrintPdfDemoContoller.cls
public class BarcodePrintPdfDemoContoller {
    // 入力値を格納する
    public String barcodeValue {get; set;}
    // 「PDFを表示」ボタンのクリック後の処理
    public PageReference showQRCode(){
        if (String.isBlank(this.barcodeValue)){
            return null;
        }
        // アクセストークンを生成する
        gcbc.GcBarcodeGlobalAccessTokenGenerator.UpdateAccessToken();
        PageReference pdfPage = Page.RenderBarcodeAsPDFFilePage;
        // バーコードの値をURLエンコードする
        String utf8encodedValue = EncodingUtil.urlEncode(this.BarcodeValue, 'UTF-8');
        pdfPage.getParameters().put('value', utf8encodedValue);
        return pdfPage;
    }
}

PDFファイルを呼び出すためのVisualforceページです。Visualforceページを作成するには、Salesforce Classicの場合、「設定 > ビルド > 開発 > Visualforceページ」を表示します。Lightning Experienceの場合、歯車アイコンをクリックした後「設定 > プラットフォームツール > カスタムコード > Visualforceページ」を表示します。または、Salesforceの「開発者コンソール」を使用します。

<!-- BarcodePrintPdfDemo.vfp -->
<apex:page controller="BarcodePrintPdfDemoContoller">       
    <apex:form id="form1">
        <apex:pageBlock >
            <apex:outputLabel value="バーコードの値:" for="inputBarcodeValue"/>
            <apex:inputText value="{!BarcodeValue}" id="inputBarcodeValue" />
            <br/>
            <apex:outputText value="記入例:1234567890" />
        </apex:pageBlock>
        <apex:commandButton action="{!ShowQRCode}" value="PDFを表示" reRender="form1"/>
    </apex:form>
</apex:page>

作成したVisualforceページをプレビュー表示します。「PDFを表示」ボタンをクリックしたあと、ブラウザにバーコード入りのPDFファイルが表示されれば成功です。

メールでPDFを送信する

作成したPDFファイルをメールで送信する方法は、「メールで送信する」を参照してください。

Copyright © 2018 GrapeCity inc. All rights reserved.