首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PdfStamper被处置

PdfStamper被处置
EN

Stack Overflow用户
提问于 2015-01-28 11:44:01
回答 1查看 1.3K关注 0票数 1

我传递给该方法的PdfStamper正在方法的末尾被释放--为什么,以及如何阻止它?我正在尝试从模板创建一个页面对象,然后我可以将其添加到PdfStamper X的次数中。

代码语言:javascript
复制
//real code
public void DoSpecialAction(PdfStamper pdfStamper)
{
    using (var pdfTemplate = new PdfReader(_extraPageTemplatePath))
    using (var pdfReader = new PdfReader(pdfTemplate))
    {
        PdfImportedPage page = pdfStamper.GetImportedPage(pdfReader, 1);
        pdfStamper.InsertPage(3, pdfReader.GetPageSize(1));
        PdfContentByte pb = pdfStamper.GetUnderContent(3);
        pb.AddTemplate(page, 0, 0);
    }
}

程序结构如下:

代码语言:javascript
复制
//psuedocode
class PrintFieldsToPdf {
    foreach (normalfield) {
        PrintNormalFields();
    }

    foreach (specialaction) {
        DoSpecialAction(pdfStamper);
    }

    pdfStamper.Close(); //at this point the object has been deallocated
}

引发以下异常:

代码语言:javascript
复制
An exception of type 'System.ObjectDisposedException' occurred in mscorlib.dll but was not handled in user code

Additional information: Cannot access a closed file.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-29 11:55:50

“任择议定书”最后评论说:

我预感到,在PdfStamper调用Close并写入文件之前,页面对象可能永远不会被复制,因此,我用来读取额外页面模板的PdfReader导致了问题,因为在关闭PdfStamper之前,它会在我的方法结束时被释放。

他的直觉是正确的:至少复制原始页面的某些部分被推迟到PdfStamper关闭。这允许在同一个PdfReader实例的多个页面在单独调用中导入时进行某些优化。

从许多不同的PdfReaders导入的用例也引起了iText(Sharp)开发人员的注意。因此,他们提供了一种方法,让PdfStamper在用户确信不会复制其他任何内容时,从给定的PdfReader复制所需的所有内容:

代码语言:javascript
复制
public void DoSpecialAction(PdfStamper pdfStamper)
{
    using (var pdfTemplate = new PdfReader(_extraPageTemplatePath))
    using (var pdfReader = new PdfReader(pdfTemplate))
    {
        PdfImportedPage page = pdfStamper.GetImportedPage(pdfReader, 1);
        pdfStamper.InsertPage(3, pdfReader.GetPageSize(1));
        PdfContentByte pb = pdfStamper.GetUnderContent(3);
        pb.AddTemplate(page, 0, 0);
        // Copy everything required from the PdfReader
        pdfStamper.Writer.FreeReader(pdfReader);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28191429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档