ViewerSignatureRuler.cs
//
// This code is part of Document Solutions for PDF demos.
// Copyright (c) MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Text;

namespace DsPdfWeb.Demos
{
    // In this sample we demonstrate how to configure the ruler lines for the 
    // Graphical Signature feature.

    // This and other samples in this section demonstrate the features of GcPdfViewer
    // (a JavaScript PDF viewer control included with DsPdf), mainly the ability
    // to change PDF files (add or edit annotations and AcroForm fields, rotate pages etc.)
    // when the JS viewer on the client is supported by DsPdf running on the server.
    //
    // To enable the editing features of the viewer, its supportApi property must be set
    // to a URL on the server that implements all or some of the edit supporting APIs
    // that are known to/expected by the viewer. This DsPdf demo site provides those APIs,
    // which makes it possible to demonstrate the editing when you open the PDF viewer
    // in this sample. When you download this sample, in addition to the .NET Core
    // console app project that generates the sample PDF, an ASP.NET Core project is
    // also included in the download zip (located in the GcPdfViewerWeb sub-folder of the
    // downloaded zip), which also provides the necessary APIs. In particular, it includes
    // a project that implements the APIs and provides them via a special controller.
    // It is actually the same controller that is used by this DsPdf demo site, and which
    // can be used in any ASP.NET Core site to enable the viewer editing features.
    //
    // Look at the following files in the sample download zip for more info:
    // - GcPdfViewerWeb\SupportApiDemo: the sample ASP.NET Core web site.
    // - GcPdfViewerWeb\SupportApiDemo.sln: solution to build/run the sample web site.
    // - GcPdfViewerWeb\SupportApi: support API implementation (can be used in any site).
    // - GcPdfViewerWeb\SupportApi\Controllers\GcPdfViewerController.cs: support API controller.
    // 
    // Please note that this and other samples in this section are only available in C# at this time.
    //

    
    public class ViewerSignatureRuler
    {
        public void CreatePDF(Stream stream)
        {
            var doc = new GcPdfDocument();
            using var fs = File.OpenRead(Path.Combine("Resources", "PDFs", "viewer-signature-ruler.pdf"));
            doc.Load(fs);
            doc.Save(stream);
        }

        public const string JS_CODE = @"
var viewer;
function updateDestinationLocation(destinationSize) {
    if(viewer) {
        var options = viewer.options;
        var pageSize = viewer.getPageSize(0);        
        options.signTool.location = {x: 80, y: 100};
    }
}
function onSignatureAdded(resultDetails) {
        viewer.scrollAnnotationIntoView(resultDetails.pageIndex, resultDetails.annotation);
        applySignedViewerLayout();
}
function createPdfViewer(selector, baseOptions) {
    var options = baseOptions || {};
    if(!options.supportApi) {
        options.supportApi = {
            apiUrl: (window.__baseUrl || '') + 'support-api/gc-pdf-viewer',
            token: window.afToken || '',
            webSocketUrl: false, suppressInfoMessages: true, suppressErrorMessages: true
        };
    }

    options.signTool = {             
        ruler: { 
            Draw: [{ color: '#ffe21e', size: 2, type: 'solid', position: 20 },
                   { color: '#ff0000', size: 5, type: 'dashed', position: 50 }, 
		           { color: '#ffe21e', size: 2, type: 'solid', position: 80 } ],
            Type: [{ color: '#717171', size: 1, type: 'dashed', position: 30 } ]
        },
        afterShow: function(dialog) {
            updateDestinationLocation(dialog.destinationSize);
        },
        afterAdd: function (result) {
            onSignatureAdded(result);
            return true;
        }
    };
    options.restoreViewStateOnLoad = false;
    viewer = new GcPdfViewer(selector, options);
    viewer.addDefaultPanels();
    viewer.addAnnotationEditorPanel();
    viewer.toolbarLayout.viewer = { 
        default: ['open', 'save', 'edit-sign-tool', 'edit-undo', 'doc-title', '$split', 'about'], 
        mobile: ['open', 'save', 'edit-sign-tool', 'edit-undo', 'doc-title', '$split', 'about'], 
        fullscreen: ['$fullscreen', 'open', 'save', 'edit-sign-tool', 'edit-undo', 'doc-title', '$split', 'about'] 
    };
    viewer.toolbarLayout.annotationEditor = { 
        default: ['open', 'save', 'edit-sign-tool', 'edit-undo', 'doc-title', '$split', 'about'], 
        mobile: ['open', 'save', 'edit-sign-tool', 'edit-undo', 'doc-title', '$split', 'about'], 
        fullscreen: ['$fullscreen', 'open', 'save', 'edit-sign-tool', 'edit-undo', 'doc-title', '$split', 'about'] 
    };    
    viewer.applyToolbarLayout();
    viewer.zoom = 70;
    viewer.onAfterOpen.register(function() { viewer.showSignTool(); });
    return viewer;
}
";

    }
}