這幾乎是this unanswered question的副本,但希望有人知道現在正在觀看,並可能有所幫助。使用iTextSharp保存文件PDF文件中使用的字體
我正在尋找能夠讓一些.NET代碼將字體嵌入到PDF中的字體提取到字體文件。我目前正在使用iTextSharp,但我可以使用其他.NET庫(例如PDFBox,PDF CLown等)。我能夠從BaseFont.GetDocumentFonts()迭代信息,但我不清楚如何將字體流式傳輸到字體文件。
感謝,肯尼
這幾乎是this unanswered question的副本,但希望有人知道現在正在觀看,並可能有所幫助。使用iTextSharp保存文件PDF文件中使用的字體
我正在尋找能夠讓一些.NET代碼將字體嵌入到PDF中的字體提取到字體文件。我目前正在使用iTextSharp,但我可以使用其他.NET庫(例如PDFBox,PDF CLown等)。我能夠從BaseFont.GetDocumentFonts()迭代信息,但我不清楚如何將字體流式傳輸到字體文件。
感謝,肯尼
我沒有得到答案,但我確實發現了幾個基於供應商的解決方案。來自pdf-tools.com的軟件,pdfextract.exe工作得很好。另外quickpdflibrary.com的圖書館工作得很好,是我們一起工作的供應商,迄今爲止非常開心。
你知道一種閱讀pdf中使用的字體名稱的方法嗎?我正在開發一個項目,其中pdf需要轉換爲PDF/A,並且需要字體追加。 – Highmastdon
@Highmastdon對不起,我處理PDF文件已經太多年了。我很自信,你可以很容易地獲得字體名稱。 – kenny
@Highmastdon - 它至少在iText/iTextSharp(pdfBox以及 - 但我現在沒有代碼)中確實很容易得到字體名稱,但在iTextSharp中,您將執行以下操作:
PdfReader reader = new PdfReader(strFileName);
List<object[]> strFonts = BaseFont.GetDocumentFonts(reader);
在那裏,大多數庫都支持寫入字體的簡單提取(在任何情況下的名稱)。
FontNames yes。但是當時我正在尋找嵌入式字體。謝謝,但我很久以前就離開了那場演出。 – kenny
我之前提供了一個響應,但是爲了在本站上添加可靠的示例(我三個月前需要的東西),我將遍歷最終使用的解決方案。
我下載了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中使用的字形。
這被認爲是盜版,除非嵌入字體在公共領域。 –
我們的計劃是將它們作爲相同類型的轉換文檔中的受保護字體傳遞,而不是竊取它們。 – kenny
我應該在文檔所有者批准的情況下添加。 – kenny