当前位置: 首页 > 知识库问答 >
问题:

如何在并行foreach循环中使用IText7的CreateTiff方法?

东郭弘方
2023-03-14

我写了一些代码,通过iText7将tiff文件转换成pdf文件。但是当我启动它时,它在方法image.imageDataFactory.createTIFF上有死锁。如果将parallel.foreach替换为foreach则所有工作都正确。我做错了什么?


void Run(List<string> tiffsPaths)
{
   Parallel.ForEach(tiffsPaths, ConvertTiffToPdf)
}

void ConvertTiffToPdf(string tiffPath)
{
   var fileName = Path.GetFileNameWithoutExtension(tiffPath);
   var pdfPath = Path.Combine(this.outputPicPath, fileName + ".pdf");

   var pdfWriter = new PdfWriter(pdfPath);
   var document = new PdfDocument(pdfWriter);
   var workDir = Path.GetDirectoryName(SourceFile) ?? string.Empty;
   var pageNum = 1;

   var tiffImage = Image.ImageDataFactory.CreateTiff(new Uri(tiffPath), true, pageNum, true);
   var tiffPageSize = new Geom.Rectangle(tiffImage.GetWidth(), 
   tiffImage.GetHeight());
   var newPage = document.AddNewPage(new Geom.PageSize(tiffPageSize));
   var canvas = new PdfCanvas(newPage);
   canvas.AddImage(tiffImage, tiffPageSize, false);

   document.Close();
   pdfWriter.Close();
}

UPD在itext.io.source.RandomAccessSourceFactory类的方法Public IRandomAccessSource CreateSource(Uri url)中找到了IText7源代码中发生死锁的地方。这里有这部分代码:

WebRequest wr = WebRequest.Create(url);
wr.Credentials = CredentialCache.DefaultCredentials;
Stream isp = wr.GetResponse().GetResponseStream();

共有1个答案

红存
2023-03-14

var tiffImage=image.imageDataActory.CreateTIFF(新Uri(tiffPath),true,pageNum,true);替换为var tiffImage=image.imageDataActory.CreateTIFF(file.ReadAllBytes(path),true,pageNum,true);并且所有操作都很好

 类似资料:
  • 本文向大家介绍如何在PowerShell foreach并行循环中使用PSCustomObject?,包括了如何在PowerShell foreach并行循环中使用PSCustomObject?的使用技巧和注意事项,需要的朋友参考一下 要在Foreach并行循环内使用PSCustomObject ,我们首先需要考虑如何在循环内使用变量。 因此,让我们看看是否可以在$out变量中存储或更改值。 示例

  • 我需要修改下面的代码,以使用循环与常规foreach循环。 我遇到的问题是将对象传递给foreach循环。我刚开始使用循环-有没有人对此有一些信息? 当前代码 问题是列表将包含3000+项,循环将循环每一项,我需要并行地运行它们。 因此,我想使用函数,但我无法通过传递对象来使其工作。

  • 问题内容: 使用以下代码显示我的Twitter个人资料中的朋友列表。我想一次只加载一个特定的数字,例如20,然后在底部为第1-2-3-4-5页的页面提供分页链接(但是,除以限制) **更新**** 这项工作有效,只需要抵消从开始的输出即可。在想什么? 问题答案: 一个非常优雅的解决方案是使用:

  • 问题内容: 在循环中使用/ 是否有任何问题?我试图遍历文件数组和每个文件的内容。 这段代码确实有效,但是这可能会出问题吗?我让某人告诉我,您不应该在这样的高阶函数中使用/ ,所以我只是想问一下这是否有问题。 问题答案: 确保代码确实有效,但是我很确定它不会执行您期望的功能。它只会触发多个异步调用,但此后函数会立即返回。 顺序阅读 如果要顺序读取文件, 则不能使用。只需使用现代循环即可,该循环将按预

  • 问题内容: 我正在尝试编译以下代码: 我在for行中看到一条错误消息: 该方法返回一个(但在这种情况下,返回的结构)。 是我为应用程序创建的枚举(在另一个类文件-中)。 当我在中创建具有相同结构的foreach循环时,我没有遇到此问题。 我究竟做错了什么? 问题答案: 一种更有效的方法: 如果有可能,请定义“ getData”,以便您不需要强制转换。

  • 我使用的php foreach语句如下所示: