ViewerEditorDefaults.cs
// 
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// Copyright (c) GrapeCity inc. All rights reserved.
// 
using System;
using System.IO;
using System.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Text;

namespace GcPdfWeb.Samples
{
    // このサンプルでは、GcPdfが動作しているサーバーからSupportAPIを介して提供される、
    // PDF ビューワの編集機能のデフォルト設定を変更する方法を示しています。このサンプルでは、
    // editorDefaults オプションを使用して注釈を描画する際のデフォルト設定を変更しています。

    // このセクションのサンプルでは、クライアント上のPDF ビューワが、サーバー上で
    // 動作するGcPdfに接続している場合に、PDF ビューワで使用できるPDFファイルの編集機能
    // (注釈やフォームフィールドの追加や編集、ページの回転など)を主に紹介しています。
    // 
    // ビューワの編集機能を有効にするためには、supportApiプロパティに、ビューワにて
    // 使用が想定される編集機能をサポートするAPIのすべてまたは一部を実装したサーバのURLを
    // 設定する必要があります。このGcPdfデモサイトでは、それらのAPIを提供しており、
    // このサンプルでPDF ビューワを開いた際に編集のデモを行うことができます。
    // このサンプルをダウンロードすると、サンプルPDFを生成する.NET Coreコンソール
    // アプリプロジェクトに加えて、必要なAPIを提供するASP.NET Coreプロジェクトも
    // ダウンロードしたzipに含まれています(ダウンロードしたzipのGcPdfViewerWeb
    // フォルダ内にあります)。具体的には、APIを実装し、特別なコントローラを介して
    // そのAPIを提供するプロジェクトが含まれています。実際にこのGcPdfのデモサイトで
    // 使用されているものと同じコントローラで、どのASP.NET Coreサイトでも
    // ビューワの編集機能を有効にすることができます。
    // 
    // 詳細については、サンプルからダウンロードしたzipにある以下のファイルをご参照ください。
    // - GcPdfViewerWeb\SupportApiDemo: ASP.NET Coreのサンプルwebサイトです。
    // - GcPdfViewerWeb\SupportApiDemo.sln: サンプルwebサイトを実行するためのソリューションです。
    // - GcPdfViewerWeb\SupportApi: 実装済みのSupportAPIです(どのサイトでもご使用いただけます)。
    // - GcPdfViewerWeb\SupportApi\Controllers\GcPdfViewerController.cs: SupportAPIのコントローラです。
    // 
    // このセクションのサンプルは、現時点ではC#でしかご利用いただけませんのでご注意ください。
    // 
    public class ViewerEditorDefaults
    {
        public void CreatePDF(Stream stream)
        {
            var doc = new GcPdfDocument();
            var page = doc.NewPage();

            Common.Util.AddNote("このサンプルでは、PDF ビューワの編集機能のデフォルト設定を変更する方法を示しています。", page);

            // PDF を保存します。
            doc.Save(stream);
        }

        public const string JS_CODE = @"
function createPdfViewer(selector, baseOptions) {
    var options = baseOptions || {};    
    if(!options.supportApi) {
        options.supportApi = {
            apiUrl: (window.__baseUrl || '') + 'support-api/gc-pdf-viewer',
            token: window.afToken || '',
            webSocketUrl: (window.__baseUrl || '') + 'signalr',
            suppressInfoMessages: true, suppressErrorMessages: true
        };
    }
    options.editorDefaults = {
           inkAnnotation: {
               borderStyle: { width: 3, style: 1 },
               color: '#ff9800'
           },
           squareAnnotation: {
               borderStyle: { width: 5, style: 2, dashArray: [8, 4] },
               color: '#000000',
               interiorColor: '#f44336'
           },
           circleAnnotation: {
               borderStyle: { width: 2, style: 1 },
               color: '#2196f3',
               interiorColor: '#fff9c8'
           },
           lineAnnotation: {
               borderStyle: { width: 2, style: 1 },
               color: '#4caf50',
               interiorColor: '#2196f3',
               lineStart: 'Circle',
               lineEnd: 'Circle'
           },
           polyLineAnnotation: {
               borderStyle: { width: 2, style: 1 },
               color: '#000000',
               interiorColor: '#f44336',
               lineStart: 'Diamond',
               lineEnd: 'ClosedArrow'
           },
           polygonAnnotation: {
               borderStyle: { width: 5, style: 1 },
               color: '#ff0000',
               interiorColor: '#faa19b'
           },
    };
    var viewer = new GcPdfViewer(selector, options);    
    viewer.addDefaultPanels();
    viewer.addAnnotationEditorPanel();
    viewer.layoutMode = 1;
    // ツールバーのボタンを設定
    viewer.toolbarLayout.viewer = { 
        default: ['open', 'save', '$navigation', '$split', 'text-selection', 'pan', '$zoom', '$fullscreen', 'download', 'print', 'rotate', 'view-mode', 'hide-annotations', 'doc-properties', 'about'], 
        mobile: ['open', 'save', '$navigation', '$split', 'text-selection', 'pan', '$zoom', '$fullscreen', 'download', 'print', 'rotate', 'view-mode', 'hide-annotations', 'doc-properties', 'about'], 
        fullscreen: ['$fullscreen', 'open', 'save', '$navigation', '$split', 'text-selection', 'pan', '$zoom', '$fullscreen', 'download', 'print', 'rotate', 'view-mode', 'hide-annotations', 'doc-properties', 'about'] 
    };
    viewer.toolbarLayout.annotationEditor = { 
        default: ['save', '$split',  'edit-select', '$split', 'edit-ink', 'edit-square', 'edit-circle', 'edit-line', 'edit-polyline', 'edit-polygon', '$split', 'edit-erase', '$split', 'edit-undo', 'edit-redo'], 
        mobile: ['save', '$split',  'edit-select', '$split', 'edit-ink', 'edit-square', 'edit-circle', 'edit-line', 'edit-polyline', 'edit-polygon', '$split', 'edit-erase', '$split', 'edit-undo', 'edit-redo'], 
        fullscreen: ['$fullscreen', 'save', '$split',  'edit-select', '$split', 'edit-ink', 'edit-square', 'edit-circle', 'edit-line', 'edit-polyline', 'edit-polygon', '$split', 'edit-erase', '$split', 'edit-undo', 'edit-redo'] 
    };
    viewer.applyToolbarLayout();
    viewer.applyOptions();
    return viewer;
}
";

        // SupportApiDemoにてPDF ビューワの初期化に使用されます。
        public static GcPdfViewerSupportApiDemo.Models.PdfViewerOptions PdfViewerOptions
        {
            get => new GcPdfViewerSupportApiDemo.Models.PdfViewerOptions(
                GcPdfViewerSupportApiDemo.Models.PdfViewerOptions.Options.AnnotationEditorPanel |
                GcPdfViewerSupportApiDemo.Models.PdfViewerOptions.Options.ActivateAnnotationEditor,
                viewerTools: new string[] { "save", "$navigation", "$split", "text-selection", "pan", "$zoom", "$fullscreen", "download", "print", "rotate", "view-mode", "hide-annotations", "doc-properties", "about" },
                annotationEditorTools: new string[] { "edit-select", "$split", "edit-ink", "edit-square", "edit-circle", "edit-line", "edit-polyline", "edit-polygon", "$split", "edit-erase", "$split", "edit-undo", "edit-redo", "save" });
        }
    }
}