Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java Itext获取字体颜色_Java_Pdf_Itext - Fatal编程技术网

使用java Itext获取字体颜色

使用java Itext获取字体颜色,java,pdf,itext,Java,Pdf,Itext,我正在使用Itext,我需要提取PDF中特定标题的字体颜色,知道如何做吗?在使用iTextSharp(.NET port of Itext)6个月后,我将尝试解释如何实现您的目标。虽然这不是一个精确的答案,但它很可能会把你带到一个地方,在那里你可以做额外的家庭作业来实现它 PDF格式保留内存中的“图形状态”,这大致是一组指定当前颜色、笔厚、线条样式等的值。所有渲染操作(包括文本渲染)都使用此图形状态来确定该操作将生成的输出。例如,可以将当前颜色设置为蓝色,然后绘制几条线,所有这些线都将为蓝色。因

我正在使用Itext,我需要提取PDF中特定标题的字体颜色,知道如何做吗?

在使用iTextSharp(.NET port of Itext)6个月后,我将尝试解释如何实现您的目标。虽然这不是一个精确的答案,但它很可能会把你带到一个地方,在那里你可以做额外的家庭作业来实现它

PDF格式保留内存中的“图形状态”,这大致是一组指定当前颜色、笔厚、线条样式等的值。所有渲染操作(包括文本渲染)都使用此图形状态来确定该操作将生成的输出。例如,可以将当前颜色设置为蓝色,然后绘制几条线,所有这些线都将为蓝色。因此,您不必为每一个线条绘制操作指定线条颜色

对于着色,图形状态中有两个变量:当前笔划颜色和当前非笔划颜色。笔划颜色用于一维绘图,如线条、边框等(如果使用GDI+,则大致为System.drawing.Pen),而非笔划颜色用于二维操作,如填充(在GDI+,System.drawing.Brush中)。我相信文本着色是使用非笔划颜色完成的,因为字形是2D对象

好的,现在你知道了理论部分,下面是你需要做的。在iText源代码中找到
PdfContentStreamProcessor
类。在这里您可以找到
PopulateOperators()
,它列出了iText当前可以解析的所有运算符。与着色相关的操作符太多,这里无法总结其细节(更多细节请参见PDF规范),但简而言之,
CS
CS
操作符设置当前颜色空间(支持的操作符太多,包括RGB、灰度、CMYK、L*a*b和其他)以及设置当前冲程和非冲程颜色的
SC
SC
运算符。同样,关于设置颜色空间,然后根据当前颜色空间解释笔划和非笔划颜色的值,有很多细节,您应该看到PDF specs文档。此外,还有一些推送和弹出图形状态操作,可能会使事情进一步复杂化

简而言之,您需要添加对操作员的支持,包括
CS
CS
G
G
RG
RG
K
SC
SC
SCN
SCN
。目前iTextSharp不支持其中的大多数,因此您必须为每个类编写自己的类(实现
IContentOperator
interface)

您可以从中获得很多实现帮助。虽然这家伙没有实现它的所有细节(我可以说这将是一个很大的工作,特别是处理所有的颜色空间PDF支持),这应该给你一个很好的起点

希望这能有所帮助。

(本机也支持Java和.NET)支持文本样式信息提取(包括文本颜色和文本呈现模式)和几乎所有现成的图形操作符(请参见其代码库中的TextInfoExtractionSample)

这个开源/自由软件库具有一个多功能的内容引擎(请参阅ContentScanner类),能够执行不同的任务,如内容解析、内容提取、内容编辑、内容呈现和打印(目前部分开发的最后一个)

它的对象模型丰富而内聚(只有两个基类控制所有逻辑:位于基本低级PDF类型(如字典、数组、数字…)根的PdfObjectWrapper;位于专用高级PDF实体(如页面、注释、书签…)根的PdfObjectWrapper),镜像官方PDF规范,但没有其古怪之处


我是它的开发者,所以我可能会有偏见,但如果你想尝试一下,我建议你从sourceforge.net上的SVN存储库中查看,因为0.1.2版本(目前正在开发中)在上一版本中引入了很多增强功能。

@PradeepSimha类似这样的简明问题不需要询问者的尝试,通常情况下。换句话说,如果没有获得答案,OP几乎不可能尝试什么。答案取决于如何将标题添加到PDF中。iText并不是为此类任务而创建的。@PradeepSimha我曾尝试探索TextRenderInfo并成功提取fontfamily并计算其大小,但文档中找不到颜色:(@KlasLindbäck你有关于这方面的文献吗?我只发现一些评论说这很难,但我没有找到原因,@Guevara我在iText邮件列表中看到了解释(可在nabble.com上找到)。从pdf中提取信息的主要问题是,有太多的方法来构造相同的输出。pdf可能是多个图像,或者标题(理论上)可以由每个字母一个文本段组成。文本提取工具是相当新的,创建它只是为了提取文本(因为这是作者需要的).