Hyphenation doesn't work with MS Edge mobile - windows-phone

CSS:
overflow-wrap: break-word;
word-wrap: break-word;
-webkit-hyphens: auto;
-ms-hyphens: auto;
-moz-hyphens: auto;
hyphens: auto;
Works fine in the desktop-version of Edge, but not on my Windows Phone 10. Any help?

SOLUTION:
Go to http://mnater.github.io/Hyphenator/mergeAndPack.html and generate Hyphenator.js with your preferences, then use the class
.hyphenate {
hyphens: auto;
-webkit-hyphens: auto;
-ms-hyphens: auto;
-moz-hyphens: auto;
}
to set up the content.
For more info how to use #ttps://github.com/mnater/Hyphenator and a practical exemple it is posible use hyphens in Microsoft Edge Windows Phone 10 #ttps://www.scania.com/global/en/home.html use in headers .hyphenate
Sorry for my English, and only can put one link ( change # for h).
Att. Miguel N.
Para los hispano hablantes simplemente, generad el Hyphenator.js desde el enlace y luego usad la clase , lo sacareis .
Larga vida a Windows Phone!!!! o que dure un poco más.
Regards y Saludos

Related

QProgressDialog object AttributeError: 'ProgressBar' object has no attribute 'wasCanceled'

I am trying to DRY up a PyQt program that calls QProgressDialog at various times. Instead of each occurrence calling a variation of this:
self.cat_progress = QProgressDialog(self.root)
self.cat_progress.setMinimumWidth(800)
self.cat_progress.setWindowTitle('Downloading Data')
self.cat_progress.setMinimumDuration(0)
self.cat_progress.setWindowModality(Qt.ApplicationModal)
self.cat_progress_label = QLabel('')
self.cat_progress.setLabel(self.cat_progress_label)
total_requests = 25
self.cat_progress.setMaximum(total_requests)
self.current_progress = 1
self.cat_progress.setValue(self.current_progress)
self.message_phase = 'Starting Collection'
self.progress_bar_max = 0
self.cat_progress_label.setText(self.message_phase)
I made a class, so that each time a progressDialog is needed I can use 3 lines, instead of 20+.
class ProgressBar(QDialog):
def __init__(self, title, label, prog_max=100):
super().__init__()
self.progress = QProgressDialog(self)
self.progress.setMinimumWidth(600)
self.progress.setWindowTitle(title)
self.progress.setMinimum(0)
self.progress.setValue(0)
self.progress.setWindowModality(Qt.WindowModal)
self.progress.setMaximum(prog_max)
self.progress.setWindowFlag(Qt.WindowContextHelpButtonHint,False) # This removes the '?' from the dialog
self.progress.setStyleSheet("""
QProgressBar {
border: 2px solid grey;
border-radius: 5px;
text-align: center
}
QProgressBar::chunk {
background-color: rgb(139, 183, 240);
width: 25px
}
QPushButton {
border: 2px solid grey;
border-radius: 5px;
padding: 5% 8%;
}
""")
self.progress_label = QLabel(label)
self.progress.setLabel(self.progress_label)
def advance_progress(self, label):
self.progress_label.setText(label)
self.progress.setValue(self.progress.value() + 1)
def canceled(self):
self.stop_progress()
def stop_progress(self):
self.deleteLater()
The issue is that one usage was relying on the built-in Cancel button's wasCanceled() boolean value. As the program runs a loop, if progress.wasCanceled(): ...start a different process. Now that progress is from a class and not directly made from QProgressDialog, I get an AttributeError: 'ProgressBar' object has no attribute 'wasCanceled'. Clicking this button will escape the dialog, but it does not progress into the next process as I need.
I've tried to add signals, connect a cancelled function, to set a userClicked boolean, etc. Some things broke the Cancel so it just resets and starts over, infinitely, when you click cancel. Some self 'clicked' the button (I had a print statement output) as the loop ran, but didn't stop the action. Once, it got to that if statement and broke out on its own.
How do I keep this as an object and also know when a user has clicked Cancel?
Small demo that now works! [the key is to inherit from the right widget and to not call a new instance of QProgressDialog]:
import sys
import time
from PyQt5.QtWidgets import QMainWindow, QApplication, QProgressDialog, QLabel, QPushButton
from PyQt5.QtCore import Qt
class ProgressBar(QProgressDialog):
def __init__(self, title, label, prog_max=100):
super().__init__()
self.setMinimumWidth(600)
self.setWindowTitle(title)
self.setMinimum(0)
self.setValue(0)
self.setWindowModality(Qt.WindowModal)
self.setMaximum(prog_max)
self.setStyleSheet("""
QProgressBar {
border: 2px solid grey;
border-radius: 5px;
text-align: center
}
QProgressBar::chunk {
background-color: rgb(139, 183, 240);
width: 25px
}
QPushButton {
border: 2px solid grey;
border-radius: 5px;
padding: 5% 8%;
}
""")
self.progress_label = QLabel(label)
self.setLabel(self.progress_label)
def advance_progress(self, label):
self.progress_label.setText(label)
self.setValue(self.value() + 1)
def canceled(self):
self.stop_progress()
def stop_progress(self):
self.deleteLater()
class Testing(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('Testing Progress')
btn = QPushButton('Start progress bar')
btn.clicked.connect(self.run_progress)
self.setCentralWidget(btn)
def run_progress(self):
# Title, Label, setMaximum
progress = ProgressBar('Window Running Progress', 'Testing from Element', 30)
progress.advance_progress('Starting Scan ...')
i = 0
while i < 30:
print(i)
time.sleep(2)
progress.advance_progress(f'Counting {i}')
i += 1
if progress.wasCanceled():
alert('User Stopped!')
progress.stop_progress()
progress.stop_progress()
if __name__ == '__main__':
app = QApplication(sys.argv)
test = Testing()
test.show()
sys.exit(app.exec_())

How to setPixmap on a QLabel from QCamera image

I been trying an image to a Label via setPixmap() but to no avail...
In fact, i want that if i click to call the Methode def click_photo(self): to setthe image also
from PyQt5.QtWidgets import *
from PyQt5.QtMultimedia import *
from PyQt5.QtMultimediaWidgets import *
import os, sys, time
class MainWindow(QMainWindow):
def __init__(self): # constructor
super().__init__()
self.setGeometry(100, 100, 800, 600)
self.setStyleSheet("background : lightgrey;")
self.available_cameras = QCameraInfo.availableCameras()
self.Label_preview = QLabel(self, 'preview here')
self.status = QStatusBar()
self.status.setStyleSheet("background : white;")
self.setStatusBar(self.status) # adding status bar to the main window
self.save_path = "" # path to save
self.viewfinder = QCameraViewfinder() # creating a QCameraViewfinder object
self.viewfinder.show() # showing this viewfinder
self.setCentralWidget(self.viewfinder) # making it central widget of main window
self.select_camera(0) # Set the default camera.
toolbar = QToolBar("Camera Tool Bar") # creating a tool bar
self.addToolBar(toolbar) # adding tool bar to main window
click_action = QAction("Click photo", self) # creating a photo action to take photo
click_action.setStatusTip("This will capture picture") # adding status tip to the photo action
click_action.setToolTip("Capture picture")
click_action.triggered.connect(self.click_photo) # adding action to it
toolbar.addAction(click_action) # adding this to the tool bar
change_folder_action = QAction("Change save location", self) # similarly creating action for changing save folder
change_folder_action.setStatusTip("Change folder where picture will be saved saved.")
change_folder_action.setToolTip("Change save location") # adding tool tip to it
# setting calling method to the change folder action
# when triggered signal is emitted
change_folder_action.triggered.connect(self.change_folder)
toolbar.addAction(change_folder_action) # adding this to the tool bar
# creating a combo box for selecting camera
camera_selector = QComboBox()
# adding status tip to it
camera_selector.setStatusTip("Choose camera to take pictures")
# adding tool tip to it
camera_selector.setToolTip("Select Camera")
camera_selector.setToolTipDuration(2500)
# adding items to the combo box
camera_selector.addItems([camera.description()
for camera in self.available_cameras])
# adding action to the combo box
# calling the select camera method
camera_selector.currentIndexChanged.connect(self.select_camera)
# adding this to tool bar
toolbar.addWidget(camera_selector)
toolbar.setStyleSheet("background : white;")
self.setWindowTitle("PyQt5 Cam")
self.show()
# method to select camera
def select_camera(self, i):
self.camera = QCamera(self.available_cameras[i]) # getting the selected camera
self.camera.setViewfinder(self.viewfinder) # getting the selected camera
self.camera.setCaptureMode(QCamera.CaptureStillImage) # setting capture mode to the camera
self.camera.error.connect(lambda: self.alert(self.camera.errorString())) # if any error occur show the alert
self.camera.start() # start the camera
self.capture = QCameraImageCapture(self.camera) # creating a QCameraImageCapture object
self.capture.error.connect(lambda error_msg, error, msg: self.alert(msg)) # showing alert if error occur
self.capture.imageCaptured.connect(lambda d,
i: self.status.showMessage("Image captured : "
+ str(self.save_seq))) # when image captured showing message
self.capture.imageCaptured.connect(lambda d, i: self.status.showMessage("Image captured : " + str(self.save_seq))) # when image captured showing message
self.tipamu = i
# getting current camera name
self.current_camera_name = self.available_cameras[i].description()
# inital save sequence
self.save_seq = 0
# method to take photo
def click_photo(self):
# time stamp
timestamp = time.strftime("%d-%b-%Y-%H_%M_%S")
self.capture.capture(os.path.join(self.save_path,
"%s-%04d-%s.jpg" % (
self.current_camera_name,
self.save_seq,
timestamp
))) # capture the image and save it on the save path
# increment the sequence
self.save_seq += 1
# change folder method
def change_folder(self):
path = QFileDialog.getExistingDirectory(self, "Picture Location", "") # open the dialog to select path
if path: # if path is selected
self.save_path = path # update the path
self.save_seq = 0 # update the sequence
def alert(self, msg):
error = QErrorMessage(self) # error message
error.showMessage(msg) # setting text to the error message
# Driver code
if __name__ == "__main__" :
App = QApplication(sys.argv) # create pyqt5 app
window = MainWindow() # create the instance of our Window
sys.exit(App.exec()) # start the app
i tried
self.Label_preview.setPixmap(QPixmap(self.capture))
but it didn't work, is there a way to approach this: setting the image captured via webcam to the preview Qlabel self.Label_preview before saving that image to the disk or without saving to the disk ?
I started from the same example you found. Here is how I did it with a bit of extra styling and ported to PyQt6.
# importing required libraries
from PyQt6.QtWidgets import *
from PyQt6.QtGui import *
from PyQt6.QtMultimedia import *
from PyQt6.QtMultimediaWidgets import *
from PyQt6.QtCore import Qt
import os
import sys
import time
stylesheet = """
QWidget {
background-color: rgba(32.000, 33.000, 36.000, 1.000);
color: rgba(170.000, 170.000, 170.000, 1.000);
selection-background-color: rgba(138.000, 180.000, 247.000, 1.000);
selection-color: rgba(32.000, 33.000, 36.000, 1.000);
}
QWidget:disabled {
color: rgba(105.000, 113.000, 119.000, 1.000);
selection-background-color: rgba(83.000, 87.000, 91.000, 1.000);
selection-color: rgba(105.000, 113.000, 119.000, 1.000);
}
QToolTip {
background-color: rgba(41.000, 42.000, 45.000, 1.000);
color: rgba(228.000, 231.000, 235.000, 1.000);
border: 1px solid rgba(63.000, 64.000, 66.000, 1.000);
}
QSizeGrip {
width: 0;
height: 0;
image: none;
}
QStatusBar {
background-color: rgba(42.000, 43.000, 46.000, 1.000);
}
QStatusBar::item {
border: none;
}
QStatusBar QWidget {
background-color: transparent;
padding: 0px;
border-radius: 0px;
margin: 0px;
}
QStatusBar QWidget:pressed {
background-color: rgba(79.000, 80.000, 84.000, 1.000);
}
QStatusBar QWidget:disabled {
background-color: rgba(32.000, 33.000, 36.000, 1.000);
}
QStatusBar QWidget:checked {
background-color: rgba(79.000, 80.000, 84.000, 1.000);
}
QToolBar {
background-color: rgba(41.000, 42.000, 45.000, 1.000);
padding: 1x;
font-weight: bold;
spacing: 1px;
margin: 1px;
}
QToolBar::separator {
background-color: rgba(63.000, 64.000, 66.000, 1.000);
}
QToolBar::separator:horizontal {
width: 2px;
margin: 0 6px;
}
QToolBar::separator:vertical {
height: 2px;
margin: 6px 0;
}
QPushButton {
border: 1px solid rgba(63.000, 64.000, 66.000, 1.000);
padding: 4px 8px;
border-radius: 4px;
color: rgba(138.000, 180.000, 247.000, 1.000);
}
QPushButton:hover {
background-color: rgba(30.000, 43.000, 60.000, 1.000);
}
QPushButton:pressed {
background-color: rgba(46.000, 70.000, 94.000, 1.000);
}
QPushButton:checked {
border-color: rgba(138.000, 180.000, 247.000, 1.000);
}
QPushButton:disabled {
border-color: rgba(63.000, 64.000, 66.000, 1.000);
}
QPushButton[flat=true]:!checked {
border-color: transparent;
}
QDialogButtonBox QPushButton {
min-width: 65px;
}
QComboBox {
border: 1px solid rgba(63.000, 64.000, 66.000, 1.000);
border-radius: 4px;
min-height: 1.5em;
padding: 0 4px;
background-color: rgba(63.000, 64.000, 66.000, 1.000);
}
QComboBox:focus,
QComboBox:open {
border: 1px solid rgba(138.000, 180.000, 247.000, 1.000);
}
QComboBox::drop-down {
subcontrol-position: center right;
border: none;
padding-right: 4px;
}
QComboBox::item:selected {
border: none;
background-color: rgba(0.000, 72.000, 117.000, 1.000);
color: rgba(228.000, 231.000, 235.000, 1.000);
}
QComboBox QAbstractItemView {
margin: 0;
border: 1px solid rgba(63.000, 64.000, 66.000, 1.000);
selection-background-color: rgba(0.000, 72.000, 117.000, 1.000);
selection-color: rgba(228.000, 231.000, 235.000, 1.000);
padding: 2px;
}
"""
# Main window class
class MainWindow(QMainWindow):
# constructor
def __init__(self):
super().__init__()
self.captured_image = None
self.save_seq = None
self.capture = None
self.camera = None
self.current_camera_name = None
self.mirror_h = True
# setting geometry
self.setGeometry(200, 200, 800, 600)
self.setStyleSheet("background : darkgrey;")
# getting available cameras
self.available_cameras = QMediaDevices.videoInputs()
# if no camera found
if not self.available_cameras:
# exit the code
sys.exit()
self.status = QStatusBar()
self.setStatusBar(self.status)
# path to save
self.save_path = ""
toolbar = QToolBar("Camera Tool Bar")
self.addToolBar(toolbar)
# creating a photo action to take photo
click_action = QAction("Get Photo", self)
click_action.setStatusTip("This will capture picture")
click_action.setToolTip("Capture picture")
click_action.triggered.connect(self.capture_picture)
toolbar.addAction(click_action)
# similarly creating action for changing save folder
change_folder_action = QAction("Save location", self)
change_folder_action.setStatusTip("Change folder where picture will be saved saved.")
change_folder_action.setToolTip("Change save location")
change_folder_action.triggered.connect(self.change_folder)
toolbar.addAction(change_folder_action)
# creating a combo box for selecting camera
camera_selector = QComboBox()
camera_selector.setStatusTip("Choose camera to take pictures")
camera_selector.setToolTip("Select Camera")
camera_selector.setToolTipDuration(2500)
camera_selector.addItems([camera.description() for camera in self.available_cameras])
camera_selector.currentIndexChanged.connect(self.select_camera)
toolbar.addWidget(camera_selector)
camera_mirror = QCheckBox("Mirror")
camera_mirror.setChecked(True)
camera_mirror.setStatusTip("Mirror the captured image horizontally")
camera_mirror.setToolTip("Mirror Camera")
camera_mirror.stateChanged.connect(self.on_mirror_changed)
toolbar.addWidget(camera_mirror)
# setting window title
self.setWindowTitle("PyQt6 Cam")
main_wdg = QWidget()
layout = QVBoxLayout(main_wdg)
glay = QGridLayout()
glay.setRowStretch(0, 1)
glay.setRowStretch(1, 0)
self.label = QLabel()
self.label.setSizePolicy(QSizePolicy.Policy.Ignored, QSizePolicy.Policy.Expanding)
self.save_btn = QPushButton("Save Picture")
self.save_btn.clicked.connect(self.on_save_picture)
glay.addWidget(self.label, 0, 0)
glay.addWidget(self.save_btn, 1, 0)
self.video_wdg = QVideoWidget()
hlay = QHBoxLayout()
hlay.addLayout(glay)
hlay.addWidget(self.video_wdg)
layout.addLayout(hlay, stretch=1)
self.setCentralWidget(main_wdg)
self.video_wdg.show()
# showing the main window
self.show()
self.select_camera(0)
# method to select camera
def select_camera(self, current_camera):
media_capture_session = QMediaCaptureSession(self)
self.camera = QCamera(self.available_cameras[current_camera])
self.camera.start()
media_capture_session.setCamera(self.camera)
media_capture_session.setVideoOutput(self.video_wdg)
self.camera.errorOccurred.connect(lambda err, err_str: self.alert(err_str))
self.capture = QImageCapture(self.camera)
media_capture_session.setImageCapture(self.capture)
self.capture.errorOccurred.connect(lambda error_msg, error, msg: self.alert(msg))
# when image captured showing message
self.capture.imageCaptured.connect(self.on_image_captured)
self.current_camera_name = self.available_cameras[current_camera].description()
# initial save sequence
self.save_seq = 0
def on_image_captured(self, id, image):
width = self.label.width()
height = self.label.height()
self.captured_image = image
if self.mirror_h is True:
self.captured_image = image.mirrored(horizontal=True, vertical=False)
pixmap = QPixmap().fromImage(self.captured_image)
self.label.setPixmap(pixmap.scaled(width, height, Qt.AspectRatioMode.KeepAspectRatio))
self.status.showMessage("Image captured.")
# method to take photo
def capture_picture(self):
self.capture.capture()
def on_save_picture(self):
# time stamp
timestamp = time.strftime("%d-%b-%Y-%H_%M_%S")
file_path = os.path.join(
self.save_path, "%s-%04d-%s.jpg" % (self.current_camera_name, self.save_seq, timestamp))
try:
self.captured_image.save(file_path, format='jpg', quality=-1)
except Exception as err:
print(err)
self.status.showMessage("Image saved to: %s" % str(file_path))
# increment the sequence
self.save_seq += 1
def on_mirror_changed(self, state):
self.mirror_h = True if int(state) else False
# change folder method
def change_folder(self):
# open the dialog to select path
path = QFileDialog.getExistingDirectory(self, "Picture Location", "")
# if path is selected
if path:
# update the path
self.save_path = path
# update the sequence
self.save_seq = 0
# method for alerts
def alert(self, msg):
# error message
error = QErrorMessage(self)
# setting text to the error message
error.showMessage(msg)
# Driver code
if __name__ == "__main__":
# create pyqt5 app
App = QApplication(sys.argv)
# create the instance of our Window
window = MainWindow()
window.setStyleSheet(stylesheet)
# start the app
sys.exit(App.exec())

wxWidget::wxWebView->Find wxWEBVIEW_FIND_HIGHLIGHT_RESULT Segmentation Fault

wxWidget::wxWebView->Find - https://docs.wxwidgets.org/3.0/classwx_web_view.html#ad85a7aa0351b6e6a6bffd4220f9758ee
Sample Code
wxWebView *webView;
webView = wxWebView::New(this, wxID_ANY);
webView->SetPage("<html><head><meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no' /><meta content='en-us' http-equiv=\"Content-Language\" /><meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\" /><title>Demo App</title><style type=\"text/css\">.auto-style8 {font-family: \"Bookman Old Style\";font-weight:bold;color:#734024;}.underline{color:#ff0000;}.text {color:#230fd2;}#wrapper1 { width: 100% ; display: table;}#wrapper {width: 100% ; display: table;}#header1 {color: #E6F0F1; display: table; background-color: #0000ff;width: 100% ; text-align: center;height: 50px;font-size: 105% ; font-weight: bold;}#header2 {background-color: #B98264;display: table; width: 100% ; height: 40px;text-align: center;color: #FFFFFF; font-size: 75% ; font-weight: bold;}.auto-style13 {text-decoration: underline;}.text2{color:#000000;text-align: justify;}</style></head> <body style=\"color:#000000;background-color:#FFFFFF\"><div id=\"header2\"><p style=\"font-size: x-medium\" class=\"auto-style13\">Demo Page<br></p></div> <p class=\"auto-style8\" style=\"width: 100%;\">To Start - <br/><br/>STEP 1. Select data</p></body></html>","");
long lMatchCount = webView->Find("a",wxWEBVIEW_FIND_HIGHLIGHT_RESULT );
if(lMatchCount == wxNOT_FOUND){
wxMessageBox("Search not found");
}else{
//wxMessageBox("Search found" + lMatchCount);
wxLogMessage("Matches: %s ",std::to_string(lMatchCount));
}
Above code works correctly and returns number of occurrences of "a".
When webview->SetPage is updated again dynamically with large text ( any dummy content will do ) and if find call is called again it crashes with Segmentation fault
If SetPage is loaded with large text in 1st instance itself it crashes as well so ruled out possibility of update causing the crash.
Also tried loading large file from local file ( default.html contains above html code - replace any long string and it crashes with same result )
wxFile fFileIn("default.html", wxFile::read);
wxFileInputStream in(fFileIn);
webView->SetPage(in,"");
fFileIn.Close();
Similar issue is reported here http://trac.wxwidgets.org/ticket/15207
As per discussion on this thread http://trac.wxwidgets.org/ticket/15207.
We have workaround to this problem ( Still don't know why this is happening and what is the root cause )
Use the code mentioned in PR https://github.com/wxWidgets/wxWidgets/pull/2626.
Call Find before the setPage
wxFile fFileIn("default.html", wxFile::read);
wxFileInputStream in(fFileIn);
webView->Find("");
webView->SetPage(in,"");
fFileIn.Close();

VBA MACRO EXCEL error Not Fetching Data into Excel

These line in my script throws the error.
and also am providing you corresponding html for the same so as to analyse on description attribute which has been given in html and also it doesn't accept html id attribute with dot (.)
Macro VBA-
searchtxt.Value = "Earth"
.document.forms(0).submit
Do While .Busy
DoEvents
Loop
Do While .readyState <> 4
DoEvents
Loop
ThisWorkbook.Sheets(1).Range("A2") = "hgvgjjlj"
Set doc = .document
Set searchres = doc.getElementById("description").innerText
ThisWorkbook.Sheets(1).Range("A1").value = searchres
HTML-
<textarea onblur="this.isFocused=false;"
onkeydown="multiKeyDown(this);"
onfocus="this.isFocused=true;"
onchange="this.isFocused=false;multiModified(this)"
data-charlimit="false"
data-length="4000"
spellcheck="true"
name="u_incident_task.description"
style="width: 100%; overflow: hidden; word-wrap: break-word; resize: none; height: 356px;"
id="u_incident_task.description"
wrap="soft" specialtype="" class="form-control">Description:
Description xyz asdfghvb</textarea>

Excel VBA compare strings with spaces, percentage signs, and commas

Update: I copy and pasted my example html file from here into a new file to make sure people could test with it, and then my code worked! I'm thinking this is an encoding issue because the original file was auto-generated from a Linux machine. I've tried saving a new file and reopening that one from the script, but that didn't work. I'm hoping I could still solve this using only one VBA macro by either somehow saving a new file and using the data in that one or making sure the encoding matches.
I can't seem to compare the following string correctly:
line, %
I've been trying to use the StrComp function and just using an equal sign, but both have not worked. I also used the Trim function on the strings I'm comparing to make sure there's no whitespace on either ends. I can trace through the debugger and see that the values I'm comparing are both "line, %", but the expression never evaluates to true.
Do any of the characters in this string cause me to have to do something special in order for a comparison to work?
Edit: This does work (I made a typo in my last edit):
Dim percentString As String
percentString = "line, %"
Dim test As String
test = percentString
If StrComp(percentString, test) = 0 Then
MsgBox "They are equal"
End If
However, I'm reading input from an html file, and that is not working. See below for code you can try.
Maybe it has to do with charset=ISO-8859-1 in the html input? Would the character set matter? Here is what is at the beginning: <HTML><HEAD><META CONTENT="text/html; charset=ISO-8859-1" HTTP-EQUIV="Content-Type"/>
Here is an example you can try
testFile.html
<HTML><HEAD><META CONTENT="text/html; charset=ISO-8859-1" HTTP-EQUIV="Content-Type"/><TITLE>title</TITLE><STYLE>
TABLE,TD,TH {border-style:solid; border-color:black;} TD,TH {background:white;margin:0;line-height:100%;padding-
left:0.5em;padding-right:0.5em;} TD {border-width:0 1px 0 0;} TH {border-width:1px 1px 1px 0;} TR TD.h {color:red;} TABLE
{border-spacing:0; border-collapse:collapse;border-width:0 0 1px 1px;} P,H1,H2,H3,TH {font-family:verdana,arial,sans-
serif;font-size:10pt;} TD {font-family:courier,monospace;font-size:10pt;} TABLE.hdft {border-spacing:0;border-
collapse:collapse;border-style:none;} TABLE.hdft TH,TABLE.hdft TD {border-style:none;line-height:normal;} TABLE.hdft
TH.tl,TABLE.hdft TD.tl {background:#6699CC;color:white;} TABLE.hdft TD.nv {background:#6633DD;color:white;} .nv A:link
{color:white;} .nv A:visited {color:white;} .nv A:active {color:yellow;} TABLE.hdft A:link {color:white;} TABLE.hdft
A:visited {color:white;} TABLE.hdft A:active {color:yellow;} .in {color:#356085;} TABLE.s TD {padding-left:0.25em;padding-
right:0.25em;} TABLE.s TD.l {padding-left:0.25em;padding-right:0.25em;text-align:right;background:#F0F0F0;} TABLE.s TR.z TD
{background:#FF9999;} TABLE.s TR.p TD {background:#FFFF88;} TABLE.s TR.c TD {background:#CCFFCC;} A:link
{color:#0000EE;text-decoration:none;} A:visited {color:#0000EE;text-decoration:none;} A:hover {color:#0000EE;text-
decoration:underline;} TABLE.cn {border-width:0 0 1px 0;} TABLE.s {border-width:1px 0 1px 1px;} TD.h {color:red;border-
width:0 1px 0 0;} TD.f {border-width:0 1px 0 1px;} TD.hf {color:red;border-width:0 1px 0 1px;} TH.f {border-width:1px 1px
1px 1px;} TR.cis TD {background:#F0F0F0;} TR.cis TD {border-width:1px 1px 1px 0;} TR.cis TD.h {color:red;border-width:1px
1px 1px 0;} TR.cis TD.f {border-width:1px 1px 1px 1px;} TR.cis TD.hf {color:red;border-width:1px 1px 1px 1px;} TD.b
{border-style:none;background:transparent;line-height:50%;} TD.bt {border-width:1px 0 0 0;background:transparent;line-
height:50%;} TR.o TD {background:#F0F0F0;}TABLE.it {border-style:none;}TABLE.it TD,TABLE.it TH {border-style:none;}
</STYLE></HEAD><BODY><TABLECELLSPACING="0" WIDTH="100%"><TR><TH>Report</TH></TR><TR><TD></TD></TR></TABLE><H2></H2><TABLE
CELLSPACING="0" WIDTH="100%"><TR><TH>line, %</TH></TR><TR><TD>Name</TD></TR></TABLE><H3></H3><TABLE CELLSPACING="0"
WIDTH="100%"><TR><TH>line, %</TH></TR><TR><TD>test</TD></TR></TABLE><P></P><TABLE CELLSPACING="0"
WIDTH="100%"><TR><TD></TD></TR><TR><TD></TD></TR></TABLE></BODY></HTML>
Use this VBA code and make small modifications to specify where testFile.html is.
Option Explicit
Sub percent()
Dim MyFile As String
MyFile = "testFile.html"
Dim percentString As String
percentString = CStr("line, %")
Dim ws As Worksheet
Workbooks.Open Filename:= _
"path\to\testFile" & MyFile
Dim stringVal As String
Dim val As Variant
Set ws = Worksheets("testFile")
For Each val In ws.UsedRange.Value
stringVal = CStr(val)
stringVal = Replace(stringVal, vbLf, "")
stringVal = Replace(stringVal, vbTab, "")
stringVal = Trim(Application.Clean(stringVal))
percentString = Replace(percentString, vbLf, "")
percentString = Replace(percentString, vbTab, "")
percentString = Trim(Application.Clean(percentString))
Dim res As Integer
res = StrComp(stringVal, percentString)
If res = 0 Then
MsgBox "Found the percent string"
End If
Next val
Workbooks(MyFile).Close
End Sub
It turns out there was an encoding problem. Basically, an  character showed up in the debugger only after I made a script that changed all the line, % lines into something else. Therefore, the following got rid of the  character, and this character is why I couldn't get the comparison to evaluate to true:
stringVal = Replace(stringVal, Chr(194), vbNullString)
Sorry to all of those who tried to help. Turns out this kind of question would have only been useful to try to answer if I could have uploaded the input file itself so the encoding would have stayed.
When I have run into this problem in the past I have done two things:
1) See what the string is by creating a cell that has something like:
B1= "|" & A1 & "|"
I use this on both cells to see if there is anything strange. Sometimes there are tabs or new lines that don't show up.
2) I substitute out strange things. If you find a new line you can use find replace to get rid of it all together or you can do a substitute with substr().
Hope this helps a bit. If you post the results from 1 I may be able to help more.
The StrComp function returns 0 if the strings are equal.
http://msdn.microsoft.com/pt-br/library/9s233cfc(v=vs.90).aspx
Kind regards.