Вот моя проблема.
Когда я открываю PDF-файл в программе просмотра PDF-файлов, например Adobe Acrobat, я вижу текст как обычный текст, я могу его прочитать.
Когда я использую iText7, например, для извлечения текста, я получаю такие тексты, как этот
Код: Выделить всё
R!"ina sa$!m!js
Проблема во встроенных шрифтах, где символ ! является символом Юникода, но когда шрифт применяется он отображается как ē.
Есть идеи, как с этим справиться. Сами шрифты я пытался извлечь из pdf вот так
Код: Выделить всё
using System;
using System.IO;
using iText.IO.Source;
using iText.Kernel.Font;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas.Parser;
using iText.Kernel.Pdf.Canvas.Parser.Listener;
class PdfFontExtractor
{
private string pdfPath;
private string outputDir;
public PdfFontExtractor(string pdfPath, string outputDir)
{
this.pdfPath = pdfPath;
this.outputDir = outputDir;
if (!Directory.Exists(outputDir))
{
Directory.CreateDirectory(outputDir);
}
}
public void ExtractFonts()
{
using (PdfReader reader = new PdfReader(pdfPath))
{
using (PdfDocument pdfDoc = new PdfDocument(reader))
{
for (int i = 1; i 1000)
{
string fontName = fontDict.GetAsName(PdfName.BaseFont).GetValue();
fontName = fontName + ".ttf";
string fontPath = Path.Combine(outputDir, fontName);
File.WriteAllBytes(fontPath, fontData);
Console.WriteLine($"Extracted font: {fontPath}");
}
else
{
Console.WriteLine(
$"Skipped invalid font: {fontDict.GetAsName(PdfName.BaseFont).GetValue()}"
);
}
}
}
}
Он создает файлы, но их нельзя открыть.
Я знаю, что их можно извлечь с помощью онлайн-инструментов, таких как i2PDF
Может быть, моему коду что-то нужно.
Мой подход:
- извлеките шрифты из pdf
- создавайте изображения из глифов в шрифтах
- OCR изображений и сравнивайте их с символами Юникода, которые представляют глифы
- измените текст в возвращаемом PDF-файле на основе собранных данных
Решение не является обязательным в С#. Python тоже может подойти.
Подробнее здесь: https://stackoverflow.com/questions/785 ... dded-fonts