iText的 - 如何添加页面与PdfCopy创建的文档(iText - how to add pa

2019-08-04 11:21发布

我使用iText的(特别是iTextSharp的4.1.6),我想通过合并现有的PDF文件的网页,但也从插入的图像创建新页面创建一个PDF文件。

我有这两个部分分别采用PdfCopy和PdfWriter分开工作。 从图像中创建一个页面的代码如下所示:

PdfWriter pw = PdfWriter.GetInstance(doc, outputStream);
Image img = Image.GetInstance(inputStream);
doc.Add(img);
doc.NewPage();

现在,由于PdfCopy从PdfWriter继承,我想我能这样的“图像”添加到使用相同的技术,我PdfCopy对象,但它不工作(如果你在上面的例子中实例化PdfCopy而不是PdfWriter ,没有出来的页面上)。

从源代码我注意到,当PdfCopy的contstructor调用父类的构造是一个新的文档对象,而不是一个传递这样做,所以我猜这是什么原因迅速浏览一下。

有没有更好的方法去吗? 目前我最好的猜测是使用PdfWriter创建从图像单页PDF,然后将其添加到使用PdfCopy文档,但似乎有点像一种解决方法。

Answer 1:

最近我有这个问题,这里的答案居然是的arent有用。 我的使用情况基本上是“拿一把PDF和图片(为.jpg,.png等),并将它们全部合并成1个PDF”。 我不得不使用PdfCopy因为它保留的东西像表单字段和标签,其中PdfWriter犯规。

基本上,因为PdfCopy不会允许您创建addPage()新的网页,你必须创建在页面上的图像存储一个新的PDF,然后用PdfCopy页面从PDF复制出来。

例如:

    Document pdfDocument = new Document();
    ByteArrayOutputStream pdfOutputStream = new ByteArrayOutputStream();
    PdfCopy copy = new PdfCopy(pdfDocument, pdfOutputStream);

    pdfDocument.open();

    for (File file : allFiles) {
       if (/* file is PDF */) {
           /* Copy all the pages in the PDF file into the new PDF */
           PdfReader reader = new PdfReader(file.getAllBytes());
           for (int i = 1; i <= reader.getNumberOfPages(); i++) {
              copy.addPage(copy.getImportedPage(reader, i);
           }
       } else {
           /* File is image. Create a new PDF in memory, write the image to its first page, and then use PdfCopy to copy that first page back into the main PDF */
           Document imageDocument = new Document();
           ByteArrayOutputStream imageDocumentOutputStream = new ByteArrayOutputStream();
           PdfWriter imageDocumentWriter = PdfWriter.getInstance(imageDocument, imageDocumentOutputStream);

            imageDocument.open();

            if (imageDocument.newPage()) {

                image = Image.getInstance(file.getAllBytes());

                if (!imageDocument.add(image)) {
                   throw new Exception("Unable to add image to page!");
                }

                imageDocument.close();
                imageDocumentWriter.close();

                PdfReader imageDocumentReader = new PdfReader(imageDocumentOutputStream.toByteArray());

                copy.addPage(copy.getImportedPage(imageDocumentReader, 1));

                imageDocumentReader.close();
         }

     }


文章来源: iText - how to add pages to a document created with PdfCopy