Использование iTextSharp для сохранения в файл шрифтов, используемых в файле PDF

2

Это почти дубликат этого неотвеченного вопроса, но, надеюсь, кто-то в курсе сейчас и может быть полезным.

Я ищу способ, чтобы какой-нибудь .NET-код извлекал шрифт, встроенный в PDF, в файл шрифта. В настоящее время я использую iTextSharp, но я открыт для других библиотек .NET(например, PDFBox, PDF CLown и т.д.). Я могу перебирать информацию из BaseFont.GetDocumentFonts(), но я не понимаю, как передать шрифт в файл шрифта.

Спасибо, Кенни

  • 0
    Это считается пиратством, если встроенные шрифты не являются общественным достоянием.
  • 0
    Наш план - передать их как защищенные шрифты в преобразованном документе того же типа, а не украсть их.
Показать ещё 1 комментарий
Теги:
pdf
fonts
itextsharp

3 ответа

0
Лучший ответ

Я не получил ответа, но нашел несколько решений на основе поставщиков. Программное обеспечение pdf-tools.com, pdfextract.exe работает очень хорошо. Кроме того, библиотека из quickpdflibrary.com работает очень хорошо, и мы являемся вендером, с которым мы пошли, и до сих пор очень счастливы.

  • 0
    Вы знаете способ прочитать имена шрифтов, используемые в PDF? Я работаю над проектом, в котором PDF-файлы необходимо преобразовать в PDF / A, и для этого также необходимо добавить шрифт.
  • 0
    @Highmastdon Извините, прошло слишком много лет с тех пор, как я работал с PDF-файлами. Я уверен, что вы можете легко получить названия шрифтов.
1

Я сделал ответ раньше, но в интересах добавления твердых примеров к темам на этом сайте (что-то, что я ужасно нуждался три месяца назад), я буду проходить через решение, в котором я закончил использование.

Я загрузил MuPDF и зашел в папку bin, извлекая файл mutool.exe. Затем я называю это отдельным процессом в С#. Он проходит через вытягивание всех шрифтов, встроенных в файл PDF, и выгружает их в папку, содержащую файл mutool.exe. Тогда это было просто перемещение шрифтов оттуда в папку, в которую я их хотел.

        /// <summary>
        /// Extract all fonts from PDF
        /// </summary>
        /// <param name="strPDFName"></param>
        public static void ExtractAll(string strPDFName)
        {
            if (strMUTOOL != null && strFontFinal != null)
            {
                Process p = new Process();
                p.StartInfo.FileName = strMUTOOL;
                p.StartInfo.Arguments = "extract \"" + strPDFName + "\"";
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardError = true;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.CreateNoWindow = true;
                p.StartInfo.WorkingDirectory = strMUTOOL.Replace("mutool.exe", "").Trim();

                p.Start();
                p.WaitForExit();

                var standardError = p.StandardError.ReadToEnd();
                var standardOutput = p.StandardOutput.ReadToEnd();
                var exitCode = p.ExitCode;
            }
        }

Как немного голова, большинство этих шрифтов являются CFF файлами, и вам нужно будет их конвертировать, если вы планируете их использовать. Кроме того, как уже было сказано, использование этих шрифтов может представлять собой программное пиратство, если эти шрифты являются платными шрифтами. Наконец, эти шрифты обычно являются только подмножествами и не содержат полного набора глифов - только глифов, используемых в PDF.

1

@Highmastdon - на самом деле очень просто получить имена шрифтов, по крайней мере, в iText/iTextSharp (pdfBox, а также - но у меня сейчас нет кода), но в iTextSharp вы бы сделали следующее:

PdfReader reader = new PdfReader(strFileName);
List<object[]> strFonts = BaseFont.GetDocumentFonts(reader);

И там, в большинстве библиотек есть поддержка, написанная для простого извлечения шрифтов (имена в любом случае).

  • 0
    FontNames да. Но тогда я искал встроенные шрифты. Спасибо, но я покинул этот концерт давно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню