【问题标题】:Using iTextSharp to save to file the fonts used in a PDF file使用 iTextSharp 将 PDF 文件中使用的字体保存到文件中
【发布时间】:2011-01-08 07:23:55
【问题描述】:

这几乎是 this unanswered question 的复制品,但希望知道的人现在正在观看并且可以提供帮助。

我正在寻找让一些 .NET 代码将嵌入在 PDF 中的字体提取到字体文件的能力。我目前正在使用 iTextSharp,但我对其他 .NET 库(例如 PDFBox、PDF CLown 等)持开放态度。我能够从 BaseFont.GetDocumentFonts() 迭代信息,但我不清楚如何将字体流式传输到字体文件。

谢谢,肯尼

【问题讨论】:

  • 这被认为是盗版,除非嵌入的字体属于公共领域。
  • 我们的计划是将它们作为受保护的字体传递到相同类型的转换文档中,而不是窃取它们。
  • 我应该在文档所有者的批准下添加。

标签: c# .net pdf fonts itextsharp


【解决方案1】:

我没有得到答案,但我确实找到了几个基于供应商的解决方案。来自 pdf-tools.com 的软件 pdfextract.exe 运行良好。此外,来自 quickpdflibrary.com 的库也运行良好,是我们合作的供应商,到目前为止非常高兴。

【讨论】:

  • 您知道如何阅读 pdf 中使用的字体名称吗?我正在开发一个需要将 pdf 转换为 PDF/A 并且还需要附加字体的项目。
  • @Highmastdon 抱歉,自从我处理 PDF 以来已经有太多年了。不过,我非常有信心您可以轻松获得字体名称。
【解决方案2】:

@Highmastdon - 获取字体名称实际上非常简单,至少在 iText/iTextSharp 中(pdfBox 也是如此 - 但我现在没有代码)但在 iTextSharp 中你可以执行以下操作:

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

就是这样,大多数库都支持简单地提取字体(无论如何都是名称)。

【讨论】:

  • 字体名称是的。但那时我一直在寻找嵌入式字体。谢谢,但我很久以前就离开了。
【解决方案3】:

我之前提供过回复,但为了在本网站的主题中添加可靠的示例(三个月前我非常需要的东西),我将遍历我最终使用的解决方案。

我下载了 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 中使用的字形。

【讨论】:

    猜你喜欢
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    相关资源
    最近更新 更多