ITextPDF 不一致的矩形

ITextPDF Inconsistent Rectangles

我有代码可以从用户在 PDF 上创建的矩形中提取文本。

我正在为此使用 ITextSharp。

用户输入他们想要矩形的坐标,然后他们可以 'preview' 矩形,在他们的 pdf 上绘制一个红色矩形,或者 'generate' 一个新的 pdf,这是为了捕获该矩形内的文本,并仅使用该文本向 pdf 添加额外的页面。

我的问题是,文本是从一个完全独立于预览矩形的区域捕获的。两个矩形的创建方式相同:

  //Preview rectangle code
  var xfer = ConvertToPoint(Convert.ToDouble(ULTB.Text));
  var yfer = ConvertToPoint(Convert.ToDouble(LLTB.Text));
  var uxfer = ConvertToPoint(Convert.ToDouble(URTB.Text));
  var uyfer = ConvertToPoint(Convert.ToDouble(LRTB.Text));

  iTextSharp.text.Rectangle rect = new iTextSharp.text.Rectangle((float)xfer, (float)yfer, (float)uxfer, (float)uyfer);

然后将此矩形绘制到用户文档上。

(ConvertToPoint只是将用户输入转换成点而不是毫米)

使用完全相同的用户输入,由以下代码创建的矩形位于不同的位置:

var xfer = ConvertToPoint(Convert.ToDouble(ULTB.Text));
var yfer = ConvertToPoint(Convert.ToDouble(LLTB.Text));
var uxfer = ConvertToPoint(Convert.ToDouble(URTB.Text));
var uyfer = ConvertToPoint(Convert.ToDouble(LRTB.Text));
RenderFilter[] filters = new RenderFilter[1];
LocationTextExtractionStrategy regionFilter = new LocationTextExtractionStrategy();
filters[0] = new RegionTextRenderFilter(new iTextSharp.text.Rectangle((float)xfer, (float)yfer, (float)uxfer, (float)uyfer));

FilteredTextRenderListener strategy = new FilteredTextRenderListener(regionFilter, filters);
String result = PdfTextExtractor.GetTextFromPage(reader, x, strategy);

上面的代码应该从用户坐标的位置获取文本,但不是,有什么想法吗?

我已将 PDF 附加到 Google 驱动器,其中大量文本已编辑

红色矩形是我通过预览代码得到的,文档底部的文本是文本捕获所拾取的内容

File

问题是这里的页面旋转属性不是0

iTextSharp 的“功能”是默认转换您应用于内容的更改中的坐标以与页面旋转对齐。它同样在文本提取期间转换坐标。

幸运的是,iTextSharp 允许关闭该转换,如果您有 PdfStamper pdfStamper,只需设置

pdfStamper.RotateContents = false;

刚初始化压模后。

当然,这意味着您必须在代码中考虑页面旋转。但这也意味着您可以始终如一地这样做。


相关问题: