0

在使用 MuPDF 库从 PDF 中提取内容时,我得到的只是字体名称而不是它的字体。

我猜(例如字体名称中的粗体虽然不是正确的方式)还是有任何其他方法可以检测到特定字体是粗体/斜体/纯文本。

4

2 回答 2

1

我使用itextsharp提取字体系列、字体颜色等

public void Extract_inputpdf() {

  text_input_File = string.Empty;

  StringBuilder sb_inputpdf = new StringBuilder();
  PdfReader reader_inputPdf = new PdfReader(path); //read PDF
  for (int i = 0; i <= reader_inputPdf.NumberOfPages; i++) {

    TextWithFont_inputPdf inputpdf = new TextWithFont_inputPdf();
    text_input_File = iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(reader_inputPdf, i, inputpdf);

    sb_inputpdf.Append(text_input_File);
    input_pdf = sb_inputpdf.ToString();
  }
  reader_inputPdf.Close();
  clear();
}

public class TextWithFont_inputPdf: iTextSharp.text.pdf.parser.ITextExtractionStrategy {
  public void RenderText(iTextSharp.text.pdf.parser.TextRenderInfo renderInfo) {

    string curFont = renderInfo.GetFont().PostscriptFontName;
    string divide = curFont;
    string[] fontnames = null;

    //split the words from postscript if u want separate. it will be in this
  }
}
public string GetResultantText() {

  return result.ToString();
}
于 2013-06-18T08:45:34.240 回答
1

PDF 规范包含允许您指定字体样式的条目。然而不幸的是,在现实世界中,您经常会发现这些都不存在。

如果字体被引用而不是嵌入,这通常意味着您被字体的 PostScript 名称所困扰。它需要一些启发式方法,但通常名称提供了有关样式的足够线索。听起来这几乎就是你所在的地方。

如果字体是嵌入的,您可以解析它并尝试从嵌入的字体程序中查找样式信息。如果它被子集化,那么理论上这些信息可能会被删除,但总的来说我认为不会。但是解析 TrueType/OpenType 字体很无聊,你可能觉得不值得。

我在 ABCpdf .NET 软件组件上工作,因此我的回复可能包含基于 ABCpdf 的概念。这只是我所知道的。:-)”

于 2013-05-23T10:48:33.617 回答