From 7b6a5ffafff0b6c7e40f446896a409622b52adce Mon Sep 17 00:00:00 2001 From: Yuhao Tsui Date: Tue, 3 Dec 2024 11:08:06 +0800 Subject: [PATCH] Fix: page_chars attribute does not exist in some formats of PDF (#3796) ### What problem does this PR solve? In #3335 someone suggested to upgrade pdfplumber==0.11.1, but that didn't solve it. It's actually the special formatting in some of the pdfs that triggers the problem. ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue) --- deepdoc/parser/pdf_parser.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/deepdoc/parser/pdf_parser.py b/deepdoc/parser/pdf_parser.py index ae663ac3c..5ffecde4b 100644 --- a/deepdoc/parser/pdf_parser.py +++ b/deepdoc/parser/pdf_parser.py @@ -956,8 +956,12 @@ class RAGFlowPdfParser: enumerate(self.pdf.pages[page_from:page_to])] self.page_images_x2 = [p.to_image(resolution=72 * zoomin * 2).annotated for i, p in enumerate(self.pdf.pages[page_from:page_to])] - self.page_chars = [[{**c, 'top': c['top'], 'bottom': c['bottom']} for c in page.dedupe_chars().chars if self._has_color(c)] for page in - self.pdf.pages[page_from:page_to]] + try: + self.page_chars = [[{**c, 'top': c['top'], 'bottom': c['bottom']} for c in page.dedupe_chars().chars if self._has_color(c)] for page in self.pdf.pages[page_from:page_to]] + except Exception as e: + logging.warning(f"Failed to extract characters for pages {page_from}-{page_to}: {str(e)}") + self.page_chars = [[] for _ in range(page_to - page_from)] # If failed to extract, using empty list instead. + self.total_page = len(self.pdf.pages) except Exception: logging.exception("RAGFlowPdfParser __images__")