c# – 比较和提取文本时的位置

我使用itextsharp提取PDF然后转换为html,用于比较他们的stlye的两个PDF.在这里我添加了左侧和顶部位置以对齐文本.但是一旦我收到上标,文字的位置就会发生变化.但是当我通过firebug检查时,左右位置的位置与我使用adobe illustrator检查的位置相同.谁能打电话给我为什么会发生这种情况.在我发布的例子中,7号码应该低于“是”,但它远离“是”el远离.

Vector curBaseline = renderInfo.GetBaseline().GetStartPoint();
Vector topRight = renderInfo.GetAscentLine().GetEndPoint();
y_direction_source = Form1.Pagesize_source +( height_extract_source_page - curBaseline[Vector.I2]);
this.result.AppendFormat("<p style=\"left:{0}pt;top:{1}pt;\">" curBaseline[Vector.I1], y_direction_source);

结果:

<p style="font-family:TimesNewRoman;font-size:12.2618001271429pt;font-weight:;font-style:;left:42pt;top:120.2399pt;position:absolute;">
<p style="background: cyan">training</p>
<p style="background: cyan">camps</p>
<pp style="background: cyan">in</p>
<pp style="background: cyan">Afghanistan</p>
<pp style="background: cyan">.</p>
</p>
<pp style="font-family:TimesNewRoman;font-size:10.2386067682737pt;font-weight:;font-style:;left:441.48pt;top:114.72pt;position:absolute;">
<pp style="background: cyan">7</p>
</p>

解决方法:

我拿了你的一些代码并在Chrome中打开它. 42的绝对偏移导致点和我的数字7之间的间隙大得多.此外,我不得不重新安排一些P和PP来获得类似的结果.

浏览器182 px需要写“阿富汗的训练营”.但是样本的位置差异大约是302到很多.看起来302-42,父母有260偏移?

根据我在这里看到的代码,我的猜测就是“阿富汗训练营”.被安排在另一个元素中,而7则不是.这不是问题,但是额外的差距使得提供溶剂更难做到.

另一方面,它也解释了为什么会发生这种情况.没有超级或下标这样的东西.为了表现我们,我们缩放字体并用偏移打印.
对于您翻译的PDF,这没有什么不同.

结果,7被定位为不同,并且使用与文本的其余部分不同的字体大小来书写.现在我不知道您的原始PDF如何计算出细节,但您看到的效果很可能是差异的差异.

在PDF中,您可以为字体设置许多不同的选项,如字间距,或指定缩进级别.我会说你的法线偏移有一个左页边距,而7确实是绝对的,或者使用的字体有一些特殊的设置,使句子更长.

由于你已经有了Illustrator,你可以检查是否不是7,而是.放在同一个位置.我的猜测是不是,而且7正确.它只是看起来很奇怪,但实际上所有其他纯文本在html中的位置都不同.

你能做的就是把每一个字都放在绝对的位置,而不仅仅是线条.
这将弥补字体,类型settigns,浏览器行为或其他影响的任何差异.

上一篇:c# – 从iTextSharp中的嵌入式资源加载BaseFont


下一篇:c# – 使用iTextSharp检查PDF是否启用了“Fast Web View”属性