C# 使用iTextSharp将PDF文件中使用的字体保存到文件

C# 使用iTextSharp将PDF文件中使用的字体保存到文件,c#,.net,pdf,fonts,itextsharp,C#,.net,Pdf,Fonts,Itextsharp,这几乎是一个复制品,但希望有人知道现在正在观看,可以提供帮助 我正在寻找的能力有一些.NET代码提取的字体嵌入在PDF到一个字体文件。我目前正在使用iTextSharp,但我对其他.NET库开放(例如PDFBox、PDF小丑等)。我能够迭代BaseFont.GetDocumentFonts()中的信息,但不清楚如何将字体流式输出到字体文件 谢谢,Kenny,我没有得到答案,但我确实找到了一些基于供应商的解决方案。来自pdf-tools.com、pdfextract.exe的软件运行良好。另外,q

这几乎是一个复制品,但希望有人知道现在正在观看,可以提供帮助

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


谢谢,Kenny,我没有得到答案,但我确实找到了一些基于供应商的解决方案。来自pdf-tools.com、pdfextract.exe的软件运行良好。另外,quickpdflibrary.com的图书馆也很好用,是我们一起去的卖主,到目前为止非常高兴

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

PdfReader reader = new PdfReader(strFileName);
List<object[]> strFonts = BaseFont.GetDocumentFonts(reader);
PdfReader reader=新的PdfReader(strFileName);
列出strFonts=BaseFont.GetDocumentFonts(阅读器);

就是这样,大多数库都支持简单的字体提取(任何情况下的名称)。

我之前提供了一个回复,但为了给这个站点上的主题添加可靠的示例(三个月前我非常需要这个),我将反复介绍我最终使用的解决方案

我下载了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;
            }
        }
//
///从PDF中提取所有字体
/// 
/// 
公共静态void ExtractAll(字符串strPDFName)
{
if(strMUTOOL!=null&&strfontfail!=null)
{
过程p=新过程();
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中使用的字形。

这被视为盗版,除非嵌入的字体在公共域中。我们的计划是将它们作为受保护的字体在同一类型的转换文档中传递,而不是窃取它们。我应该补充,经文档所有者批准。您知道如何读取pdf中使用的字体名称吗?我正在做一个项目,需要将PDF转换为PDF/a,还需要添加字体。@Highmastdon很抱歉,我已经多年没有处理PDF了。我很有信心,你可以很容易地得到字体名称。但当时我正在寻找嵌入式字体。谢谢,但我很久以前就离开了。