C# 从pdf中提取文本信息
如何提取文本信息,如文本位置坐标、宽度、高度和e.t.c?? 我在'Pdf小丑'库中尝试了这一点,它对于普通文本非常有效,但是对于旋转文本(90/-90度),它将宽度/高度输出为0(零) (90/-90度)文本的缩放因子(scaleX,scaleY)分别显示为(0,0),其中,对于反转文本(180度旋转)为(-1,-1) 我需要旋转文本的信息来突出显示它们(由于宽度值为零,我无法突出显示它们)。请帮帮我。我正在.NET环境下工作 我正在使用的文件: 代码:使用来自pdfclown的样本 输出 (用于上述文件中文本的三种不同对齐方式) 文本[x:283,y:104,w:126,h:-23][font size:-24,font sytle:ArialMT]:倒排文本 文本[x:265,y:244,w:0,h:121][font size:0,font-sytle:ArialMT]:垂直文本 Text[x:347,y:131,w:0,h:167][font-size:0,font-sytle:ArialMT]:vertical_-minus90由于我更熟悉Java而不是.Net,我分析了这个问题,并用PDF小丑/Java创建了第一个解决方案;稍后我将尝试将其移植到.Net。不过,自己做应该不会太难 问题 您提供的示例文件在PDF小丑C# 从pdf中提取文本信息,c#,pdf,pdfclown,C#,Pdf,Pdfclown,如何提取文本信息,如文本位置坐标、宽度、高度和e.t.c?? 我在'Pdf小丑'库中尝试了这一点,它对于普通文本非常有效,但是对于旋转文本(90/-90度),它将宽度/高度输出为0(零) (90/-90度)文本的缩放因子(scaleX,scaleY)分别显示为(0,0),其中,对于反转文本(180度旋转)为(-1,-1) 我需要旋转文本的信息来突出显示它们(由于宽度值为零,我无法突出显示它们)。请帮帮我。我正在.NET环境下工作 我正在使用的文件: 代码:使用来自pdfclown的样本 输出 (
TextInfoExtractionSample
中运行时,使问题变得非常清楚
edit9.pdf的屏幕截图:
应用TextInfoExtractionSample
后的edit9.pdf
屏幕截图:
正楷
一切看起来都很好
颠倒文本
单个字符框(绿色)看起来正常,但整个字符串“反向_文本”(黑色虚线)的框不包括最外层的字符
垂直文本
单个字符框减少为0x0矩形(在屏幕截图中不可见,但在内容流分析中明显)。整个字符串的框缩小为缺少位长度的字符串基线上的一条线(黑色虚线)
文本之间有一定角度
字符框垂直,与页面边框平行,其基线段位于框内。但是,由于文本成一定角度,字符的上下部分在各自的字符框外,而相邻字符部分在框内
整个字符串的框也与页面平行
简而言之
文本字符和字符串框仅适用于直立文本
来源
这与源代码中的内容相匹配:
- 按设计用于字符框的Java
和.NetRectangle2D
类用于平行于坐标系轴的矩形,并以这种方式在PDF小丑中使用。因此,它们不能以任意角度正确表示字符的宽度和高度RectangleF
- PDF小丑类不包含表示角色旋转的
属性角度
- 字符框尺寸的计算仅考虑聚合变换矩阵主对角线上的值,即
和ScaleX
,并忽略ScaleY
和ShearX
。但是,对于不垂直或不倒置的文本,ShearY
和ShearX
非常重要,而对于垂直文本ShearY
和ScaleX
则为0ScaleY
- 从基线(本机PDF文本定位方式)到字符顶部(PDF小丑文本定位)的转换仅通过改变y坐标完成,因此,仅适用于直立和倒置文本
一个更快的工作,但是,可以添加一个<代码>角度<代码>成员到<代码> TrcChar 类和
TextChar
添加一个角度成员,在ShowText
操作类中计算框尺寸和角度的正确值,并在ContentScanner.TextStringWrapper
中正确设置这些值
然后我们向TextStringWrapper
(通常是ITextString
)添加一个角度获取程序,它返回字符串的第一个文本字符的角度。我们改进了TextStringWrapper
方法getBox
,在确定字符串框时考虑了文本字符的角度
最后,我们将扩展TextInfoExtractionSample
,以便在绘制框时考虑角度值
我在我的草图中把那个角度命名为α,我把它命名为α。事后看来,θ或角度更合适
文本字符
新成员变量alpha
private final double alpha;
新的和已更改的构造函数
//
公共文本字符(
字符值,
矩形盒,
文本样式样式,
布尔虚
)
{
这(值、框、0、样式、虚拟);
}
公共文本字符(
字符值,
矩形盒,
双阿尔法,
文本样式样式,
布尔虚
)
{
这个值=值;
this.box=box;
这个α=α;
这个。风格=风格;
this.virtual=virtual;
}
//
角的吸气剂
public-double-getAlpha(){
返回α;
}
()
显示