当前位置:  开发笔记 > 编程语言 > 正文

有没有直接的方法使用iTextSharp将一个PDF文档附加到另一个?

如何解决《有没有直接的方法使用iTextSharp将一个PDF文档附加到另一个?》经验,为你挑选了2个好方法。

我在网上搜索了如何做到这一点的例子.我发现了一些似乎需要更多参与的东西.所以我的问题是,使用iTextSharp,是否有一种相当简洁的方法将一个PDF文档附加到另一个?

最理想的是,这不会涉及第三个文件.只需打开第一个PDF文档,将第二个PDF文档附加到第一个,然后关闭它们.



1> Loudenvier..:

我真的可能会遗漏一些东西,但我做了一些更简单的事情.我承认这个解决方案可能不会更新书签(就像到目前为止最好的答案),但它对我来说完美无缺.由于我将文档与可填写的表单合并,我使用PdfCopyFields而不是PdfCopy.

这是代码(我已经删除了所有错误处理以使实际代码更加可见,如果您打算使用代码,请添加一个try..finally来关闭打开的资源):

    void MergePdfStreams(List Source, Stream Dest)
    {
        PdfCopyFields copy = new PdfCopyFields(Dest);

        foreach (Stream source in Source)
        {
            PdfReader reader = new PdfReader(source);
            copy.AddDocument(reader);
        }

        copy.Close();
    }

您可以传递任何流,无论是FileStream,MemoryStream(从数据库读取PDF时都很有用,不需要临时文件等)

样品用法:

    void TestMergePdfStreams()
    {
        List sources = new List()
        {
            new FileStream("template1.pdf", FileMode.Open),
            new FileStream("template2.pdf", FileMode.Open),
            new MemoryStream((byte[])someDataRow["PDF_COLUMN_NAME"])
        };

        MergePdfStreams(sources, new FileStream("MergedOutput.pdf", FileMode.Create));
    }



2> Danno..:

好吧,这不是直截了当的,但它起作用并且速度惊人.(它使用第三个文件,没有打开和附加的东西.)我在docs/examples中发现了这个.这是代码:

private void CombineMultiplePDFs( string[] fileNames, string outFile ) {
    int pageOffset = 0;
    ArrayList master = new ArrayList();
    int f = 0;

    Document document = null;
    PdfCopy writer = null;
    while ( f < fileNames.Length ) {
        // we create a reader for a certain document
        PdfReader reader = new PdfReader( fileNames[ f ] );
        reader.ConsolidateNamedDestinations();
        // we retrieve the total number of pages
        int n = reader.NumberOfPages;
        ArrayList bookmarks = SimpleBookmark.GetBookmark( reader );
        if ( bookmarks != null ) {
            if ( pageOffset != 0 ) {
                SimpleBookmark.ShiftPageNumbers( bookmarks, pageOffset, null );
            }
            master.AddRange( bookmarks );
        }
        pageOffset += n;

        if ( f == 0 ) {
            // step 1: creation of a document-object
            document = new Document( reader.GetPageSizeWithRotation( 1 ) );
            // step 2: we create a writer that listens to the document
            writer = new PdfCopy( document, new FileStream( outFile, FileMode.Create ) );
            // step 3: we open the document
            document.Open();
        }
        // step 4: we add content
        for ( int i = 0; i < n; ) {
            ++i;
            if ( writer != null ) {
                PdfImportedPage page = writer.GetImportedPage( reader, i );
                writer.AddPage( page );
            }
        }
        PRAcroForm form = reader.AcroForm;
        if ( form != null && writer != null ) {
            writer.CopyAcroForm( reader );
        }
        f++;
    }
    if ( master.Count > 0 && writer != null ) {
        writer.Outlines = master;
    }
    // step 5: we close the document
    if ( document != null ) {
        document.Close();
    }
}

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有