XRoom_Unity/Assets/Paroxe/PDFRenderer/Examples/Scripts/API_Usage.cs
2025-05-31 10:20:20 +03:30

161 lines
5.1 KiB
C#

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
namespace Paroxe.PdfRenderer.Examples
{
public class API_Usage : MonoBehaviour
{
#if !UNITY_WEBGL
private IEnumerator Start()
{
// UnityWebRequest or WWW can be use instead of PDFWebRequest.
using (PDFWebRequest www = new PDFWebRequest("https://www.dropbox.com/s/tssavtnvaym2t6b/DocumentationEN.pdf?raw=1"))
{
www.SendWebRequest();
Debug.Log("Downloading document...");
yield return www;
if (!string.IsNullOrEmpty(www.error))
{
Debug.LogError(www.error);
yield break;
}
// You can use using or call .Dispose manually on the document
// when you don't need it anymore. Or you can let the garbage collector
// free the memory for you.
using (PDFDocument document = new PDFDocument(www.bytes, ""))
{
TestAPIs(document);
}
}
}
private void TestAPIs(PDFDocument document)
{
Debug.Log("Page count: " + document.GetPageCount());
TextPageAPI(document);
SearchAPI(document);
BookmarkAPI(document);
WebLinksAPI(document);
}
private void TextPageAPI(PDFDocument document)
{
Debug.Log("TextPage API-----------------------");
using (PDFPage page = document.GetPage(1))
{
Debug.Log("Page size: " + page.GetPageSize());
using (PDFTextPage textPage = page.GetTextPage())
{
int countChars = textPage.CountChars();
Debug.Log("Page chars count: " + countChars);
string str = textPage.GetText(0, countChars);
Debug.Log("Page text: " + str);
int rectCount = textPage.CountRects(0, countChars);
Debug.Log("Rect count: " + rectCount);
string boundedText = textPage.GetBoundedText(0, 0, page.GetPageSize().x, page.GetPageSize().y * 0.5f, 2000);
Debug.Log("Bounded text: " + boundedText);
}
}
}
private void SearchAPI(PDFDocument document)
{
Debug.Log("Search API-------------------------");
using (PDFPage page = document.GetPage(1))
{
using (PDFTextPage textPage = page.GetTextPage())
{
IList<PDFSearchResult> results = textPage.Search("pdf");
Debug.Log("Search results count: " + results.Count);
if (results.Count > 0)
{
Debug.Log("First result char index: " + results[0].StartIndex + " and chars count: " + results[0].Count);
// Get all rects corresponding to the first search result
int rectsCount = document.GetPage(1).GetTextPage().CountRects(results[0].StartIndex, results[0].Count);
Debug.Log("Search result rects count: " + rectsCount);
}
}
}
}
private void BookmarkAPI(PDFDocument document)
{
Debug.Log("Bookmark API-----------------------");
PDFBookmark rootBookmark = document.GetRootBookmark();
OutputBookmarks(rootBookmark, 0);
}
private void OutputBookmarks(PDFBookmark bookmark, int indent)
{
string line = "";
for (int i = 0; i < indent; ++i)
line += " ";
line += bookmark.GetTitle();
Debug.Log(line);
foreach (PDFBookmark child in bookmark.EnumerateChildrenBookmarks())
{
OutputBookmarks(child, indent + 1);
}
}
private void WebLinksAPI(PDFDocument document)
{
Debug.Log("WebLinks API-----------------------");
using (PDFPage page = document.GetPage(0))
{
using (PDFTextPage textPage = page.GetTextPage())
{
using (PDFPageWebLinks webLinks = textPage.GetPageWebLinks())
{
int linksCount = webLinks.LinksCount;
Debug.Log("WebLinks count on first page: " + linksCount);
for (int i = 0; i < linksCount; ++i)
{
string url = webLinks.GetLinkUrl(i);
Debug.Log("Link #" + i + " url: " + url);
int rectsCount = webLinks.CountLinkRects(i);
Debug.Log("Link #" + i + " rects count: " + rectsCount);
for (int r = 0; r < rectsCount; ++r)
{
Rect linkRect = webLinks.GetLinkRect(i, r);
Debug.Log("Link #" + i + " rect: " + linkRect);
Rect linkRectOnDeviceWithZoom = page.ConvertPageRectToDeviceRect(linkRect, page.GetPageSize(1.5f));
Debug.Log("Link #" + i + " rect on device at zoom 1.5x: " + linkRectOnDeviceWithZoom);
}
}
}
}
}
}
#endif
}
}