You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C# 7.1读取阿拉伯语PDF文件?

解决C#读取阿拉伯语PDF的问题

我之前处理过类似的阿拉伯语PDF提取问题,你的代码用的是旧版iTextSharp的默认文本提取策略,它对从右到左(RTL)的阿拉伯语支持不足,所以只能读出英文字符。下面给你几个可行的解决方案:

方案1:升级到iText 7(推荐)

旧版iTextSharp对双向文本(比如阿拉伯语)的处理逻辑不完善,而iText 7专门优化了RTL语言的文本提取。首先你需要通过NuGet安装iText 7的.NET包:

Install-Package iText7

然后使用以下代码提取文本,它会自动处理阿拉伯语的右到左排版:

private string GetArabicTextFromPDF(string path)
{
    StringBuilder text = new StringBuilder();
    using (PdfReader reader = new PdfReader(path))
    {
        PdfDocument pdfDoc = new PdfDocument(reader);
        for (int i = 1; i <= pdfDoc.GetNumberOfPages(); i++)
        {
            PdfPage page = pdfDoc.GetPage(i);
            // LocationTextExtractionStrategy在iText7中已支持RTL文本排序
            ITextExtractionStrategy strategy = new LocationTextExtractionStrategy();
            string pageText = PdfTextExtractor.GetTextFromPage(page, strategy);
            text.Append(pageText);
        }
    }
    return text.ToString();
}

方案2:针对旧版iTextSharp的兼容处理

如果你暂时不想升级版本,可以尝试更换文本提取策略,比如使用SimpleTextExtractionStrategy(不过它的排版可能不如iText7规整),或者自定义一个支持RTL的策略:

private string GetTextFromPDF(string path)
{
    StringBuilder text = new StringBuilder();
    using (PdfReader reader = new PdfReader(path))
    {
        for (int i = 1; i <= reader.NumberOfPages; i++)
        {
            // 替换为SimpleTextExtractionStrategy
            text.Append(PdfTextExtractor.GetTextFromPage(reader, i, new SimpleTextExtractionStrategy()));
        }
    }
    return text.ToString();
}

注意:这个方法可能会导致阿拉伯语的单词顺序颠倒,需要额外处理文本反转逻辑。

方案3:处理图像型阿拉伯语PDF

如果你的PDF里的阿拉伯语是图像格式(不是可编辑的文本),那么上面的方法都没用,必须用OCR工具识别。推荐使用Tesseract OCR,步骤如下:

  1. 通过NuGet安装Tesseract包:
Install-Package Tesseract
  1. 下载阿拉伯语语言包(ara.traineddata),放在项目的tessdata目录下
  2. 使用以下代码提取图像并识别:
using Tesseract;

private string GetArabicTextFromImagePDF(string path)
{
    StringBuilder text = new StringBuilder();
    using (PdfReader reader = new PdfReader(path))
    {
        PdfDocument pdfDoc = new PdfDocument(reader);
        for (int i = 1; i <= pdfDoc.GetNumberOfPages(); i++)
        {
            PdfPage page = pdfDoc.GetPage(i);
            PdfResources resources = page.GetResources();
            // 遍历页面中的所有图像资源
            foreach (PdfName name in resources.GetResourceNames())
            {
                if (resources.IsImage(name))
                {
                    PdfImageXObject img = resources.GetImage(name);
                    using (Bitmap bitmap = img.GetDrawingImage() as Bitmap)
                    {
                        // 初始化Tesseract引擎,指定阿拉伯语
                        using (var engine = new TesseractEngine(@"tessdata", "ara", EngineMode.Default))
                        {
                            using (var pix = PixConverter.ToPix(bitmap))
                            {
                                using (var pageResult = engine.Process(pix))
                                {
                                    text.Append(pageResult.GetText());
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    return text.ToString();
}

额外注意事项

  • 检查PDF中的阿拉伯语字体是否已嵌入:如果字体未嵌入,即使是文本型PDF也可能无法正确提取。你可以用Adobe Reader打开PDF,查看「文件→属性→字体」,确认阿拉伯语字体的状态是「已嵌入」。
  • 如果字体未嵌入,建议联系PDF生成方重新生成嵌入字体的版本,否则只能依赖OCR识别。

内容的提问来源于stack exchange,提问作者user7085040

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:26:57