PDFの操作Aura,Apex


ボタンを押してPDFを作成する

```
    pdf_1 : function (component, event, helper) {
        
        const action = component.get("c.createPdf");
        action.setCallback(this, function(response){            
            if (action.getState() == "SUCCESS") {    
                var myVal = response.getReturnValue();
                helper.createPDF(component, event, myVal);
            }  else if (action.getState() == "ERROR" ) {
                var errors = response.getError();                
                if (errors[0] && errors[0].message) {
                    // サーバーサイドでcatchできなかったパターン
                    component.set("v.message", errors[0].message);
                } 
            }
        });
        $A.enqueueAction(action);        
    },
```

Apexクラス

```
    /**
      * apex:pageを利用してPDFをつくる
    　*/
    @AuraEnabled
    public static String createPdf(){
        
        PageReference pageRef = new PageReference('/apex/pdfFkd_test');
        pageRef.getParameters().put('mode', 'save');
        pageRef.getParameters().put('Title', 'Simple');

        //pageRef.getParameters().put('id', paramIds);
        //pageRef.getParameters().put('rmk', remarks);
        //String body = Test.isRunningTest() ? 'ダミー' : String.valueof(pageRef.getContent());        
        String body = Test.isRunningTest() ? 'ダミー' : EncodingUtil.Base64Encode(pageRef.getContent());
        
        return body;
    }
```

ヘルパーで自動でクリックしてPDFを表示させる

```
	createPDF : function(component, event, base64_pdf) {
        
        if ($A.util.isUndefinedOrNull(base64_pdf)){return;} 
        
        var timezoneoffset = -9     // UTC-表示したいタイムゾーン(単位:hour)。JSTなら-9
		var today = new Date(Date.now() - (timezoneoffset * 60 - new Date().getTimezoneOffset()) * 60000);       
        var fname = today.toISOString().substr(0,19);
        fname = "xxxx_" +fname + ".pdf";
        var bom = new Uint8Array([0xEF, 0xBB, 0xBF]);
        var mime_ctype = "application/pdf";
        var agent = window.navigator.userAgent.toLowerCase();
        var ie11 = (agent.indexOf('trident/7') !== -1);
        if (ie11){
            fkdutil.showError(component, event,'このブラウザでは出力できません');
            return;     
        }
        
        var blob = this.toBlob(base64_pdf, mime_ctype);
                
        if (ie11){
          // for IE            
            blob = new Blob([bom, csv], {
               type: 'text/csv'
           });
          window.navigator.msSaveOrOpenBlob(blob, fname);
          //window.navigator.msSaveBlob(blob, fname)
        } else {
            var hiddenElement = document.createElement('a');     
            hiddenElement.setAttribute('download', fname);
            hiddenElement.setAttribute('href', window.URL.createObjectURL(blob));
            hiddenElement.click();
        }
		
	},
```

# ファイルに添付する

```
public static void createContentVersion (String base64_pdf,String myId,String docTitle) {

        ContentVersion cv = new ContentVersion(); // ファイル本体（バージョン管理）
        cv.Title  = docTitle;
        v.PathOnClient = cv.Title + '.pdf';
        cv.versionData = EncodingUtil.base64Decode(base64_pdf);
        cv.ContentLocation = 'S';
        cv.ContentDocumentId = null; // 既にあるファイルはありません
        insert cv;

        Id cdId = [SELECT Id, Title, ContentDocumentId FROM ContentVersion WHERE Id =: cv.Id].get(0).ContentDocumentId; // insertした直後はIdは取得できるが、新しく自動的に作成されたContentVersionのContentDocumentIdは取得できない。※
        ContentDocumentLink cdl = new ContentDocumentLink(); // ファイルとオブジェクトへのリンク
        cdl.LinkedEntityId = myId;
        cdl.ShareType = 'V';
        cdl.ContentDocumentId = cdId;
        insert cdl;

}
```