iTextSharp.LGPLv2.Core 将 PDF 中的文本转换为字符串
iTextSharp.LGPLv2.Core get text from PDF into a string
最近我们的项目升级到新的 iTextSharp。LGPLv2.Core v1.6.5。我有一个方法可以从 PDF 文件中提取文本。
当时我用这个:
if (File.Exists(pdf1Path))
{
var pdfReader = new PdfReader(pdf1Path);
string pdfText;
string currentText;
//Text extracting to List
for (int i = 1; i <= pdfReader.NumberOfPages; i++)
{
currentText = PdfTextExtractor.GetTextFromPage(pdfReader, i);
currentText =
Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8,
Encoding.Default.GetBytes(currentText)));
text.Append(currentText);
}
pdfText = text.ToString();
}
现在突然认不出"PdfTextExtractor"。关于如何让它工作还有其他选择吗?请注意,我不允许安装任何其他库或包。
我尝试使用
using iTextSharp.text.pdf.parser;
但它不再被识别。当我尝试下载它时,它与 iTextSharp 重叠。LGPLv2.Core 这给了我一个错误。
感谢您的帮助
IIRC(如果我正确阅读了 git 历史记录),命名空间 iTextSharp.text.pdf.parser
是在 iTextSharp 5.0.2 中引入的,即它从来不是 LGPL 许可的 iTextSharp 版本的一部分。
(iText/Java 版本的情况略有不同,这里的第一个概念验证已经存在于最新的 LGPL 版本中。)
因此,
recently our project upgraded to a new iTextSharp.LGPLv2.Core v1.6.5
如果你真的升级了,那么你以前的版本似乎伴随着向后移植(来自版本5.x)或交叉移植(来自[=34] =] 在版本 5) 之前的解析器名称空间中。不过,更有可能的是,您实际上 downgraded 从 iTextSharp 5.x 到基于 iTextSharp 4.2 或更早版本的分支,并且在 downgrading 你通常会失去功能。
我假设您使用 iTextSharp。LGPLv2.Core 使用 LGPL 而不是在 iTextSharp 5 中选择 AGPL 和商业许可,或者您为 Core 支持
如果真的是关于许可证的问题,你只能尝试在最后一个 LGPL 版本 (2.1.7) 或标签 (4.2.0) 中移植 iText/Java 解析器包,或者你可以重新完全独立实现文本提取。
如果它是关于核心支持并且您准备购买许可证或受 AGPL 约束,您还可以尝试向后移植最新的 iText 5.x 解析器名称空间。这应该比从 Java 交叉移植更容易,并且此文本提取代码比版本 5 之前的 iText/Java 代码高级得多。
经过一段时间的挖掘,我发现这个问题是有解决办法的。由于不允许我使用 PdfTextExtractor,因此我使用了与上述方法几乎相同的代码
var reader = new PdfReader();
var pdfFile = createSamplePdfFile();
var reader = new PdfReader(pdfFile);
var streamBytes = reader.GetPageContent(1);
var tokenizer = new PrTokeniser(new RandomAccessFileOrArray(streamBytes));
var stringsList = new List<string>();
while (tokenizer.NextToken())
{
if (tokenizer.TokenType == PrTokeniser.TK_STRING)
{
stringsList.Add(tokenizer.StringValue);
}
}
reader.Close();
希望这能帮助遇到与我类似问题的人:)
谢谢大家:)
最近我们的项目升级到新的 iTextSharp。LGPLv2.Core v1.6.5。我有一个方法可以从 PDF 文件中提取文本。
当时我用这个:
if (File.Exists(pdf1Path))
{
var pdfReader = new PdfReader(pdf1Path);
string pdfText;
string currentText;
//Text extracting to List
for (int i = 1; i <= pdfReader.NumberOfPages; i++)
{
currentText = PdfTextExtractor.GetTextFromPage(pdfReader, i);
currentText =
Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8,
Encoding.Default.GetBytes(currentText)));
text.Append(currentText);
}
pdfText = text.ToString();
}
现在突然认不出"PdfTextExtractor"。关于如何让它工作还有其他选择吗?请注意,我不允许安装任何其他库或包。
我尝试使用
using iTextSharp.text.pdf.parser;
但它不再被识别。当我尝试下载它时,它与 iTextSharp 重叠。LGPLv2.Core 这给了我一个错误。
感谢您的帮助
IIRC(如果我正确阅读了 git 历史记录),命名空间 iTextSharp.text.pdf.parser
是在 iTextSharp 5.0.2 中引入的,即它从来不是 LGPL 许可的 iTextSharp 版本的一部分。
(iText/Java 版本的情况略有不同,这里的第一个概念验证已经存在于最新的 LGPL 版本中。)
因此,
recently our project upgraded to a new iTextSharp.LGPLv2.Core v1.6.5
如果你真的升级了,那么你以前的版本似乎伴随着向后移植(来自版本5.x)或交叉移植(来自[=34] =] 在版本 5) 之前的解析器名称空间中。不过,更有可能的是,您实际上 downgraded 从 iTextSharp 5.x 到基于 iTextSharp 4.2 或更早版本的分支,并且在 downgrading 你通常会失去功能。
我假设您使用 iTextSharp。LGPLv2.Core 使用 LGPL 而不是在 iTextSharp 5 中选择 AGPL 和商业许可,或者您为 Core 支持
如果真的是关于许可证的问题,你只能尝试在最后一个 LGPL 版本 (2.1.7) 或标签 (4.2.0) 中移植 iText/Java 解析器包,或者你可以重新完全独立实现文本提取。
如果它是关于核心支持并且您准备购买许可证或受 AGPL 约束,您还可以尝试向后移植最新的 iText 5.x 解析器名称空间。这应该比从 Java 交叉移植更容易,并且此文本提取代码比版本 5 之前的 iText/Java 代码高级得多。
经过一段时间的挖掘,我发现这个问题是有解决办法的。由于不允许我使用 PdfTextExtractor,因此我使用了与上述方法几乎相同的代码
var reader = new PdfReader();
var pdfFile = createSamplePdfFile();
var reader = new PdfReader(pdfFile);
var streamBytes = reader.GetPageContent(1);
var tokenizer = new PrTokeniser(new RandomAccessFileOrArray(streamBytes));
var stringsList = new List<string>();
while (tokenizer.NextToken())
{
if (tokenizer.TokenType == PrTokeniser.TK_STRING)
{
stringsList.Add(tokenizer.StringValue);
}
}
reader.Close();
希望这能帮助遇到与我类似问题的人:)
谢谢大家:)