这几乎与this unanswered question重复,但希望知情人士现在正在观看并且可以提供帮助。
我正在寻找能够让一些.NET代码将PDF中嵌入的字体提取到字体文件的能力。我目前正在使用iTextSharp,但我对其他.NET库(例如PDFBox,PDF CLown等等)开放。我能够从BaseFont.GetDocumentFonts()迭代信息,但我不清楚如何将字体流式传输到字体文件。
谢谢,肯尼
答案 0 :(得分:1)
@Highmastdon - 获取字体名称实际上非常简单,至少在iText / iTextSharp(pdfBox也是如此 - 但我现在没有代码)但在iTextSharp中你会做到以下几点: / p>
PdfReader reader = new PdfReader(strFileName);
List<object[]> strFonts = BaseFont.GetDocumentFonts(reader);
就是这样,大多数库都支持写入简单的字体提取(无论如何都是名称)。
答案 1 :(得分:1)
之前我做出了回应,但为了在本网站上添加可靠的例子(三个月前我非常需要的东西),我将重复使用我最终使用的解决方案。
我下载了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中使用的字形。
答案 2 :(得分:0)
我没有得到答案,但我确实找到了几个基于供应商的解决方案。来自pdf-tools.com的软件pdfextract.exe运行良好。此外,来自quickpdflibrary.com的图书馆也运作良好,是我们去的商家,到目前为止非常高兴。