我使用以下代码使用 iTextSharp 查找 PDF 中的最后一行 y 坐标
Dim pdfReader As New PdfReader("D:/sample.pdf")
Dim y_cordinate as integer
Dim parser As New PdfReaderContentParser(pdfReader)
Dim finder As TextMarginFinder
finder = parser.ProcessContent(pagen0, New TextMarginFinder())
y_cordinate = finder.GetLly()
如果是直接的PDF,我能够得到正确的y坐标但在其他情况下,我将 MS Word 文档转换为 PDF 并尝试在该 PDF 上执行上述代码然后它正在获取PDF格式的Word文档位置的边距(y纵坐标)请帮助找到文本以PDF结尾的正确Y坐标。(前面的话)。请找到从Word转换的PDF链接。https://www.dropbox.com/s/ha1vrk58umuv3h7/PACACH0123.pdf?dl=0
示例文档的每一页都包含文本绘图说明,这些说明使用基线在 y 坐标 39 处绘制空格字符:
BT
/F2 14.04 Tf
1 0 0 1 72.024 39.024 Tm
[( )] TJ
ET
BT
1 0 0 1 306.05 39.024 Tm
[( )] TJ
ET
BT
1 0 0 1 397.63 39.024 Tm
[( )] TJ
ET
没有低于此值
因此,您的代码将正确返回 39 + 下降作为最后一行的底部。
为了解决这个问题,你可以使用Java/iText中解释和概述的方法,在这个答案"TextMarginFinder验证可打印性",即在计算文本边界框时忽略所有空格字符:
using (PdfReader pdfReader = new PdfReader(source))
{
System.Console.Write("n*n*n* Filtered last lines per page of {0}n*n*n", source);
for (int page = 1; page <= pdfReader.NumberOfPages; page++)
{
PdfReaderContentParser parser = new PdfReaderContentParser(pdfReader);
TextMarginFinder finder = new TextMarginFinder();
FilteredRenderListener filtered = new FilteredRenderListener(finder, new SpaceFilter());
parser.ProcessContent(page, new TextRenderInfoSplitter(filtered));
System.Console.Write("Page {0}, Bottom y {1}n", page, finder.GetLly());
}
}
使用这两个帮助程序类
class TextRenderInfoSplitter : IRenderListener
{
public TextRenderInfoSplitter(IRenderListener strategy) {
this.strategy = strategy;
}
public void RenderText(TextRenderInfo renderInfo) {
foreach (TextRenderInfo info in renderInfo.GetCharacterRenderInfos()) {
strategy.RenderText(info);
}
}
public void BeginTextBlock() {
strategy.BeginTextBlock();
}
public void EndTextBlock() {
strategy.EndTextBlock();
}
public void RenderImage(ImageRenderInfo renderInfo) {
strategy.RenderImage(renderInfo);
}
IRenderListener strategy;
}
class SpaceFilter : RenderFilter
{
public override bool AllowText(TextRenderInfo renderInfo)
{
return renderInfo != null && renderInfo.GetText().Trim().Length > 0;
}
}
示例文档的输出为:
*
*
* Filtered last lines per page of PACACH0123.pdf
*
*
Page 1, Bottom y 81,92254
Page 2, Bottom y 413,1685
Page 3, Bottom y 688,4785
这看起来更像是你所追求的数字。