C# iTextSharp конвертирует WMF в PDF, встраивая шрифты

Я довольно новичок в C#, но использую его для преобразования некоторых старых файлов в формате WMF/PMF в PDF. У меня работает скрипт, но некоторые шрифты в оригинальном документе не проходят. Например, некоторые из этих старых документов являются прогонами проверки заработной платы, и проверки используют специальный шрифт MICR (где отображаются номера счетов / маршрутизации). Эта строка MICR проходит преобразование как случайный базовый шрифт.

Я просто использую iTextSharp для преобразования WMF в изображение, а затем добавляю изображение в виде страницы в PDF.

Я исследовал встраивание шрифтов, но моя проблема в том, что я мог не знать, каково было первоначальное название шрифта. Эти файлы могут быть любым количеством вещей, и они могут быть довольно старыми. Есть ли способ включить библиотеку шрифтов, которая расширила бы базовые шрифты iTextSharp, чтобы они были более вероятно распознаны во время преобразования?

Это функция, выполняющая преобразование. Все файлы WMF (по одному на каждую проверку) помещаются в каталог, и функция загружает их все в один PDF:

static bool BuildPDF(string pDecodeDir)
{
    Document pdfDoc = new Document();
    DirectoryInfo decodeDir = new DirectoryInfo(pDecodeDir);
    int vCount = 0;

    foreach (var file in decodeDir.GetFiles("*.WMF"))
    {
        try
        {
            iTextSharp.text.Image img1 = ImgWMF.GetInstance(file.FullName);
            if (vCount == 0)
            {
                // in order to inherit the document size properly, we need to load the first image before creating the PDF object
                pdfDoc = new Document(img1);
                PdfWriter.GetInstance(pdfDoc, new FileStream(targetPath, FileMode.Create));
                pdfDoc.Open();
            }
            else
            {
                pdfDoc.NewPage();
            }

            Console.WriteLine("Adding page {0}: {1}", vCount.ToString(), file.Name);

            img1.SetAbsolutePosition(0, 0);
            pdfDoc.Add(img1);

            vCount++;
        }
        catch (System.Exception docerr)
        {
            Console.WriteLine("Doc Error: {0}", docerr.Message);
            return false;
        }
    }

    Console.WriteLine("{0} created!", targetPath);
    pdfDoc.Close();

    return true;
}

0 ответов

Другие вопросы по тегам