gpt4 book ai didi

c# - 如何在 iTextSharp 7 中设置 PdfFormField 图像并在使用后释放文件?

转载 作者:行者123 更新时间:2023-12-04 14:14:28 24 4
gpt4 key购买 nike

我在尝试设置 时遇到了很多麻烦PdfFormField image 并释放 itext 进程使用的文件。这是我现在正在做的事情(设置图像本身工作正常,但该过程仍在使用该文件......):

public void SetImageField(string idFormField, string imagePath)
{
PdfButtonFormField pdfButtonFormField = (PdfButtonFormField)_pdfAcroForm
.GetField(idFormField);

if (pdfButtonFormField == null)
throw new InstanceNotFoundException("Não foi encontrado o campo de assinatura no pdf!");

pdfButtonFormField
.SetImage(imagePath);

pdfButtonFormField
.SetBorderWidth(0);

pdfButtonFormField.Flush();
pdfButtonFormField.Release();
}

如您所见,我正在通过 设置 pdfButtonFormField 图像pdfButtonFormField.SetImage(imagePath)。 问题是,我需要在使用后删除这个文件(imagePath),而且 itext 进程似乎仍在使用该资源,即使我调用 pdfButtonFormField.Flush() 还有 pdfButtonFormField.Release() .

所以你可能会说,“为什么不直接打开一个文件流,使用完后调用fileStream.Dispose?”。因为文件本身不在我手中,它由 itext api 管理。

所以拜托了,我想知道是否有办法做到这一点。

最佳答案

查看 iText 7 源代码, PdfButtonFormField.SetImage 执行以下操作:

  • 打开一个 文件流 使用图像路径(它不会释放)。
  • 调用内部实用程序方法来读取 文件流 成字节数组。
  • 电话 Convert.ToBase64String 将字节数组转换为字符串。
  • 将结果字符串传递给 PdfButtonFormField.SetValue .

  • 您可以自己完成前三个步骤,然后拨打 设置值 PdfButtonFormField .

    假设您已经编写了自己的方法 ReadFileToArray 要读取图像文件并将其作为字节数组返回,这应该有效:
    public void SetImage(PdfAcroForm pdfAcroForm, string idFormField, string imagePath)
    {
    var pdfButtonFormField = (PdfButtonFormField) pdfAcroForm.GetField(idFormField);
    if (pdfButtonFormField == null)
    throw new InstanceNotFoundException();
    var imageBytes = ReadFileToArray(imagePath);
    var imageStr = Convert.ToBase64String(imageBytes);
    pdfButtonFormField.SetValue(imageStr);
    pdfButtonFormField.SetBorderWidth(0);
    }

    这是 PdfButtonFormField 源的链接:
    PdfButtonFormField.cs

    关于c# - 如何在 iTextSharp 7 中设置 PdfFormField 图像并在使用后释放文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61760622/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com