Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。
                            
                        
                    
                
            
                    
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        5年前关闭。
                    
                
        

我需要有关iText的帮助。我需要在其他现有的iText文档或PDF文档中添加现有的pdf封面。有人可以帮助我吗?
我已经搜索了一些书籍(iText在使用中),但有些复杂。

最佳答案

假设我们有一个名为pages.pdf的文档,并且要添加封面hero.pdf作为本文档的封面。

方法1:使用PdfCopy

看一下AddCover1示例:

PdfReader cover = new PdfReader("hero.pdf");
PdfReader reader = new PdfReader("pages.pdf");
Document document = new Document();
PdfCopy copy = new PdfCopy(document, new FileOutputStream("pages_with_cover.pdf"));
document.open();
copy.addDocument(cover);
copy.addDocument(reader);
document.close();
cover.close();
reader.close();


结果是一个文档,在该文档中首先有封面,然后是文档的其余部分:pages_with_cover.pdf

方法2:使用PdfStamper

看一下AddCover2示例:

PdfReader cover = new PdfReader("hero.pdf");
PdfReader reader = new PdfReader("pages.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("cover_with_pages.pdf"));
stamper.insertPage(1, cover.getPageSizeWithRotation(1));
PdfContentByte page1 = stamper.getOverContent(1);
PdfImportedPage page = stamper.getImportedPage(cover, 1);
page1.addTemplate(page, 0, 0);
stamper.close();
cover.close();
reader.close();


在这种情况下,我们将获取原始文档pages.pdf,并插入一个与封面尺寸相同的新页面1。然后,我们得到此page1,并将hero.pdf的第一页添加到此第一页。结果为cover_with_pages.pdf

两种方法有什么区别?

使用PdfCopy,您可能会丢失一些在文档级别定义的属性(例如页面布局设置),但是保留了两个文件的交互功能。如果您想保留标签,表单字段等,则可能需要设置一些参数,但是对于简单的PDF,则不需要所有这些。

使用PdfStamper,可以保留在pages.pdf文档级别定义的属性,但是会丢失封面的所有交互功能(如果有)。如果要将封面定义为工件,并且原始封面的页面边界很奇怪,则可能需要调整示例,但这会使我们讨论这个简单的答案太过分了。

09-11 18:42
查看更多