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

标签 c# html itextsharp

我已经使用 itextsharp 提取了 PDF,然后将其转换为 html 以比较两个 PDF 的样式。在此我添加了左和顶部位置以对齐文本。但是一旦我收到上标,文本的位置就会改变。但是当我通过 Firebug 检查时,左右位置的位置与我使用 adobe illustrator 检查的位置相同。谁能告诉我。为什么会发生。在我发布的示例中,7 号应该低于“was”但它远离“was”enter image description here 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 像素。但样本中的位置差异大约为 302。看起来父级有 260 偏移的 302-42?

根据我在这里看到的代码,我猜测是“training camps in Afghanistan”这一行。位于另一个元素中,而 7 不是。这不是问题所在,但额外的差距使得提供解决方案变得更加困难。

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

因此,与其余文本相比,7 的位置和字体大小不同。现在我不知道您的原始 PDF 是如何处理细节的,但您看到的效果很可能是边距的差异。

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

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

你可以做的是让每个词都绝对定位,而不仅仅是行。 这将补偿字体、类型设置、浏览器行为或其他影响方面的任何差异。

关于c# - 比较和提取文本时的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16417876/

相关文章:

c# - 如何使用 linq 从 C# 中的字典中删除一个值?

html - colspan 宽度问题

javascript 函数未被调用/无法从 html 表单工作

c# - 使用 itextsharp 从 PDF 中提取图像

c# - 插入数据库时​​如何以编程方式覆盖 Auto_Increment 值

c# - 如何使用 Dynamic Linq 命名字段?

c# - Entity Framework 4.1 Code First 和 Oracle CLOB

javascript - Angular 显示/隐藏 ng View 之外的 div

merge - 使用 ITextSharp 合并两个 PDF-a 文档

itextsharp - 使用 iTextSharp.ShowTextAligned() 添加水印