在iTextSharp中,如何在创建新文档时包含现有PDF [英] In iTextSharp, how to include an existing PDF while creating a new document

查看:33
本文介绍了在iTextSharp中,如何在创建新文档时包含现有PDF的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在这里和"iText in Action"一书中找到了许多使用PDFCopy和PDFSmartCopy类合并PDF的解决方案,但我见过的唯一一个类似的问题是,这个人自己算出了答案,但没有发布答案。这个帖子Add an existing PDF from file to an unwritten document using iTextSharp问了同样的问题,但是已经结束了,所以他们建议关闭现有的文档,然后使用PDFCopy,这里我想把它插入到任何地方。那就这样吧。

我正在使用普通的节、短语、文档和PDFWriter类创建一个iTextSharp文档,其中包含文本和图像。这是多年编写的代码,运行良好。现在,我们需要在将此文档创建为新章节或章节时插入现有PDF(如果这是不可能的)。我有一个字节数组形式的PDF,所以获取PDFReader没有问题。但是,我不知道如何阅读PDF并将其插入到我所处位置现有文档中。如果需要,我可以访问PDFWriter,但对于文档的睡觉,所有访问都是通过节进行的。这就是我得到的最多信息,如果需要,我可以将PDFWriter添加为另一个参数。

自从最初的帖子以来,我取得了一些进展,并相应地修改了代码。

    internal static void InsertPDF( Section section, Byte[] pdf )
    {
        this.document.NewPage();

        PdfReader pdfreader = new PdfReader( pdf );
        Int32 pages = pdfreader.NumberOfPages;
        for ( Int32 page = 1; page <= pages; page++ )
        {
            PdfImportedPage page = this.writer.GetImportedPage( planreader, pagenum );
            PdfContentByte pcb = this.writer.DirectContentUnder;
            pcb.AddTemplate( page, 0, 0 );
            this.document.NewPage();
        }
    }

它几乎是在做我想做的事情,但是我显然不了解iText的全部工作原理,我想知道这是不是正确的方法,或者有更好的方法来做这件事。

如果我可以提供任何其他信息,请告诉我。

任何指针都将不胜感激。

推荐答案

只是在答案中多加了一点肉。通过研究使用PdfTemplate的方法,最终找到了解决方案,而PdfImportdPage就是从该模板派生出来的。我添加了更多内容,以显示它如何与正在构建的文档的睡觉交互。我希望这对其他人有帮助。

internal static void InsertPDF( PdfWriter writer, Document document, Section section, Byte[] pdf )
{
    Paragraph para = new Paragraph();
    // Add note to show blank page is intentional
    para.Add( new Phrase( "PDF follows on the next page.", <your font> ) );
    section.Add( para );
    // Need to update the document so we render this page.
    document.Add( section );

    PdfReader reader = new PdfReader( pdf );
    PdfContentByte pcb = writer.DirectContentUnder;
    Int32 pages = planreader.NumberOfPages;
    for ( Int32 pagenum = 1; pagenum <= pages; pagenum++ )
    {
        document.NewPage();
        PdfImportedPage page = writer.GetImportedPage( reader, pagenum );
        // Render their page in our document.
        pcb.AddTemplate( page, 0, 0 );
     }
}

这篇关于在iTextSharp中,如何在创建新文档时包含现有PDF的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆