Spaces:
Running
Running
Fix multiple UI issues: white container under Document Metadata, fullscreen buttons, and PDF preprocessing
Browse files- app.py +32 -27
- ui/__pycache__/layout.cpython-312.pyc +0 -0
- ui/custom.css +67 -4
app.py
CHANGED
|
@@ -365,8 +365,10 @@ def process_file(uploaded_file, use_vision=True, preprocessing_options=None, pro
|
|
| 365 |
|
| 366 |
# Generate a cache key based on file content, type and settings
|
| 367 |
import hashlib
|
|
|
|
|
|
|
| 368 |
file_hash = hashlib.md5(open(temp_path, 'rb').read()).hexdigest()
|
| 369 |
-
cache_key = f"{file_hash}_{file_type}_{use_vision}"
|
| 370 |
|
| 371 |
progress_bar.progress(50)
|
| 372 |
status_text.markdown('<div class="processing-status-container">Processing document with OCR...</div>', unsafe_allow_html=True)
|
|
@@ -947,26 +949,28 @@ with main_tab1:
|
|
| 947 |
st.markdown("**Preprocessed Preview**")
|
| 948 |
try:
|
| 949 |
processed_bytes = preprocess_image(uploaded_file.getvalue(), preprocessing_options)
|
| 950 |
-
#
|
| 951 |
-
st.
|
| 952 |
-
|
| 953 |
-
|
| 954 |
-
|
| 955 |
-
|
| 956 |
-
meta_items
|
| 957 |
-
|
| 958 |
-
|
| 959 |
-
|
| 960 |
-
|
| 961 |
-
|
| 962 |
-
|
| 963 |
-
|
| 964 |
-
|
| 965 |
-
|
| 966 |
-
|
| 967 |
-
|
| 968 |
-
|
| 969 |
-
|
|
|
|
|
|
|
| 970 |
except Exception as e:
|
| 971 |
st.error(f"Error in preprocessing: {str(e)}")
|
| 972 |
st.info("Try using grayscale preprocessing for PNG images with transparency")
|
|
@@ -1018,12 +1022,16 @@ with main_tab1:
|
|
| 1018 |
temp_path = tmp.name
|
| 1019 |
|
| 1020 |
# Process with NO custom prompt first
|
|
|
|
|
|
|
|
|
|
| 1021 |
base_result = processor.process_file(
|
| 1022 |
file_path=temp_path,
|
| 1023 |
file_type="pdf",
|
| 1024 |
use_vision=use_vision,
|
| 1025 |
custom_prompt=None, # No custom prompt in first step
|
| 1026 |
-
file_size_mb=len(uploaded_file.getvalue()) / (1024 * 1024)
|
|
|
|
| 1027 |
)
|
| 1028 |
|
| 1029 |
progress_bar.progress(70)
|
|
@@ -1131,11 +1139,8 @@ with main_tab1:
|
|
| 1131 |
|
| 1132 |
# Document Metadata in the top right of the right column
|
| 1133 |
with right_col:
|
| 1134 |
-
# Directly add the subheader without
|
| 1135 |
-
st.
|
| 1136 |
-
|
| 1137 |
-
# Create an inline container with compact styling
|
| 1138 |
-
st.markdown('<div class="metadata-container" style="margin-top:0">', unsafe_allow_html=True)
|
| 1139 |
|
| 1140 |
# Display file info
|
| 1141 |
st.write(f"**File Name:** {result.get('file_name', uploaded_file.name)}")
|
|
|
|
| 365 |
|
| 366 |
# Generate a cache key based on file content, type and settings
|
| 367 |
import hashlib
|
| 368 |
+
# Add pdf_rotation to cache key if present
|
| 369 |
+
pdf_rotation_value = pdf_rotation if 'pdf_rotation' in locals() else 0
|
| 370 |
file_hash = hashlib.md5(open(temp_path, 'rb').read()).hexdigest()
|
| 371 |
+
cache_key = f"{file_hash}_{file_type}_{use_vision}_{pdf_rotation_value}"
|
| 372 |
|
| 373 |
progress_bar.progress(50)
|
| 374 |
status_text.markdown('<div class="processing-status-container">Processing document with OCR...</div>', unsafe_allow_html=True)
|
|
|
|
| 949 |
st.markdown("**Preprocessed Preview**")
|
| 950 |
try:
|
| 951 |
processed_bytes = preprocess_image(uploaded_file.getvalue(), preprocessing_options)
|
| 952 |
+
# Using a container for better layout control
|
| 953 |
+
with st.container():
|
| 954 |
+
# Fixed width parameter to ensure compatibility
|
| 955 |
+
st.image(io.BytesIO(processed_bytes), width=300, use_column_width=False)
|
| 956 |
+
|
| 957 |
+
# Show preprocessing metadata next to the image
|
| 958 |
+
meta_items = []
|
| 959 |
+
if preprocessing_options.get("document_type", "standard") != "standard":
|
| 960 |
+
meta_items.append(f"Document type ({preprocessing_options['document_type']})")
|
| 961 |
+
if preprocessing_options.get("grayscale", False):
|
| 962 |
+
meta_items.append("Grayscale")
|
| 963 |
+
if preprocessing_options.get("denoise", False):
|
| 964 |
+
meta_items.append("Denoise")
|
| 965 |
+
if preprocessing_options.get("contrast", 0) != 0:
|
| 966 |
+
meta_items.append(f"Contrast ({preprocessing_options['contrast']})")
|
| 967 |
+
if preprocessing_options.get("rotation", 0) != 0:
|
| 968 |
+
meta_items.append(f"Rotation ({preprocessing_options['rotation']}°)")
|
| 969 |
+
|
| 970 |
+
# Only show "Applied:" if there are actual preprocessing steps
|
| 971 |
+
if meta_items:
|
| 972 |
+
meta_text = "Applied: " + ", ".join(meta_items)
|
| 973 |
+
st.caption(meta_text)
|
| 974 |
except Exception as e:
|
| 975 |
st.error(f"Error in preprocessing: {str(e)}")
|
| 976 |
st.info("Try using grayscale preprocessing for PNG images with transparency")
|
|
|
|
| 1022 |
temp_path = tmp.name
|
| 1023 |
|
| 1024 |
# Process with NO custom prompt first
|
| 1025 |
+
# Apply PDF rotation if specified
|
| 1026 |
+
pdf_rotation_value = pdf_rotation if 'pdf_rotation' in locals() else 0
|
| 1027 |
+
|
| 1028 |
base_result = processor.process_file(
|
| 1029 |
file_path=temp_path,
|
| 1030 |
file_type="pdf",
|
| 1031 |
use_vision=use_vision,
|
| 1032 |
custom_prompt=None, # No custom prompt in first step
|
| 1033 |
+
file_size_mb=len(uploaded_file.getvalue()) / (1024 * 1024),
|
| 1034 |
+
pdf_rotation=pdf_rotation_value # Pass rotation value to processor
|
| 1035 |
)
|
| 1036 |
|
| 1037 |
progress_bar.progress(70)
|
|
|
|
| 1139 |
|
| 1140 |
# Document Metadata in the top right of the right column
|
| 1141 |
with right_col:
|
| 1142 |
+
# Directly add the subheader and container without nesting - fix white container
|
| 1143 |
+
st.markdown('<h3 style="margin-bottom:0; padding-bottom:0;">Document Metadata</h3><div class="metadata-container" style="margin-top:0;">', unsafe_allow_html=True)
|
|
|
|
|
|
|
|
|
|
| 1144 |
|
| 1145 |
# Display file info
|
| 1146 |
st.write(f"**File Name:** {result.get('file_name', uploaded_file.name)}")
|
ui/__pycache__/layout.cpython-312.pyc
CHANGED
|
Binary files a/ui/__pycache__/layout.cpython-312.pyc and b/ui/__pycache__/layout.cpython-312.pyc differ
|
|
|
ui/custom.css
CHANGED
|
@@ -98,6 +98,11 @@
|
|
| 98 |
border-left: 3px solid #4285f4;
|
| 99 |
}
|
| 100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
/* Fix spacing for headings above metadata container */
|
| 102 |
.element-container h3 + div .metadata-container,
|
| 103 |
.element-container h1 + div .metadata-container,
|
|
@@ -106,18 +111,74 @@
|
|
| 106 |
}
|
| 107 |
|
| 108 |
/* Remove excess space between metadata heading and content */
|
| 109 |
-
.stMarkdown + div div.element-container
|
|
|
|
|
|
|
|
|
|
| 110 |
margin-top: 0 !important;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 111 |
}
|
| 112 |
|
| 113 |
/* Fix fullscreen button styling */
|
| 114 |
button[title="View fullscreen"],
|
| 115 |
button.streamlit-expanderHeader {
|
| 116 |
-
z-index:
|
| 117 |
background-color: rgba(255, 255, 255, 0.8) !important;
|
| 118 |
visibility: visible !important;
|
| 119 |
opacity: 1 !important;
|
| 120 |
display: flex !important;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 121 |
}
|
| 122 |
|
| 123 |
/* Make text visible in Previous Results tab */
|
|
@@ -133,7 +194,8 @@ button.streamlit-expanderHeader {
|
|
| 133 |
.document-content img,
|
| 134 |
.markdown-text-container img,
|
| 135 |
.page-text-content img,
|
| 136 |
-
.image-container img
|
|
|
|
| 137 |
max-width: 100% !important;
|
| 138 |
height: auto !important;
|
| 139 |
object-fit: contain !important;
|
|
@@ -145,7 +207,8 @@ button.streamlit-expanderHeader {
|
|
| 145 |
.document-content img,
|
| 146 |
.markdown-text-container img,
|
| 147 |
.page-text-content img,
|
| 148 |
-
.image-container img
|
|
|
|
| 149 |
max-width: 95% !important;
|
| 150 |
}
|
| 151 |
}
|
|
|
|
| 98 |
border-left: 3px solid #4285f4;
|
| 99 |
}
|
| 100 |
|
| 101 |
+
/* Direct child styling to prevent nested containers */
|
| 102 |
+
.element-container > .metadata-container {
|
| 103 |
+
margin-top: 0 !important;
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
/* Fix spacing for headings above metadata container */
|
| 107 |
.element-container h3 + div .metadata-container,
|
| 108 |
.element-container h1 + div .metadata-container,
|
|
|
|
| 111 |
}
|
| 112 |
|
| 113 |
/* Remove excess space between metadata heading and content */
|
| 114 |
+
.stMarkdown + div div.element-container,
|
| 115 |
+
.stMarkdown + div,
|
| 116 |
+
.stHeading + div,
|
| 117 |
+
.stHeading + div div.element-container {
|
| 118 |
margin-top: 0 !important;
|
| 119 |
+
padding-top: 0 !important;
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
/* PDF container fixes */
|
| 123 |
+
.stExpander .streamlit-expanderContent {
|
| 124 |
+
max-width: 100% !important;
|
| 125 |
+
overflow: visible !important;
|
| 126 |
+
}
|
| 127 |
+
|
| 128 |
+
/* Fix placement of fullscreen buttons, especially in expanders */
|
| 129 |
+
.element-container .stImage .stExpander button[title="View fullscreen"] {
|
| 130 |
+
position: absolute !important;
|
| 131 |
+
top: 5px !important;
|
| 132 |
+
right: 5px !important;
|
| 133 |
+
}
|
| 134 |
+
|
| 135 |
+
/* Fix PDF preview container */
|
| 136 |
+
.stPdfViewerContent,
|
| 137 |
+
.stPdfViewer,
|
| 138 |
+
.stPdfViewerPagesContainer {
|
| 139 |
+
width: 100% !important;
|
| 140 |
+
max-width: 100% !important;
|
| 141 |
+
overflow: visible !important;
|
| 142 |
+
}
|
| 143 |
+
|
| 144 |
+
/* Fix for expandable content */
|
| 145 |
+
.stExpander > div[data-testid="stExpander"] {
|
| 146 |
+
max-width: 100% !important;
|
| 147 |
+
overflow: visible !important;
|
| 148 |
+
}
|
| 149 |
+
|
| 150 |
+
/* Fix for fullscreen and expander buttons in image containers */
|
| 151 |
+
.stImage button[title="View fullscreen"] {
|
| 152 |
+
position: absolute !important;
|
| 153 |
+
top: 5px !important;
|
| 154 |
+
right: 5px !important;
|
| 155 |
+
z-index: 1000 !important;
|
| 156 |
+
visibility: visible !important;
|
| 157 |
+
opacity: 1 !important;
|
| 158 |
+
display: flex !important;
|
| 159 |
+
align-items: center !important;
|
| 160 |
+
justify-content: center !important;
|
| 161 |
+
background-color: rgba(255, 255, 255, 0.8) !important;
|
| 162 |
}
|
| 163 |
|
| 164 |
/* Fix fullscreen button styling */
|
| 165 |
button[title="View fullscreen"],
|
| 166 |
button.streamlit-expanderHeader {
|
| 167 |
+
z-index: 999 !important;
|
| 168 |
background-color: rgba(255, 255, 255, 0.8) !important;
|
| 169 |
visibility: visible !important;
|
| 170 |
opacity: 1 !important;
|
| 171 |
display: flex !important;
|
| 172 |
+
align-items: center !important;
|
| 173 |
+
justify-content: center !important;
|
| 174 |
+
width: 32px !important;
|
| 175 |
+
height: 32px !important;
|
| 176 |
+
border-radius: 4px !important;
|
| 177 |
+
position: absolute !important;
|
| 178 |
+
top: 5px !important;
|
| 179 |
+
right: 5px !important;
|
| 180 |
+
border: 1px solid rgba(0, 0, 0, 0.1) !important;
|
| 181 |
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1) !important;
|
| 182 |
}
|
| 183 |
|
| 184 |
/* Make text visible in Previous Results tab */
|
|
|
|
| 194 |
.document-content img,
|
| 195 |
.markdown-text-container img,
|
| 196 |
.page-text-content img,
|
| 197 |
+
.image-container img,
|
| 198 |
+
.streamlit-expanderContent img {
|
| 199 |
max-width: 100% !important;
|
| 200 |
height: auto !important;
|
| 201 |
object-fit: contain !important;
|
|
|
|
| 207 |
.document-content img,
|
| 208 |
.markdown-text-container img,
|
| 209 |
.page-text-content img,
|
| 210 |
+
.image-container img,
|
| 211 |
+
.streamlit-expanderContent img {
|
| 212 |
max-width: 95% !important;
|
| 213 |
}
|
| 214 |
}
|