【问题标题】:Get text from PDF stored in LocalFolder using iTextSharp使用 iTextSharp 从存储在 LocalFolder 中的 PDF 中获取文本
【发布时间】:2015-10-15 02:35:30
【问题描述】:

我正在尝试从存储在 Windows Phone 8.1 应用程序的 localStorage 中的 PDF 中获取文本,但我总是收到 FileNotFoundException。

为了解释整个故事,我从在线资源获得了一个 PDF,我将它存储到一个与用户名相同的文件夹中(用户名是一个电子邮件地址,但我也尝试过不带 @ 符号)然后我想从 PDF 文件中获取一些文本。我使用 iTextSharp 并按照示例进行操作,但无法成功。当我将 PDF 发送到 Launcher 时,使用 Acrobat Reader 等其他应用程序成功打开。

我的功能如下。我首先发送一个 PDF 对象,它有一个名为 Path 的属性,它存储在特定于用户用户名的文件夹中。 然后我将 pdf 作为 StorageFile 项获取。当我创建调用构造函数的 PDFReader 时,我得到一个 FileNotFoundException。有谁知道或可以猜到可能是什么问题? iTextSharp 是否与 Windows Phone 8.1 兼容?

internal async Task<bool> OpenPdfFromDownloadedCollections(PDF pdfToOpen, string username)
    {
        try
        {
            StorageFolder folder = ApplicationData.Current.LocalFolder;
            var pdfFolder = await folder.GetFolderAsync(username + "PDFs");

            var pdf = await pdfFolder.GetFileAsync(Object.Path);

            StringBuilder text = new StringBuilder();
            using (PdfReader reader = new PdfReader(pdf.Path))
            {
                for (int i = 1; i <= reader.NumberOfPages; i++)
                {
                    string thePage = PdfTextExtractor.GetTextFromPage(reader, i, its);
                    string[] theLines = thePage.Split('\n');
                    foreach (var theLine in theLines)
                    {
                        text.AppendLine(theLine);
                    }
                }
            }
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }

【问题讨论】:

  • 您使用的是哪个版本的 itextsharp?
  • 我正在使用 nuget 库中的 5.5.6.0
  • 正如我从其他帖子和视频中了解到的那样,由于与 System.Drawing.dll 的一些冲突,它可能不适用于 Windows Phone 版本。
  • 和我听到的一样。我认为您需要检查是否有其他组件可以为您解决问题。有一篇微软的博文blogs.msdn.com/b/eternalcoding/archive/2013/04/15/…也许就是你要找的。​​span>
  • 其他的都是有偿且昂贵的,但在我尝试试用版时正在工作。我需要的是从 pdf 中获取条形码并将其显示在屏幕上。除了这个,你知道任何免费的库可以将 pdf 转换为图像或文本吗?

标签: c# windows-phone-8.1 itextsharp pdftotext


【解决方案1】:
var pdf = await pdfFolder.GetFileAsync(Object.Path);

在这行代码中,您应该只传递文件名,但您将提供整个路径作为参数。由于 pdfFolder 当前代表路径。

【讨论】:

  • 这对我来说令人困惑的命名约定,但它只包含文件名。例如“example.pdf”。当我将路径传递给 PdfReader 时,该函数抛出异常。
  • 你试过用 pdfToOpen.path 代替 Object.Path
  • 否,但它不是实际文件。它只是特定对象的名称。但我会努力的。
猜你喜欢
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多