I am using itext-xtra-5.5.6 api to remove/cleanup the header and footer.
Here is the code
//removes header and footer based on the configuration
public static void cleanUpContent(String inPDFFile,String targetPDFFile,PDFConfig pdfConfig) throws Exception{
PdfReader reader = new PdfReader(inPDFFile);
OutputStream outputStream = new FileOutputStream(targetPDFFile);
float upperY=pdfConfig.getPdfUpperY();
float lowerY=pdfConfig.getPdfLowerY();
boolean highLightColor=pdfConfig.isPdfHighLightClippedTextColor();
PdfStamper stamper = new PdfStamper(reader, outputStream);
List<PdfCleanUpLocation> cleanUpLocations = new ArrayList<PdfCleanUpLocation>();
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
Rectangle pageRect = reader.getCropBox(i);
Rectangle headerRect= new Rectangle(pageRect);
headerRect.setBottom(headerRect.getTop()-upperY);
Rectangle footerRect= new Rectangle(pageRect);
footerRect.setTop(footerRect.getBottom()+lowerY);
if(highLightColor){
cleanUpLocations.add(new PdfCleanUpLocation(i, headerRect,BaseColor.GREEN));
cleanUpLocations.add(new PdfCleanUpLocation(i, footerRect,BaseColor.GREEN));
}else{
cleanUpLocations.add(new PdfCleanUpLocation(i, headerRect));
cleanUpLocations.add(new PdfCleanUpLocation(i, footerRect));
}
}
PdfCleanUpProcessor cleaner = new PdfCleanUpProcessor(cleanUpLocations, stamper);
try{
cleaner.cleanUp();
}catch(Exception e){
e.printStackTrace();
}
stamper.close();
reader.close();
outputStream.flush();
outputStream.close();
}
When I run the code to remove header and footer for a PDF file with 1440 pages with upperY=65 and lowerY=65 then the code is deleting all the content from the page but when upperY=65 and lowerY=45 then code is deleting just the header and footer which is expected.
Also another issue is Null pointer exception for some pages in the DefaultClipper class
private void fixupFirstLefts2( OutRec OldOutRec, OutRec NewOutRec ) {
for (final OutRec outRec : polyOuts) {
if (outRec.firstLeft.equals( OldOutRec )) {
outRec.firstLeft = NewOutRec;
}
}
}
in polyOuts -> outRec.firstLeft is null so outRec.firstLeft.equals method throws the Null pointer exception.
Exception stack trace
java.lang.NullPointerException
at com.itextpdf.text.pdf.parser.clipper.DefaultClipper.fixupFirstLefts2(DefaultClipper.java:1463)
at com.itextpdf.text.pdf.parser.clipper.DefaultClipper.joinCommonEdges(DefaultClipper.java:2121)
at com.itextpdf.text.pdf.parser.clipper.DefaultClipper.executeInternal(DefaultClipper.java:1420)
at com.itextpdf.text.pdf.parser.clipper.DefaultClipper.execute(DefaultClipper.java:1362)
at com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRegionFilter.filterFillPath(PdfCleanUpRegionFilter.java:174)
at com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRenderListener.filterCurrentPath(PdfCleanUpRenderListener.java:402)
at com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRenderListener.renderPath(PdfCleanUpRenderListener.java:232)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.paintPath(PdfContentStreamProcessor.java:377)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.access$6300(PdfContentStreamProcessor.java:60)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor$PaintPath.invoke(PdfContentStreamProcessor.java:1183)
at com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpContentOperator.invoke(PdfCleanUpContentOperator.java:138)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.invokeOperator(PdfContentStreamProcessor.java:286)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.processContent(PdfContentStreamProcessor.java:429)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor$FormXObjectDoHandler.handleXObject(PdfContentStreamProcessor.java:1252)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.displayXObject(PdfContentStreamProcessor.java:352)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.access$6100(PdfContentStreamProcessor.java:60)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor$Do.invoke(PdfContentStreamProcessor.java:988)
at com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpContentOperator.invoke(PdfCleanUpContentOperator.java:138)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.invokeOperator(PdfContentStreamProcessor.java:286)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.processContent(PdfContentStreamProcessor.java:429)
at com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpProcessor.cleanUpPage(PdfCleanUpProcessor.java:160)
at com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpProcessor.cleanUp(PdfCleanUpProcessor.java:135)
not sure where i am doing mistake. I even tried to see if the pdf pages contain images or other types but the pages are just text based. Please help resolve 2 issues.