使用PDFBox的PDF文本的字体信息
我是Apache PDFBox库的新手。使用PDFBox的PDF文本的字体信息
我要地图字体信息的PDF段落
我已经通过Questios How to extract font styles of text contents using pdfbox?
走了,但它并没有提供有关该段落写有字体信息。
例如,如果我的网页包含文本:
PARA1:宋体
PARA2:Times New Roman字体
那么我应该能够得到该PARA1是用宋体,而PARA2信息是用Times New Roman编写的。在上述问题提出
解决方案给出了PDF页面只包含
Arial和Times New Roman字体的信息。
您使用PDFTextStripper
类文件(参见其JavaDoc的评论)是这样的:
* This class will take a pdf document and strip out all of the text and ignore the
* formatting and such.
要获得特定字体的信息,因此,你必须有所改变。
字体信息可在这个类一直以来,只输出线时丢弃,看看它的source:
protected void writePage() throws IOException
{
[...]
for(int i = 0; i < charactersByArticle.size(); i++)
{
[...]
List<TextPosition> line = new ArrayList<TextPosition>();
[...]
while(textIter.hasNext())
{
[...]
if(lastPosition != null)
{
[...]
if(!overlap(positionY, positionHeight, maxYForLine, maxHeightForLine))
{
writeLine(normalize(line,isRtlDominant,hasRtl),isRtlDominant);
line.clear();
[...]
}
............
在该列表中的TextPosition
实例line
仍然有可用的所有格式信息,其中使用的字体,只有在“正常化”line
时,它被简化为纯字符。
为了保持字体的信息,因此,您有不同的选择,这取决于你想如何检索字体信息:
-
如果你想继续在检索所有页面内容(包括字体)通过
getText
一个String:您更改的方法private List<String> normalize(List<TextPosition> line, boolean isRtlDominant, boolean hasRtl)
包括一些字体标签您选择每当字体的变化(如
[Arial]
)。不幸的是这种方法是私人的因此,您必须复制整个PDFTextStripper
类并更改副本的代码。 -
如果您想要检索不同结构(例如,为
List<List<TextPosition>>
),你可以从PDFTextStripper
派生自己的脱衣舞类,添加一些变量所需的类型,并覆盖protected
方法writePage
上面提到的,复制它,唯一正确的之前或行writeLine(normalize(line,isRtlDominant,hasRtl),isRtlDominant);
与后得到了加强代码将信息添加到您的新变量。例如。
public class MyPDFTextStripper extends PDFTextStripper { public List<List<TextPosition>> myLines = new ArrayList<List<TextPosition>>(); [...] if(!overlap(positionY, positionHeight, maxYForLine, maxHeightForLine)) { writeLine(normalize(line,isRtlDominant,hasRtl),isRtlDominant); myLines.add(new ArrayList<TextPosition>(line)); line.clear(); [...] }
现在,您可以拨打
getText
您MyPDFTextStripper
的实例,检索纯文本的结果,并通过新的变量
要添加更多的字体,除了库字体,所以你需要专门添加字体文件。
我只想知道哪个文本是写在哪个字体,字体已经安装在我的电脑上。 –
参考此链接访问其他数据。 http://*.com/questions/6939583/how-to-extract-font-styles-of-text-contents-using-pdfbox – PKhode
@pappukhode我已经提到了我的问题链接 –