Как я могу удалить пустую страницу из PDF в iText - PullRequest
3 голосов
/ 17 марта 2010

Я хочу удалить пустую страницу из PDF, созданного с помощью библиотеки iText в Java.

Как мне это сделать?

Ответы [ 2 ]

7 голосов
/ 22 июля 2010

C # (по запросу 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();}
3 голосов
/ 17 марта 2010

Я уверен, что есть несколько способов. Но вот пример того, как я это сделал. Я просто проверяю количество данных на странице и, если оно меньше 20 байт, я не включаю его:

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
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...