# 보고서 결과물의 인쇄와 내보내기 

## Content

### PageDocument 클래스

[Executing a report](/activereportsjs/docs/v4.1/) 섹션에서 언급된 것 처럼, `PageReport` 인스터스의 `run` 메소드를 호출한 결과는 보고서 출력을 인쇄하고 내보낼수 있는 [PageDocument class](https://www.grapecity.com/activereportsjs/api/classes/Core.PageDocument) 의 인스턴스로 이행되는 [Promise object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) 입니다.

### 보고서 결과물 인쇄

보고서 출력을 인쇄하는 프로세스는 보고서를 HTML로 내보내고 브라우저에 내장된 인쇄 미리 보기 UI에서 결과를 여는 방식으로 수행됩니다. `PageDocument class` 클래스의 `print` 메소드는 이 프로세스를 용이하게 하며 세 가지 선택적 인수를 옵션으로 제공합니다.

* `renderOptions` – 인쇄의 경우, `undefined`으로 설정할 수 있습니다.
* `onProgress` – 보고서의 각 페이지가 HTML로 렌더링된 후 호출되는 콜백 함수입니다. 렌더링된 페이지 수에 해당하는 단일 숫자 인수를 허용해야 합니다.
* `checkCancel` – 보고서의 각 페이지가 렌더링된 후 호출되는 콜백 함수입니다. 인쇄 프로세스를 중단해야 하는지 여부를 나타내는 부울 값을 반환해야 합니다.

이러한 선택적 인수인 `onProgress` and `checkCancel`을 활용하여 인쇄 작업의 진행 상황을 표시하고 `Cancel` 버튼 클릭과 같은 특정 사용자 이벤트에 대한 응답으로 인쇄 작업을 취소할 수 있는 사용자 정의 사용자 인터페이스를 구현할 수 있습니다. 아래 코드는 보고서를 인쇄하고 진행 상황에 대한 정보를 콘솔로 보냅니다.

```ts
import {Core} from "@grapecity/activereports";

const report = new Core.PageReport();
await report.load(`assets/Products.rdlx-json`);
const document = await report.run();
document.print(undefined, x=>console.log(`${x} pages ready`), ()=>{
    return false;
});
```

### 보고서 결과물 내보내기

`ActiveReportsJS API` 를 사용하면 보고서 출력을 각각 `PdfExport`, `HtmlExport`, 그리고 `TabularDataExport` 개체를 제공하는`PDF`, `HTML` 또는 `CSV` 문서로 내보낼 수 있습니다.이들 모두는 `Core library` 의 일부입니다.

```ts
  import {
    PdfExport,
    HtmlExport,
    TabularDataExport,
  } from "@grapecity/activereports";
```

각 내보내기 개체는 다음 네 가지 인수가 있는 `exportDocument` 메서드를 제공합니다.

* `source` – 위에서 설명한 `PageDocument` 클래스의 인스턴스입니다.
* `settings` – 내보낸 문서의 설정입니다. 이 인수는 각 내보내기 유형에 따라 다릅니다.
    * `PDFExport.exportDocument`는 [PdfSettings object](https://www.grapecity.com/activereportsjs/api/modules/PdfExport#pdfsettings) 을 허용 합니다.
    * `HtmlExport.exportDocument`는 [HtmlSettings object](https://www.grapecity.com/activereportsjs/api/modules/HtmlExport#htmlsettings) 을 허용 합니다.
    * `TabularDataExport.exportDocument` 는 [TabularDataSettings object](https://www.grapecity.com/activereportsjs/api/modules/TabularDataExport#tabulardatasettings) 을 허용합니다.
* `onProgress` – 보고서의 각 페이지를 내보낸 후 호출되는 콜백 함수입니다. 내보낸 페이지 수에 해당하는 단일 숫자 인수를 허용해야 합니다.
* `checkCancel` – 보고서의 각 페이지가 렌더링된 후 호출되는 콜백 함수입니다. 내보내기 프로세스를 중단해야 하는지 여부를 나타내는 부울 값을 반환해야 합니다.

`exportDocument` 메소드는 각 내보내기 유형에 특정한 결과로 이행되는 [Promise object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)를 반환합니다:

* `PDFExport.exportDocument` 는 `download` 메소드를 사용하여 결과를 다운로드하거나 Blob 유형의 `data` 속성을 사용하여 결과를 저장할 수 있는 [PdfExportResult object](https://www.grapecity.com/activereportsjs/api/modules/PdfExport#pdfexportresult) 사용하여 약속을 이행합니다.
* `HtmlExport.exportDocument` 는 `HtmlSettings`의 `multiPage`속성 값에 따라 `download` 메서드를 사용하여 결과를 다운로드하거나 `string` 또는 `Blob`인 `data` 속성을 사용하여 결과를 저장할 수 있는 [HtmlExportResult object](https://www.grapecity.com/activereportsjs/api/modules/HtmlExport#htmlexportresult) 를 사용하여 약속을 이행합니다.
* `TabularDataExport.exportDocument` 는 `TabularDataSettings.csvSettings`의 `outputType` 속성 값에 따라 `download` 메서드를 사용하여 결과를 다운로드하거나 `string` 또는 `Blob`인 `data` 속성을 사용하여 결과를 저장할 수 있는 [TabularDataExportResult object](https://www.grapecity.com/activereportsjs/api/modules/TabularDataExport#tabulardataexportresult) 개체를 통해 약속을 이행합니다.

다음은 각 내보내기 유형에 대한 코드 예제입니다.

```ts
  import {
    PdfExport,
    HtmlExport,
    TabularDataExport,
  } from "@grapecity/activereports";

async function exportPdf(document: PageDocument){
  const pdfSettings: PdfExport.PdfSettings = {
      info: {
          title: "Product List"
      }
  }
  const result = await PdfExport.exportDocument(document, pdfSettings);
  result.download("products.pdf");
}

async function exportHtml(document: PageDocument){
   const htmlSettings: HtmlExport.HtmlSettings = {
       title: "Product List",
       multiPage: false        
   }
   const result = await HtmlExport.exportDocument(document, htmlSettings);
   result.download("products.html");
}

async function exportCSV(document: PageDocument){
   const csvSettings: TabularDataExport.TabularDataSettings = {
       csvSettings: {
           colSeparator: ","
       }
   }
   const result = await TabularDataExport.exportDocument(document, csvSettings);
   result.download("products.csv");
}

 async function onExport(){
    const report = new Core.PageReport();
    await report.load(reportUrl);
    var document = await report.run();
    exportHtml(document);
    exportCSV(document);
    exportPdf(document);
 }
```