指定Kalpurush字体提取孟加拉语PDF文本的工具推荐(多脚本支持)
解决Kalpurush字体孟加拉语PDF的文本提取问题
Python 方案
使用
pdfplumber结合自定义字体映射:
pdfplumber支持加载本地字体并映射PDF中的嵌入字体,先准备好Kalpurush字体文件(如Kalpurush.ttf),再通过字体映射修正提取结果。示例代码:import pdfplumber def extract_bengali_text(pdf_path, font_path): with pdfplumber.open(pdf_path) as pdf: full_text = "" for page in pdf.pages: # 先通过page.fonts查看PDF中Kalpurush字体的实际名称,替换下方的键名 font_mapping = {"Kalpurush": font_path} page_text = page.extract_text(font_mapping=font_mapping) full_text += page_text + "\n" return full_text # 调用示例 result = extract_bengali_text("input.pdf", "./Kalpurush.ttf") with open("output.txt", "w", encoding="utf-8") as f: f.write(result)使用
PyMuPDF(fitz):
PyMuPDF对非拉丁字体的兼容性更强,可直接加载自定义字体辅助提取:import fitz def extract_with_pymupdf(pdf_path, font_path): doc = fitz.open(pdf_path) full_text = "" # 加载本地Kalpurush字体 doc.set_font(font_path) for page in doc: full_text += page.get_text() + "\n" doc.close() return full_text # 调用示例 result = extract_with_pymupdf("input.pdf", "./Kalpurush.ttf") with open("output_pymupdf.txt", "w", encoding="utf-8") as f: f.write(result)
Bash 方案
使用
mutool(MuPDF命令行工具):
mutool支持映射PDF字体到本地文件,命令格式如下:mutool draw -F txt -o output.txt -U Kalpurush=./Kalpurush.ttf input.pdf其中
-U参数用于指定字体映射规则,替换为你实际的字体路径即可。配置系统字体配合
pdftotext:- 将Kalpurush字体安装到系统字体库并更新缓存:
sudo cp Kalpurush.ttf /usr/share/fonts/ fc-cache -fv - 再用pdftotext指定UTF-8编码提取:
pdftotext -enc UTF-8 input.pdf output.txt
- 将Kalpurush字体安装到系统字体库并更新缓存:
PHP 方案
- 使用
smalot/pdfparser库结合自定义字体加载:
先通过Composer安装依赖:
编写提取脚本:composer require smalot/pdfparser<?php require 'vendor/autoload.php'; $parser = new \Smalot\PdfParser\Parser(); $pdf = $parser->parseFile('input.pdf'); // 遍历PDF字体,匹配Kalpurush并加载本地字体 $fonts = $pdf->getFonts(); foreach ($fonts as $font) { if (str_contains($font->getName(), 'Kalpurush')) { $font->setFilePath('./Kalpurush.ttf'); } } $text = $pdf->getText(); file_put_contents('output.txt', $text); ?>
JavaScript (Node.js) 方案
- 使用
pdf-parse结合fontkit处理字体:
先安装依赖:
编写提取脚本:npm install pdf-parse fontkitconst fs = require('fs'); const pdfParse = require('pdf-parse'); const fontkit = require('fontkit'); async function extractBengaliText(pdfPath, fontPath) { const dataBuffer = fs.readFileSync(pdfPath); const kalpurushFont = fontkit.openSync(fontPath); const options = { fontCallback: (fontData) => { if (fontData.name.includes('Kalpurush')) { return kalpurushFont; } return null; } }; const parsedData = await pdfParse(dataBuffer, options); return parsedData.text; } // 调用示例 extractBengaliText('input.pdf', './Kalpurush.ttf') .then(text => fs.writeFileSync('output.txt', text, 'utf-8')) .catch(err => console.error(err));
内容的提问来源于stack exchange,提问作者Md. Atiqur Rahman Mazumder
相关产品推荐
相关产品推荐

