示例#1
0
        private static IEnumerator LoadDocumentFromWWWCoroutine(PDFJS_PromiseCoroutine promiseCoroutine, IPDFJS_Promise promise, object urlString)
        {
            PDFJS_Promise <PDFDocument> documentPromise = promise as PDFJS_Promise <PDFDocument>;

            PDFLibrary.Instance.EnsureInitialized();
            while (!PDFLibrary.Instance.IsInitialized)
            {
                yield return(null);
            }

            string url = urlString as string;

            WWW www = new WWW(url);

            yield return(www);

            if (string.IsNullOrEmpty(www.error))
            {
                documentPromise.HasFinished           = true;
                documentPromise.HasSucceeded          = true;
                documentPromise.HasReceivedJSResponse = true;
                documentPromise.Result = new PDFDocument(www.bytes);

                promiseCoroutine.ExecuteThenAction(true, documentPromise.Result);
            }
            else
            {
                documentPromise.HasFinished  = true;
                documentPromise.HasSucceeded = false;

                promiseCoroutine.ExecuteThenAction(false, null);
            }
        }
示例#2
0
        private IEnumerator WaitForLoad(PDFJS_Promise <PDFDocument> promise)
        {
            float passedTime = 0f;

            while (!promise.HasFinished)
            {
                passedTime += Time.deltaTime;

                if (passedTime > 13f)
                {
                    yield break;
                }

                yield return(null);
            }

            if (promise.HasSucceeded)
            {
                _document = promise.Result;

                if (_document.IsValid)
                {
                    _currentPage = 0;
                    SetPage(_currentPage);
                }
            }
            else
            {
                this.DLogError(
                    $"Could not load presentation:{LocalizationManager.GetTranslation(_manualURL_LocalizationTerm)}");
            }

            ExpoLoadingScreen.Instance?.Hide();
        }
        public static IEnumerator UpdatePageWithExistingTexture(PDFDocument document, int pageIndex, Texture2D existingTexture, PDFPageTextureHolder[] pageTextureHolderList)
        {
            PDFJS_Promise <PDFPage> pagePromise = document.GetPageAsync(pageIndex);

            while (!pagePromise.HasFinished)
            {
                yield return(null);
            }

            if (pagePromise.HasSucceeded)
            {
                PDFJS_Promise <Texture2D> renderPromise = PDFRenderer.RenderPageToExistingTextureAsync(pagePromise.Result, existingTexture);

                pageTextureHolderList[pageIndex].m_RenderingPromise = renderPromise;

                while (!renderPromise.HasFinished)
                {
                    yield return(null);
                }

                pageTextureHolderList[pageIndex].m_RenderingPromise = null;
                pageTextureHolderList[pageIndex].m_RenderingStarted = false;

                if (renderPromise.HasSucceeded)
                {
                    if (pageTextureHolderList[pageIndex].Texture != null &&
                        pageTextureHolderList[pageIndex].Texture != renderPromise.Result)
                    {
                        UnityEngine.Object.DestroyImmediate(pageTextureHolderList[pageIndex].Texture);
                        Resources.UnloadAsset(pageTextureHolderList[pageIndex].Texture);
                        pageTextureHolderList[pageIndex].Texture = null;
                    }

                    if (pageTextureHolderList[pageIndex].m_Visible)
                    {
                        pageTextureHolderList[pageIndex].Texture = renderPromise.Result;
                    }
                    else
                    {
                        UnityEngine.Object.DestroyImmediate(renderPromise.Result);
                        Resources.UnloadAsset(renderPromise.Result);
                        renderPromise.Result = null;
                    }
                }
            }
            else
            {
                pageTextureHolderList[pageIndex].m_RenderingPromise = null;
                pageTextureHolderList[pageIndex].m_RenderingStarted = false;
            }
        }
示例#4
0
        public static PDFJS_Promise <PDFDocument> LoadDocumentFromUrlAsync(string url)
        {
            PDFJS_Promise <PDFDocument> documentPromise = new PDFJS_Promise <PDFDocument>();

#if !UNITY_WEBGL || UNITY_EDITOR
            PDFJS_Library.Instance.PreparePromiseCoroutine(LoadDocumentFromWWWCoroutine, documentPromise, url).Start();
#else
            LoadDocumentParameters parameters = new LoadDocumentParameters();
            parameters.url = url;

            PDFJS_Library.Instance.PreparePromiseCoroutine(LoadDocumentCoroutine, documentPromise, parameters).Start();
#endif

            return(documentPromise);
        }
示例#5
0
        public static PDFJS_Promise <PDFPage> LoadPageAsync(PDFDocument document, int pageIndex)
        {
            PDFJS_Promise <PDFPage> pagePromise = new PDFJS_Promise <PDFPage>();

#if UNITY_WEBGL && !UNITY_EDITOR
            LoadPageParameters parameters = new LoadPageParameters(document, pageIndex);

            PDFJS_Library.Instance.PreparePromiseCoroutine(LoadPageCoroutine, pagePromise, parameters).Start();
#else
            pagePromise.HasFinished           = true;
            pagePromise.HasSucceeded          = true;
            pagePromise.HasReceivedJSResponse = true;
            pagePromise.Result = document.GetPage(pageIndex);
#endif

            return(pagePromise);
        }
示例#6
0
        public static PDFJS_Promise <PDFDocument> LoadDocumentFromBytesAsync(byte[] bytes)
        {
            PDFJS_Promise <PDFDocument> documentPromise = new PDFJS_Promise <PDFDocument>();

#if !UNITY_WEBGL || UNITY_EDITOR
            documentPromise.HasFinished           = true;
            documentPromise.HasSucceeded          = true;
            documentPromise.HasReceivedJSResponse = true;
            documentPromise.Result = new PDFDocument(bytes);
#else
            LoadDocumentParameters parameters = new LoadDocumentParameters();
            parameters.bytes = bytes;

            PDFJS_Library.Instance.PreparePromiseCoroutine(LoadDocumentCoroutine, documentPromise, parameters).Start();
#endif

            return(documentPromise);
        }
示例#7
0
        private static IEnumerator LoadDocumentCoroutine(PDFJS_PromiseCoroutine promiseCoroutine, IPDFJS_Promise promise, object pars)
        {
            PDFJS_Promise <PDFDocument> documentPromise = promise as PDFJS_Promise <PDFDocument>;

            PDFLibrary.Instance.EnsureInitialized();
            while (!PDFLibrary.Instance.IsInitialized)
            {
                yield return(null);
            }

            LoadDocumentParameters parameters = pars as LoadDocumentParameters;

            if (!string.IsNullOrEmpty(parameters.url))
            {
                PDFJS_LoadDocumentFromURL(promise.PromiseHandle, parameters.url);
            }
            else
            {
                PDFJS_LoadDocumentFromBytes(promise.PromiseHandle, Convert.ToBase64String(parameters.bytes));
            }

            while (!promiseCoroutine.Promise.HasReceivedJSResponse)
            {
                yield return(null);
            }

            if (documentPromise.HasSucceeded)
            {
                int         documentHandle = int.Parse(promiseCoroutine.Promise.JSObjectHandle);
                PDFDocument document       = new PDFDocument(new IntPtr(documentHandle));

                documentPromise.Result      = document;
                documentPromise.HasFinished = true;

                promiseCoroutine.ExecuteThenAction(true, documentHandle);
            }
            else
            {
                documentPromise.Result      = null;
                documentPromise.HasFinished = true;

                promiseCoroutine.ExecuteThenAction(false, null);
            }
        }
示例#8
0
        public static PDFJS_Promise <Texture2D> RenderPageToTextureAsync(PDFPage page, Vector2 size)
        {
            PDFJS_Promise <Texture2D> renderPromise = new PDFJS_Promise <Texture2D>();

#if !UNITY_WEBGL || UNITY_EDITOR
            using (PDFRenderer renderer = new PDFRenderer())
            {
                renderPromise.HasFinished           = true;
                renderPromise.HasSucceeded          = true;
                renderPromise.HasReceivedJSResponse = true;
                renderPromise.Result = renderer.RenderPageToTexture(page, (int)size.x, (int)size.y);
            }
#else
            RenderPageParameters parameters = new RenderPageParameters(page.NativePointer, null, size);

            PDFJS_Library.Instance.PreparePromiseCoroutine(RenderPageCoroutine, renderPromise, parameters).Start();
#endif
            return(renderPromise);
        }
示例#9
0
        public static PDFJS_Promise <Texture2D> RenderPageToExistingTextureAsync(PDFPage page, Texture2D tex)
        {
            PDFJS_Promise <Texture2D> renderPromise = new PDFJS_Promise <Texture2D>();

#if !UNITY_WEBGL || UNITY_EDITOR
            using (PDFRenderer renderer = new PDFRenderer())
            {
                renderPromise.HasFinished           = true;
                renderPromise.HasSucceeded          = true;
                renderPromise.HasReceivedJSResponse = true;
                renderer.RenderPageToExistingTexture(page, tex);
                renderPromise.Result = tex;
            }
#else
            RenderPageParameters parameters = new RenderPageParameters(page.NativePointer, tex, new Vector2(tex.width, tex.height));

            PDFJS_Library.Instance.PreparePromiseCoroutine(RenderPageCoroutine, renderPromise, parameters).Start();
#endif

            return(renderPromise);
        }
示例#10
0
        private static IEnumerator LoadPageCoroutine(PDFJS_PromiseCoroutine promiseCoroutine, IPDFJS_Promise promise, object par)
        {
            PDFLibrary.Instance.EnsureInitialized();
            while (!PDFLibrary.Instance.IsInitialized)
            {
                yield return(null);
            }

            PDFJS_Promise <PDFPage> pagePromise = promise as PDFJS_Promise <PDFPage>;

            LoadPageParameters parameters = par as LoadPageParameters;

            PDFJS_LoadPage(promise.PromiseHandle, parameters.document.NativePointer.ToInt32(), parameters.pageIndex + 1);

            while (!pagePromise.HasReceivedJSResponse)
            {
                yield return(null);
            }

            if (pagePromise.HasSucceeded)
            {
                int     pageHandle = int.Parse(pagePromise.JSObjectHandle);
                PDFPage page       = new PDFPage(parameters.document, new IntPtr(pageHandle), parameters.pageIndex);

                pagePromise.Result      = page;
                pagePromise.HasFinished = true;

                promiseCoroutine.ExecuteThenAction(true, page);
            }
            else
            {
                pagePromise.Result      = null;
                pagePromise.HasFinished = true;

                promiseCoroutine.ExecuteThenAction(false, null);
            }
        }
示例#11
0
        public void Load()
        {
            if (_document == null || _currentLanguage != LocalizationManager.CurrentLanguage)
            {
                ExpoLoadingScreen.Instance?.Show();

                _currentLanguage = LocalizationManager.CurrentLanguage;
                _document        = null;

                string link = LocalizationManager.GetTranslation(_manualURL_LocalizationTerm);

                if (ViewModeManager.Instance.GetSelectedViewMode() == ViewModeManager.ViewMode.Mobile)
                {
                    if (!string.IsNullOrEmpty(LocalizationManager.GetTranslation(_manualURL_LocalizationTerm_Mobile)))
                    {
                        link = LocalizationManager.GetTranslation(_manualURL_LocalizationTerm_Mobile);
                    }
                }

                PDFJS_Promise <PDFDocument> promise = PDFDocument.LoadDocumentFromUrlAsync(link);

                StartCoroutine(WaitForLoad(promise));
            }
        }
示例#12
0
        private static IEnumerator RenderPageCoroutine(PDFJS_PromiseCoroutine promiseCoroutine, IPDFJS_Promise promise, object parameters)
        {
            PDFJS_Promise <PDFJS_WebGLCanvas> renderToCanvasPromise = new PDFJS_Promise <PDFJS_WebGLCanvas>();

            PDFJS_Library.Instance.PreparePromiseCoroutine(null, renderToCanvasPromise, null);

            IntPtr    pageHandle     = ((RenderPageParameters)parameters).pageHandle;
            Texture2D texture        = ((RenderPageParameters)parameters).existingTexture;
            Vector2   newtextureSize = ((RenderPageParameters)parameters).newTextureSize;

            Vector2 pageSize = PDFPage.GetPageSize(pageHandle, 1.0f);

            float scale = 1.0f;

            if (texture != null)
            {
                float wf = pageSize.x / texture.width;
                float hf = pageSize.y / texture.height;

                scale = 1.0f / Mathf.Max(wf, hf);
            }
            else
            {
                float wf = pageSize.x / ((int)newtextureSize.x);
                float hf = pageSize.y / ((int)newtextureSize.y);

                scale = 1.0f / Mathf.Max(wf, hf);
            }

            PDFJS_RenderPageIntoCanvas(renderToCanvasPromise.PromiseHandle, pageHandle.ToInt32(), scale);

            while (!renderToCanvasPromise.HasReceivedJSResponse)
            {
                yield return(null);
            }

            if (renderToCanvasPromise.HasSucceeded)
            {
                int canvasHandle = int.Parse(renderToCanvasPromise.JSObjectHandle);

                using (PDFJS_WebGLCanvas canvas = new PDFJS_WebGLCanvas(new IntPtr(canvasHandle)))
                {
                    PDFJS_Promise <Texture2D> renderToTexturePromise = promise as PDFJS_Promise <Texture2D>;

                    if (texture == null)
                    {
                        texture            = new Texture2D((int)newtextureSize.x, (int)newtextureSize.y, TextureFormat.ARGB32, false);
                        texture.filterMode = FilterMode.Bilinear;
                        texture.Apply();
                    }


                    PDFJS_RenderCanvasIntoTexture(canvasHandle, texture.GetNativeTexturePtr().ToInt32());

                    renderToTexturePromise.Result       = texture;
                    renderToTexturePromise.HasSucceeded = true;
                    renderToTexturePromise.HasFinished  = true;

                    promiseCoroutine.ExecuteThenAction(true, texture);
                }
            }
            else
            {
                PDFJS_Promise <Texture2D> renderToTexturePromise = promise as PDFJS_Promise <Texture2D>;

                renderToTexturePromise.Result       = null;
                renderToTexturePromise.HasSucceeded = false;
                renderToTexturePromise.HasFinished  = true;

                promiseCoroutine.ExecuteThenAction(false, null);
            }
        }
示例#13
0
    IEnumerator Start()
    {
        Debug.Log("WebGLTest: ");

        PDFJS_Promise <PDFDocument> documentPromise = PDFDocument.LoadDocumentFromUrlAsync("https://crossorigin.me/http://www.pdf995.com/samples/pdf.pdf");

        while (!documentPromise.HasFinished)
        {
            yield return(null);
        }

        if (!documentPromise.HasSucceeded)
        {
            Debug.Log("Fail: documentPromise");
            yield break;
        }
        else
        {
            Debug.Log("Success: documentPromise");
        }

        PDFDocument document = documentPromise.Result;

        PDFJS_Promise <PDFPage> pagePromise = document.GetPageAsync(0);

        while (!pagePromise.HasFinished)
        {
            yield return(null);
        }

        if (!pagePromise.HasSucceeded)
        {
            Debug.Log("Fail: pagePromise");
            yield break;
        }
        else
        {
            Debug.Log("Success: pagePromise");
        }

        PDFPage page = pagePromise.Result;

        PDFJS_Promise <Texture2D> renderPromise = PDFRenderer.RenderPageToTextureAsync(page, (int)page.GetPageSize().x, (int)page.GetPageSize().y);

        while (!renderPromise.HasFinished)
        {
            yield return(null);
        }

        if (!renderPromise.HasSucceeded)
        {
            Debug.Log("Fail: pagePromise");
            yield break;
        }

        Texture2D renderedPageTexture = renderPromise.Result;

        (m_RawImage.transform as RectTransform).sizeDelta = new Vector2(renderedPageTexture.width, renderedPageTexture.height);
        m_RawImage.texture = renderedPageTexture;

        yield return(new WaitForSeconds(2.5f));
    }