PDFBox zum pdf bearbeiten ignoriere hier alle Exceptions abgeändert aus zwei anderen Beispielen aus dem SVN
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.pdfbox.examples.pdmodel; import java.awt.Color; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.List; import javax.imageio.ImageIO; import org.apache.pdfbox.exceptions.COSVisitorException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.edit.PDPageContentStream; import org.apache.pdfbox.pdmodel.font.PDFont; import org.apache.pdfbox.pdmodel.font.PDType1Font; import org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg; public class AddMessageToEachPage { public void doIt(String file, String header, String outfile) throws IOException, COSVisitorException { PDDocument doc = PDDocument.load(file); List<?> allPages = doc.getDocumentCatalog().getAllPages(); PDFont font = PDType1Font.HELVETICA_BOLD; float fontSize = 12.0f; // // doc.addPage(page); // PDPage pagex = new PDPage(PDPage.PAGE_SIZE_A4); BufferedImage image = new BufferedImage((int) pagex.getMediaBox() .getWidth(), 100, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); g.setColor(Color.red); g.setBackground(Color.white); g.setFont(g.getFont().deriveFont(50f)); g.clearRect(0, 0, image.getWidth(), image.getHeight()); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, // Anti-alias! RenderingHints.VALUE_ANTIALIAS_OFF); g.drawString("Hallo PDFBox", 100, 100); g.dispose(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ImageIO.write(image, "jpeg", bos); PDJpeg ximage = new PDJpeg(doc, new ByteArrayInputStream( bos.toByteArray())); PDPageContentStream contentStream1 = new PDPageContentStream(doc, pagex); contentStream1.beginText(); contentStream1.setFont(font, 12); contentStream1.moveTextPositionByAmount(100, 700); contentStream1.drawString("Hello World !!!"); contentStream1.endText(); contentStream1.drawImage(ximage, 20, 20); contentStream1.close(); // zur richtigen ausgabe (reihenfolge) PDDocument dx = new PDDocument(); dx.addPage(pagex); for (int i = 0; i < allPages.size(); i++) { PDPage page = (PDPage) allPages.get(i); PDRectangle pageSize = page.findMediaBox(); PDRectangle x = new PDRectangle(pageSize.getWidth(), pageSize.getHeight() + fontSize); // hier wird die seite vergrößert um nichts zu übermalen page.setMediaBox(x); float stringWidth = font.getStringWidth(header) * fontSize / 1000f; // calculate to center of the page int rotation = page.findRotation(); boolean rotate = rotation == 90 || rotation == 270; float pageWidth = rotate ? pageSize.getHeight() : pageSize .getWidth(); float pageHeight = rotate ? pageSize.getWidth() : pageSize .getHeight(); double centeredXPosition = rotate ? pageHeight / 2f : (pageWidth - stringWidth) / 2f; double centeredYPosition = rotate ? (pageWidth - stringWidth) / 2f : pageHeight / 2f; // append the content to the existing stream PDPageContentStream contentStream = new PDPageContentStream(doc, page, true, true, true); contentStream.beginText(); // set font and font size contentStream.setFont(font, fontSize); // set text color to red contentStream.setNonStrokingColor(255, 0, 0); if (rotate) { // rotate the text according to the page rotation contentStream.setTextRotation(Math.PI / 2, centeredXPosition, centeredYPosition); } else { contentStream.setTextTranslation(0, pageHeight); } contentStream.drawString(header); contentStream.endText(); contentStream.close(); // import nicht addpage // da die sachen aus einem anderem PDF stammen dx.importPage(page); } // doc.getDocumentCatalog().getAllPages().add(0, pagex); dx.save(outfile); dx.close(); doc.close(); } public static void main(String[] args) { AddMessageToEachPage app = new AddMessageToEachPage(); try { app.doIt("store.pdf", "Was ein cooler Header", "m2e.pdf"); } catch (Exception e) { e.printStackTrace(); } } }
Add new attachment
Only authorized users are allowed to upload new attachments.