【问题标题】:How to extract fonts from PDDocument in PDFBox 2.0.2如何从 PDFBox 2.0.2 中的 PDDocument 中提取字体
【发布时间】:2016-11-17 01:39:57
【问题描述】:

我在以前的版本中看到了如何做到这一点,如下所示:

How to extract font styles of text contents using pdfbox?

但我认为 getFonts() 方法现在已被删除。我想在新版本的 PDFBox 中检索文本到字体的映射 (Map<String, PDFont>),但我不知道如何。

谢谢

卡比尔

【问题讨论】:

    标签: java pdf fonts pdfbox


    【解决方案1】:

    这样做:

    PDDocument doc = PDDocument.load("C:/mydoc3.pdf");
    for (int i = 0; i < doc.getNumberOfPages(); ++i)
    {
        PDPage page = doc.getPage(i);
        PDResources res = page.getResources();
        for (COSName fontName : res.getFontNames())
        {
            PDFont font = res.getFont(fontName);
            // do stuff with the font
        }
    }
    

    【讨论】:

    • 我这样做了,但它没有附加相应的字符串
    • 所以我无法知道字体与什么文本相关
    • 您要求对 stackoverflow.com/questions/6939583/… 中的问题提供 2.0.2 答案。没有直接的可能性知道它与什么文本相关;但是您可以使用 PrintTextLocations.java 示例,TextPosition 对象有一个 getFont() 方法,即您可以获取每个提取字符的字体。
    • 如果您指的是内容流中的字体名称(例如“F1”),则执行 fontName.getName()。要获取真正的字体名称,请使用 font.getName()。
    • 请你把我链接到这个例子吗?我所需要的只是提取文本和与文本相关的字体,而不是我提供的示例。顺便说一句,你知道为什么上面的函数被删除了吗?
    【解决方案2】:
     PDFMetaData pdfMeta = new PDFMetaData();
     PDDocument document = PDDocument.load(new File("/Users/ban.pdf"));
     PDPage page = document.getPage(0);
     PDResources res = page.getResources();
     for (COSName fontName : res.getFontNames())
    {
      PDFont font = res.getFont(fontName);
      pdfMeta.setFontName(font);                    
    }
    

    【讨论】:

      【解决方案3】:

      对于 PDFBox 2.x,您链接到的答案的修订代码是

      PDDocument  doc = PDDocument.load("C:/mydoc3.pdf");
      for(PDPage page : doc.getPages()){
          // get the names of the fonts in the resources dictionary
          Iterable<COSName> iterable = page.getResources().getFontNames();
          // to get the font for each item call
          // page.getResources().getFont(COSName name);
      }
      

      【讨论】:

      • 我知道该怎么做,但 Iterable 不是所需的输出,所以这对我没有帮助
      • @KVohra95 他的回答和我的差不多,没必要投反对票。
      • @KVohra95 好的,抱歉。
      【解决方案4】:

      这是使用 pdfbox 2.0.6 提取 Pdf 文件的字体。

      import java.io.File;
      import java.util.List;
      import java.util.Map;
      import org.apache.pdfbox.cos.COSName;
      import org.apache.pdfbox.pdmodel.PDDocument;
      import org.apache.pdfbox.pdmodel.PDPage;
      import org.apache.pdfbox.pdmodel.PDResources;
      import org.apache.pdfbox.pdmodel.font.PDFont;
      public class PDFFontExtractor {
          public static void main(String args[])
          {
              try
              {  
                  PDDocument pddDocument = PDDocument.load(new File("C:\\Users\\Desktop\\sample1.pdf"));
                  for (int i = 0; i < pddDocument.getNumberOfPages(); ++i)
                  {
                      PDPage page = pddDocument.getPage(i);
                      PDResources res = page.getResources();
                      for (COSName fontName : res.getFontNames())
                      {
                          PDFont font = res.getFont(fontName);
                          System.out.println("FONT :: "+ font);
                      }
                  } 
              }
              catch(Exception ex)
              {
                  ex.printStackTrace();
              }
          }
      }
      

      【讨论】:

      • 您的回答对 Tilman 和 Maruan 的回答有什么影响?
      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 2016-12-06
      • 2018-03-23
      • 2013-11-15
      • 2016-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多