| /** |
| * 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.camel.component.fop; |
| |
| import java.io.IOException; |
| import java.io.StringWriter; |
| import java.io.Writer; |
| |
| import org.apache.pdfbox.cos.COSName; |
| import org.apache.pdfbox.exceptions.CryptographyException; |
| import org.apache.pdfbox.pdmodel.PDDocument; |
| import org.apache.pdfbox.pdmodel.PDDocumentInformation; |
| import org.apache.pdfbox.pdmodel.encryption.BadSecurityHandlerException; |
| import org.apache.pdfbox.pdmodel.encryption.DecryptionMaterial; |
| import org.apache.pdfbox.pdmodel.encryption.StandardDecryptionMaterial; |
| import org.apache.pdfbox.util.PDFTextStripper; |
| |
| public final class FopHelper { |
| private FopHelper() { |
| } |
| |
| //decryption requires additional libraries |
| public static void decryptPDFN(PDDocument document, String password) throws |
| IOException, CryptographyException, BadSecurityHandlerException { |
| if (document.isEncrypted()) { |
| DecryptionMaterial decryptionMaterial = new StandardDecryptionMaterial(password); |
| document.openProtection(decryptionMaterial); |
| } else { |
| throw new RuntimeException("Document not encrypted"); |
| } |
| } |
| |
| public static String extractTextFrom(PDDocument document) throws IOException { |
| Writer output = new StringWriter(); |
| PDFTextStripper stripper = new PDFTextStripper(); |
| stripper.writeText(document, output); |
| return output.toString().trim(); |
| } |
| |
| public static String getDocumentMetadataValue(PDDocument document, COSName name) { |
| PDDocumentInformation info = document.getDocumentInformation(); |
| return info.getDictionary().getString(name); |
| } |
| |
| public static String decorateTextWithXSLFO(String text) { |
| return "<fo:root xmlns:fo=\"http://www.w3.org/1999/XSL/Format\">\n" |
| + " <fo:layout-master-set>\n" |
| + " <fo:simple-page-master master-name=\"only\">\n" |
| + " <fo:region-body region-name=\"xsl-region-body\" margin=\"0.7in\" padding=\"0\" />\n" |
| + " <fo:region-before region-name=\"xsl-region-before\" extent=\"0.7in\" />\n" |
| + " <fo:region-after region-name=\"xsl-region-after\" extent=\"0.7in\" />\n" |
| + " </fo:simple-page-master>\n" |
| + " </fo:layout-master-set>\n" |
| + " <fo:page-sequence master-reference=\"only\">\n" |
| + " <fo:flow flow-name=\"xsl-region-body\">\n" |
| + " <fo:block>" + text + "</fo:block>\n" |
| + " </fo:flow>\n" |
| + " </fo:page-sequence>\n" |
| + "</fo:root>"; |
| } |
| } |