我已经阅读了所有相关的 StackOverflow 并且还没有找到一个像样的解决方案。我想打开一个 PDF,获取文本(单词)及其坐标,然后进一步为其中一些添加便利贴。
似乎是不可能完成的任务,我被困住了。
这段代码怎么会正确地找到页面中的所有单词(而不是它们的坐标)?
using (PdfReader reader = new PdfReader(path))
{
StringBuilder sb = new StringBuilder();
ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
for (int page = 5; page <= 5; page++)
{
string text = PdfTextExtractor.GetTextFromPage(reader, page, strategy);
Console.WriteLine(text);
}
//txt = sb.ToString();
}
但是这个得到了坐标,但是对于不能依赖的“块”,它们是按正确顺序排列的。
PdfReader reader = new PdfReader(path);
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
LocationTextExtractionStrategyEx strategy;
for (int i = 5; i <= 5; i++) // reader.NumberOfPages
{
//strategy = parser.ProcessContent(i, new SimpleTextExtractionStrategy());
// new MyLocationTextExtractionStrategy("sample", System.Globalization.CompareOptions.None)
strategy = parser.ProcessContent(i, new LocationTextExtractionStrategyEx("MCU_MOSI", 0));
foreach (LocationTextExtractionStrategyEx.ExtendedTextChunk chunk in strategy.m_DocChunks)
{
if (chunk.m_text.Trim() == "MCU_MOSI")
Console.WriteLine("Bingo"); // <-- NEVER HIT
}
//Console.WriteLine(strategy.m_SearchResultsList.ToString()); // strategy.GetResultantText() +
}
这使用了这篇文章中的一个类(我几乎没有修改)在 Itextsharp 中使用 ITextExtractionStrategy 和 LocationTextExtractionStrategy 获取字符串的坐标
但只能找到无用的“块”。
所以问题是 iTextSharp 真的可以在页面中找到单词,以便我可以在附近添加一些便签吗?谢谢你。
看起来 chunk.m_text 一次只包含一个字母,这就是为什么这永远不会是真的:
if (chunk.m_text.Trim() == "MCU_MOSI")
您可以做的是将每个块文本添加到一个字符串中,看看它是否包含您的文本。
PdfReader reader = new PdfReader(path);
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
LocationTextExtractionStrategyEx strategy;
string str = string.Empty;
for (int i = 5; i <= 5; i++) // reader.NumberOfPages
{
strategy = parser.ProcessContent(i, new LocationTextExtractionStrategyEx("MCU_MOSI", 0));
var x = strategy.m_SearchResultsList;
foreach (LocationTextExtractionStrategyEx.ExtendedTextChunk chunk in strategy.m_DocChunks)
{
str += chunk.m_text;
if (str.Contains("MCU_MOSI"))
{
str = string.Empty;
Vector location = chunk.m_endLocation;
Console.WriteLine("Bingo");
}
}
}
请注意位置示例,我公开了 m_endLocation。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句