Использование iTextSharp для сохранения в файл шрифтов, используемых в файле PDF - PullRequest
2 голосов
/ 22 января 2010

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

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

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

Ответы [ 3 ]

1 голос
/ 29 марта 2013

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

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

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

1 голос
/ 26 апреля 2013

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

Я скачал MuPDF и зашел в папку bin, получив файл mutool.exe. Затем я называю это отдельным процессом в C #. Он выполняет вытягивание всех шрифтов, встроенных в файл 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.

0 голосов
/ 02 марта 2010

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

...