【问题标题】:Can't read pdf file无法读取pdf文件
【发布时间】:2013-04-17 11:08:47
【问题描述】:

我正在尝试构建一个可以读取 PDF 文件的应用程序。我使用本指南:

http://www.codeproject.com/Articles/14170/Extract-Text-from-PDF-in-C-100-NET

但不明白“文件”的含义是您计算机上的整个网址。因为当我尝试它时,它说它的格式错误。

String file = "C:/project/test2.pdf";
// create an instance of the pdfparser class
PDFParser pdfParser = new PDFParser();

// extract the text
String result = pdfParser.ExtractText(file);

错误信息:

错误 1 ​​方法 'ExtractText' 没有重载需要 1 个参数

【问题讨论】:

  • 您在路径中的C 之后错过了:。不过,这与您的错误消息无关。
  • 没有帮助,但感谢您的反馈
  • 嗯,消息告诉您ExtractText 方法需要多个参数。 Intellisense 说您需要提供哪些参数?
  • public bool ExtractText(string inFileName, string outFileName)
  • 您可能希望遵循 Ria 的回答并使用 iTextSharp 中已内置的 PDF 文本解析功能(如果您使用的是当前版本),因为 codeproject 解决方案非常幼稚并忽略了大部分 PDF规范,参见this answer 从您的PDFParser 的问题中讨论“方法1”。

标签: c# itextsharp pdftotext


【解决方案1】:

如果你想将pdf文本提取成字符串,请尝试使用PdfTextExtractor.GetTextFromPage,示例代码:

public string ReadPdfFile(string fileName)
{
    var text = new StringBuilder();

    if (File.Exists(fileName))
    {
        var pdfReader = new PdfReader(fileName);

        for (int page = 1; page <= pdfReader.NumberOfPages; page++)
        {
            var strategy = new SimpleTextExtractionStrategy();
            string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);

            currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));
            text.Append(currentText);
        }
        pdfReader.Close();
    }
    return text.ToString();
}

【讨论】:

  • 我想调用这个函数吗?
  • 你想阅读你下载的类的文档,你试图使用的函数需要 2 个参数。不是 1
  • 在他的例子中,所以他接受 1 个参数,但函数可以接受两个。
  • ExtractText 方法,将 pdf 提取到 文本文件,但 htis 方法提取到字符串。
  • “文件名”是完整路径吗?
【解决方案2】:

我认为ExtractTexttwo arguments 一个是 PDF 源文件第二个是文本目标文件

所以试试下面的方法,你的错误就会得到解决:

pdfParser.ExtractText(file,Path.GetFileNameWithoutExtension(file)+".txt");

【讨论】:

  • 错误消息:错误 1 ​​无法将类型 'bool' 隐式转换为 'string'
  • 并添加示例类。
  • 你可以试试这样Console.WriteLine(pdfParser.ExtractText(file,Path.GetFileNameWithoutExtension(file)+".txt").ToString()); 并告诉我们你收到了什么消息...
  • @MaxTorstensson DarkBee 已经发布了方法签名public bool ExtractText(string inFileName, string outFileName) --- 那你为什么要尝试分配String result = pdfParser.ExtractText(...)??
【解决方案3】:

首先,您应该正确指定路径。 您可以从您发布的 codeproject 链接下载测试项目。

你应该这样使用它:

string sourceFile =  "C:\\Folder\\File.pdf";
string outputFile =  "C:\\Folder\\File2.txt"

PDFParser pdfParser = new PDFParser();
pdfParser.ExtractText(sourceFile, outputFile);

更新: 你用错了(你肯定会得到你的错误:不能隐式地将布尔转换为字符串):

string result = pdfParser.ExtractText(sourceFile, outputFile);

正确的方法是:

pdfParser.ExtractText(sourceFile, outputFile);

【讨论】:

  • 错误:错误消息:错误 1 ​​无法将类型“布尔”隐式转换为“字符串”
  • 1. Max,据我所见,在这个版本的库中没有只使用一个参数的方法 ExtractText,所以你应该使用输出文件。
  • 感谢您在 pastebin 上发帖。你不能像 string result = pdfParser(file, output); 那样使用它从pdfParser的左边全部删除。
  • 我试过了,但我发现了这个错误消息:错误:错误消息:错误 1 ​​无法将类型“bool”隐式转换为“字符串”
  • 您收到此错误是因为您调用 pdfParser (file, output) 并尝试将其附加到字符串结果。删除“字符串结果=”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多