|
1 | | -#WIP - this Example is imported from 1.5.0 UDF - and is in "WORK IN PROGRESS" state |
2 | | - |
3 | 1 | #AutoIt3Wrapper_UseX64=n |
4 | 2 | #AutoIt3Wrapper_Run_AU3Check=Y |
5 | 3 | #AutoIt3Wrapper_AU3Check_Stop_OnWarning=y |
|
19 | 17 | #include <GUIConstantsEx.au3> |
20 | 18 | #include <WindowsConstants.au3> |
21 | 19 | #include "..\NetWebView2Lib.au3" |
| 20 | +#include <Array.au3> |
| 21 | +#include <String.au3> |
22 | 22 |
|
23 | 23 | ; Global objects |
24 | 24 |
|
@@ -66,7 +66,52 @@ Func _Example() |
66 | 66 | Local $s_PDF_TEXT = '' |
67 | 67 |
|
68 | 68 | $s_JavaScript_snipp = "PDF_ExtractToJSON();" |
69 | | - $s_PDF_TEXT = _NetWebView2_ExecuteScript($oWeb, $s_JavaScript_snipp, $NETWEBVIEW2_EXECUTEJS_MODE2_RESULT) |
| 69 | + _NetWebView2_ExecuteScript($oWeb, $s_JavaScript_snipp, $NETWEBVIEW2_EXECUTEJS_MODE2_RESULT) |
| 70 | + |
| 71 | + ; Get JSON data |
| 72 | + $s_PDF_TEXT = Get_Data_Sync("", "PDF_DATA_PACKAGE") |
| 73 | + |
| 74 | + If $s_PDF_TEXT <> "" Then ; === JSON REPORT === |
| 75 | + Local $oJson = _NetJson_CreateParser($s_PDF_TEXT) |
| 76 | + If @error Then Return ConsoleWrite("!> Error: Failed to create NetJson object." & @CRLF) |
| 77 | + |
| 78 | + ConsoleWrite(@CRLF & "==================== PDF REPORT ====================" & @CRLF) |
| 79 | + |
| 80 | + ; METADATA SECTION |
| 81 | + Local $sTitle = $oJson.GetTokenValue("metadata.Title") |
| 82 | + Local $sAuthor = $oJson.GetTokenValue("metadata.Author") |
| 83 | + ConsoleWrite(StringFormat("+ Title: %s\n+ Author: %s\n", $sTitle, $sAuthor)) |
| 84 | + ConsoleWrite("+ Format: " & $oJson.GetTokenValue("metadata.PDFFormatVersion") & @CRLF) |
| 85 | + |
| 86 | + ; PAGES SECTION |
| 87 | +;~ Local $iActualPages = $oJson.GetArrayLength("pages") |
| 88 | + Local $iPages = Number($oJson.GetTokenValue("pagesCount")) |
| 89 | + ConsoleWrite("----------------------------------------------------" & @CRLF) |
| 90 | + ConsoleWrite("- Total Pages Detected: " & $iPages & @CRLF) |
| 91 | + |
| 92 | + For $i = 0 To $iPages - 1 ; Get and Clean Page Text |
| 93 | + Local $sRawPageText = $oJson.GetTokenValue("pages[" & $i & "].text") |
| 94 | + Local $sCleanText = StringReplace($sRawPageText, Chr(160), " ") ; Normalize spaces |
| 95 | + ConsoleWrite(StringFormat(">>> Page [%d] Content:\n%s\n", $i + 1, $sCleanText)) |
| 96 | + ConsoleWrite("----------------------------------------------------" & @CRLF) |
| 97 | + Next |
| 98 | + |
| 99 | + ; DATA GRID SECTION |
| 100 | + Local $sTable = $oJson.FlattenToTable("↲", @CRLF) |
| 101 | + Local $aFinalGrid = _ArrayFromString($sTable, "↲", @CRLF, True) |
| 102 | + |
| 103 | + If Not @error Then |
| 104 | + ConsoleWrite("+ Data Grid: Success. Displaying UI Table..." & @CRLF) |
| 105 | + _ArrayDisplay($aFinalGrid, "v1.4.1 Final Table View") |
| 106 | + Else |
| 107 | + ConsoleWrite("!> Error: FlattenToTable failed to generate array." & @CRLF) |
| 108 | + EndIf |
| 109 | + |
| 110 | + ConsoleWrite("====================================================" & @CRLF & @CRLF) |
| 111 | + Else |
| 112 | + ConsoleWrite("!> Error: No PDF data received within timeout." & @CRLF) |
| 113 | + EndIf |
| 114 | + |
70 | 115 | MsgBox($MB_TOPMOST, "TEST #" & @ScriptLineNumber, "After:" & @CRLF & $s_JavaScript_snipp & @CRLF & $s_PDF_TEXT) |
71 | 116 |
|
72 | 117 | $s_JavaScript_snipp = "PDF_HighlightSpansContainingText('2016', 'blue', 'pink');" |
@@ -108,24 +153,17 @@ Func __UserEventHandler__Bridge_OnMessageReceived($oWebV2M, $hGUI, $sMsg) |
108 | 153 |
|
109 | 154 | If $sFirstChar = "{" Or $sFirstChar = "[" Then ; 1. JSON Messaging |
110 | 155 | ConsoleWrite("+> : Processing JSON Messaging..." & @CRLF) |
111 | | - Local $oJson = ObjCreate("NetJson.Parser") |
112 | | - If ObjName($oJson, $OBJ_PROGID) <> 'NetWebView2.Manager' Then Return ConsoleWrite("!> Error: Failed to create NetJson object." & @CRLF) |
| 156 | + Local $oJson = _NetJson_CreateParser($sMsg) |
| 157 | + If @error Then Return ConsoleWrite("!> Error: Failed to create NetJson object." & @CRLF) |
113 | 158 |
|
114 | | - $oJson.Parse($sMsg) |
115 | 159 | Local $sJobType = $oJson.GetTokenValue("type") |
116 | 160 |
|
117 | 161 | Switch $sJobType |
118 | 162 | Case "COM_TEST" |
119 | 163 | ConsoleWrite("- COM_TEST Confirmed: " & $oJson.GetTokenValue("status") & @CRLF) |
120 | 164 |
|
121 | 165 | Case "PDF_DATA_PACKAGE" |
122 | | - ConsoleWrite("> PDF Metadata: " & $oJson.GetTokenValue("metadata.title") & " by " & $oJson.GetTokenValue("metadata.author") & @CRLF) |
123 | | - |
124 | | - ; Loop through pages (if your parser supports it) |
125 | | - Local $iPages = $oJson.GetTokenValue("metadata.pagesCount") |
126 | | - For $i = 0 To $iPages - 1 |
127 | | - ConsoleWrite("- Page " & ($i + 1) & " content: " & StringLeft($oJson.GetTokenValue("pages[" & $i & "].text"), 150) & "..." & @CRLF) |
128 | | - Next |
| 166 | + Get_Data_Sync($sMsg, "PDF_DATA_PACKAGE") |
129 | 167 | EndSwitch |
130 | 168 |
|
131 | 169 | Else ; 2. Legacy / Native Pipe-Delimited Messaging |
@@ -154,6 +192,28 @@ Func __UserEventHandler__Bridge_OnMessageReceived($oWebV2M, $hGUI, $sMsg) |
154 | 192 | EndIf |
155 | 193 | EndFunc ;==>__UserEventHandler__Bridge_OnMessageReceived |
156 | 194 |
|
| 195 | +Func Get_Data_Sync($sData = "", $sJobType = "DEFAULT", $iTimeout = 5000) |
| 196 | + ; We use a Map to hold many different types of data at the same time. |
| 197 | + Local Static $mDataMap[] |
| 198 | + |
| 199 | + ; If we send data (from the Event Handler) |
| 200 | + If $sData <> "" Then |
| 201 | + $mDataMap[$sJobType] = $sData |
| 202 | + Return True |
| 203 | + EndIf |
| 204 | + |
| 205 | + ; If we request data (from the main Script) |
| 206 | + Local $iStart = TimerInit() |
| 207 | + While Not MapExists($mDataMap, $sJobType) |
| 208 | + If TimerDiff($iStart) > $iTimeout Then Return SetError(1, 0, "") |
| 209 | + Sleep(10) |
| 210 | + WEnd |
| 211 | + |
| 212 | + Local $sResult = $mDataMap[$sJobType] |
| 213 | + MapRemove($mDataMap, $sJobType) ; Cleaning for next time |
| 214 | + Return $sResult |
| 215 | +EndFunc ;==>Get_Data_Sync |
| 216 | + |
157 | 217 | Func __SetupStaticPDF(ByRef $oWeb, $s_PDF_Path, $sExpectedTitle, $bBlockLinks = False, $bBlockSelection = False, $bShowToolbar = False) |
158 | 218 | ; 🏆 https://mozilla.github.io/pdf.js/ |
159 | 219 |
|
@@ -230,17 +290,17 @@ Func __SetupStaticPDF(ByRef $oWeb, $s_PDF_Path, $sExpectedTitle, $bBlockLinks = |
230 | 290 |
|
231 | 291 | $oWeb.AddInitializationScript($sCleanupJS) |
232 | 292 |
|
| 293 | + |
233 | 294 | ; Fix slashes in Path for URL |
234 | | - Local $s_PDF_URL = StringReplace($s_PDF_Path, "\", "/") |
235 | | - $s_PDF_URL = $oWeb.EncodeURI($s_PDF_URL) |
236 | | - Local $s_PDF_JS_URL = StringReplace(@ScriptDir & "\JS_Lib\pdfjs\web\viewer.html" & "?file=", "\", "/") |
237 | | - Local $s_Viewer_URL = "file:///" & $s_PDF_JS_URL & $s_PDF_URL |
238 | | - ConsoleWrite("- $s_Viewer_URL= " & $s_Viewer_URL & @CRLF) |
| 295 | + Local $sViewerPath = StringReplace(@ScriptDir & "\JS_Lib\pdfjs\web\viewer.html", "\", "/") |
| 296 | + Local $sPDF_URL = "file:///" & StringReplace($s_PDF_Path, "\", "/") |
| 297 | + Local $sFinalURL = "file:///" & $sViewerPath & "?file=" & $oWeb.EncodeURI($sPDF_URL) |
| 298 | + ConsoleWrite("Correct URL: " & $sFinalURL & @CRLF) |
239 | 299 |
|
240 | | - _NetWebView2_Navigate($oWeb, $s_Viewer_URL, $NETWEBVIEW2_MESSAGE__TITLE_CHANGED, $sExpectedTitle, 5000) |
| 300 | + _NetWebView2_Navigate($oWeb, $sFinalURL, $NETWEBVIEW2_MESSAGE__TITLE_CHANGED, $sExpectedTitle, 5000) |
241 | 301 | ConsoleWrite("! we're done with navigation, but check how many more messages there are below. SLN=" & @ScriptLineNumber & @CRLF) |
242 | 302 | MsgBox($MB_TOPMOST, "TEST #" & @ScriptLineNumber, 'Wait for all messages to full loading PDF by pdf.js') |
243 | | - #EndRegion ; mLipok #TODO this should be fixed by better LoadWait, I mean adding a check if the desired title appears |
| 303 | + ; mLipok #TODO this should be fixed by better LoadWait, I mean adding a check if the desired title appears |
244 | 304 |
|
245 | 305 | ; $oWeb.IsZoomControlEnabled = False ; <--- It doesn't work in PDF. |
246 | 306 | $oWeb.DisableBrowserFeatures() |
|
0 commit comments