Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package PDF; import ArmyLeave.LeaveFormDMPO; import java.awt.geom.AffineTransform; import java.io.IOException; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.filechooser.FileNameExtensionFilter; import org.apache.pdfbox.cos.COSArray; import org.apache.pdfbox.cos.COSBase; import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.exceptions.COSVisitorException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.common.COSStreamArray; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.edit.PDPageContentStream; /** * * @author this class rotate given pdf file */ public class RotatePDF { private String FILENAME; public RotatePDF() throws IOException, COSVisitorException { final JFileChooser fc = new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter("*.pdf", "pdf"); fc.setFileFilter(filter); // fc.setSelectedFile(new File("New1.xlsx")); fc.setDialogTitle("Select a pdf file..."); int response = fc.showOpenDialog(null); if (response == JFileChooser.APPROVE_OPTION) { FILENAME = fc.getSelectedFile().toString(); } } public void rotate(double degree) throws IOException, COSVisitorException { if (FILENAME != null) { String destFileName = FILENAME.replace(".PDF", ".pdf"); destFileName = FILENAME.replace(".pdf", "_rotated.pdf"); final PDDocument document = PDDocument.load(FILENAME); final AffineTransform transform = AffineTransform.getRotateInstance(degree);// List<PDPage> pages = document.getDocumentCatalog().getAllPages();// for (PDPage page : pages) { transformPage(document, page, transform); } document.save(destFileName); JOptionPane.showMessageDialog(null, "The pdf file is successfully rotated."); } } private void transformPage(PDDocument document, PDPage page, AffineTransform at) throws IOException, COSVisitorException { PDRectangle cropBox = page.findCropBox(); float xOffset = (cropBox.getUpperRightX() + cropBox.getLowerLeftX()) / 2f; float yOffset = (cropBox.getUpperRightY() + cropBox.getLowerLeftY()) / 2f; AffineTransform transform = AffineTransform.getTranslateInstance(xOffset, yOffset); transform.concatenate(at); transform.concatenate(AffineTransform.getTranslateInstance(-xOffset, -yOffset)); PDPageContentStream stream = new PDPageContentStream(document, page, true, false); stream.concatenate2CTM(transform); stream.close(); COSBase contents = page.getCOSDictionary().getDictionaryObject(COSName.CONTENTS); if (contents instanceof COSStreamArray) { COSStreamArray contentsArray = (COSStreamArray) contents; COSArray newArray = new COSArray(); newArray.add(contentsArray.get(contentsArray.getStreamCount() - 1)); for (int i = 0; i < contentsArray.getStreamCount() - 1; i++) { newArray.add(contentsArray.get(i)); } COSStreamArray newStreamArray = new COSStreamArray(newArray); page.getCOSDictionary().setItem(COSName.CONTENTS, newStreamArray); } } }