How can I remove blank page from PDF in iText

前端 未结 2 2007
被撕碎了的回忆
被撕碎了的回忆 2021-01-01 06:45

I want to remove a blank page from a PDF generated using the iText library in Java.

How do I do it?

相关标签:
2条回答
  • 2021-01-01 07:06

    There are a few ways I am sure. But here is an example of how I have done it. I just check for amount of data on the page and if it is < 20 bytes I don't include it:

    public void removeBlankPdfPages(String pdfSourceFile, String pdfDestinationFile, boolean debug)
        {
            try
            {
                // step 1: create new reader
                PdfReader r = new PdfReader(pdfSourceFile);
                RandomAccessFileOrArray raf = new RandomAccessFileOrArray(pdfSourceFile);
                Document document = new Document(r.getPageSizeWithRotation(1));
                // step 2: create a writer that listens to the document
                PdfCopy writer = new PdfCopy(document, new FileOutputStream(pdfDestinationFile));
                // step 3: we open the document
                document.open();
                // step 4: we add content
                PdfImportedPage page = null;
    
    
                //loop through each page and if the bs is larger than 20 than we know it is not blank.
                //if it is less than 20 than we don't include that blank page.
                for (int i=1;i<=r.getNumberOfPages();i++)
                {
                    //get the page content
                    byte bContent [] = r.getPageContent(i,raf);
                    ByteArrayOutputStream bs = new ByteArrayOutputStream();
                    //write the content to an output stream
                    bs.write(bContent);
                    logger.debug("page content length of page "+i+" = "+bs.size());
                    //add the page to the new pdf
                    if (bs.size() > blankPdfsize)
                    {
                        page = writer.getImportedPage(r, i);
                        writer.addPage(page);
                    }
                    bs.close();
                }
                //close everything
                document.close();
                writer.close();
                raf.close();
                r.close();
            }
            catch(Exception e)
            {
            //do what you need here
            }
        }
    
    0 讨论(0)
  • 2021-01-01 07:19

    C# (as requested by kalyan)

    public static void removeBlankPdfPages(string pdfSourceFile, string pdfDestinationFile, bool debug) {
    
    // step 0: set minimum page size
    const int blankPdfsize = 20;
    
    // step 1: create new reader
    var r = new PdfReader(pdfSourceFile);
    var raf = new RandomAccessFileOrArray(pdfSourceFile);
    var document = new Document(r.GetPageSizeWithRotation(1));
    
    // step 2: create a writer that listens to the document
    var writer = new PdfCopy(document, new FileStream(pdfDestinationFile, FileMode.Create));
    
    // step 3: we open the document
    document.Open();
    
    // step 4: we add content
    PdfImportedPage page = null;
    
    //loop through each page and if the bs is larger than 20 than we know it is not blank.
    //if it is less than 20 than we don't include that blank page.
    for (var i=1 ; i <= r.NumberOfPages; i++)
    {
        //get the page content
        byte[] bContent = r.GetPageContent(i, raf);
        var bs = new MemoryStream();
    
        //write the content to an output stream
        bs.Write(bContent, 0, bContent.Length);
        Console.WriteLine("page content length of page {0} = {1}", i, bs.Length);
    
        //add the page to the new pdf
        if (bs.Length > blankPdfsize)
        {
            page = writer.GetImportedPage(r, i);
            writer.AddPage(page);
        }
        bs.Close();
    }
    //close everything
    document.Close();
    writer.Close();
    raf.Close();
    r.Close();}
    
    0 讨论(0)
提交回复
热议问题