我在Blazor WebAssembly中使用iText7阅读PDF时有点困难.

InputFile组件创建IBrowserFile:

<div>
    <InputFile OnChange="@OnFileSelection"></InputFile>
    <div class="row">
        <textarea>@outputText</textarea>
    </div>
</div>

然后,我可以用Stream读取文件-iText7应该会读取该文件-但它不会给出页面计数或我try 过的任何其他内容.它似乎也没有越过读者,甚至似乎没有达到页面计数.

    int pageCount = 0;
    IBrowserFile pdfFile = e.File;
    Stream stream = pdfFile.OpenReadStream();
    PdfDocument pdfDoc = new PdfDocument(new PdfReader(stream));
    pageCount = pdfDoc.GetNumberOfPages();
    stream.Close();
    outputText = $"{pageCount}";
    StateHasChanged();

我也try 过先将流读入MemoryStream,同样的结果.我遵循以下信息:

https://docs.microsoft.com/en-us/aspnet/core/blazor/file-uploads?view=aspnetcore-6.0&pivots=webassembly

同样的结果.

有没有一种方法可以处理PDF文件,使iText7的功能保持不变,从而可以获得页面计数、提取的文本等?

我正在测试的文件低于500kb的限制,即66kb.我不需要显示PDF,我只需要知道理想情况下,一页一页地显示PDF的内容,但就目前而言,仅仅能够阅读一页或获取页数将是向前迈出的一大步.

推荐答案

如果查看开发人员控制台,您会发现它发出错误:

不支持同步读取.

你会注意到你没有在任何地方使用await,不幸的是,iText7也没有.Blazor强烈强制使用异步语义,如果违反了异步语义,您将看到如下错误.

幸运的是,您仍然可以做到这一点.你说:

我也try 过先将流读入MemoryStream,同样的结果.

你应该展示你的try ,但我的直觉是它看起来像这样:

var copy = new MemoryStream();
stream.CopyTo(copy);
copy.Position = 0;
PdfDocument pdfDoc = new PdfDocument(new PdfReader(copy));

这将导致第.CopyTo行出现完全相同的错误.出于同样的原因.如果让复制过程正确使用异步语义,它将正常工作:

var copy = new MemoryStream();
await stream.CopyToAsync(copy);
copy.Position = 0;
PdfDocument pdfDoc = new PdfDocument(new PdfReader(copy));

通知await stream.CopyToAsync(copy);.您需要使周围的方法async才能使await工作,但返回类型应该已经是Task了.(如果不是,你可以这样做)

使用此功能,我可以看到文本区域中显示的页数.

Csharp相关问答推荐

ASP.NET Core将SON重新序列化为派生类

ASP.NET Core 8 Cors标题未显示

Rx.Net -当关闭序列被触发时如何聚合消息并发出中间输出?

为什么xslWriter不总是按照xslWriterSet中指定的格式格式化该文档?

为什么这个Reflection. Emit代码会导致一个DDL ViolationException?

EF Core. Income和. AsNoTracking正确用法

此反射有什么问题.是否发送值转换委托?

ASP.NET核心REST API返回一个非常大的数字

Appsettings.json未加载.Net 8 Blaazor Web程序集

StackExchange.Redis.RedisServerException:调用ITransaction.ExecuteAsync()时出现错误未知命令取消监视

未在数据流块之间传播完成

CA1508:';NULL=>;TRUE;始终为';TRUE';.移除或重构条件(S)以避免死代码

JsonSchema.Net删除假阳性判断结果

.NET:从XPath定位原始XML文档中的 node

HttpClient SendAsync与多线程环境中的ArchiveZip

在使用UserManager时,如何包含与其他实体的关系?

WPF动态设置弹出窗口水平偏移

是否可以在Entity Framework Core中使用只读 struct 作为拥有实体?

C#USB条形码 scanner 在第二次扫描时未写入行尾字符

获取应用程序版本信息时出现奇怪信息