asp.net - itextsharp 不关闭文件

标签 asp.net itext

我有一些用于 itextsharp 合并 2 个 pdf 文件的代码。在网上某处找到它。合并工作正常,但似乎源文件在全部完成后仍在使用中。我想做的是删除我已经合并的第一个文件,它是通过文件上传上传的,只保留合并后的文件。肯定是执行合并的代码导致文件保持打开状态。我试图删除服务器上的文件,它告诉我一些类似它由 IIShelper 打开的信息。通过几个小时的工作,我缩小到这些东西。为什么它一直在使用该文件?

    public static void MergeFiles(string destinationFile, string[] sourceFiles)
    {

        int f = 0;
        // we create a reader for a certain document
        PdfReader reader = new PdfReader(sourceFiles[f]);
        // we retrieve the total number of pages
        int n = reader.NumberOfPages;
        // step 1: creation of a document-object
        Document document = new Document(reader.GetPageSizeWithRotation(1));
        // step 2: we create a writer that listens to the document
        PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create));
        // step 3: we open the document
        document.Open();
        PdfContentByte cb = writer.DirectContent;
        PdfImportedPage page;
        int rotation;
        if(reader.IsEncrypted() == false)
        {
            // step 4: we add content
            while (f < sourceFiles.Length)
            {
                int i = 0;
                while (i < n)
                {
                    i++;
                    document.SetPageSize(reader.GetPageSizeWithRotation(i));
                    document.NewPage();
                    page = writer.GetImportedPage(reader, i);
                    rotation = reader.GetPageRotation(i);
                    if (rotation == 90 || rotation == 270)
                    {
                        cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                    }
                    else
                    {
                        cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                    }
                }
                f++;
                if (f < sourceFiles.Length)
                {
                    reader = new PdfReader(sourceFiles[f]);
                    // we retrieve the total number of pages
                    n = reader.NumberOfPages;
                }

            }
        }
        else
        {
            //is encrypted
        }
        // step 5: we close the document
        document.Close();
        reader.Close();
        reader.Dispose();


    }

提前致谢

最佳答案

最后您只关闭一个阅读器,但每个文件打开一个阅读器。因此,只有最后一个 reader 会被关闭。

在你这样做之前你需要关闭旧阅读器

    reader = new PdfReader(sourceFiles[f]);

关于asp.net - itextsharp 不关闭文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20574993/

相关文章:

asp.net - Page.AsyncTimeout - 无限超时?

c# - 如何注册 Javascript 函数以在每次回发时运行?

java - 如何使用 IText 在 PDF 页面中间插入内容

JavaFX 和 iText7

pdf-generation - 如何从 "complex"XML 文件创建标记的 PDF

cryptography - iText 加密数字签名的 PDF

asp.net - aspnet 表 - 指定 TableCell 宽度?

c# - 如何使用表单例份验证锁定用户

asp.net - 环境标签助手

java - 使用速度模板生成的 pdf 中的书签