Return-Path: Delivered-To: apmail-xmlgraphics-fop-commits-archive@www.apache.org Received: (qmail 54406 invoked from network); 26 Oct 2008 16:32:37 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 26 Oct 2008 16:32:37 -0000 Received: (qmail 83620 invoked by uid 500); 26 Oct 2008 16:32:41 -0000 Delivered-To: apmail-xmlgraphics-fop-commits-archive@xmlgraphics.apache.org Received: (qmail 83584 invoked by uid 500); 26 Oct 2008 16:32:41 -0000 Mailing-List: contact fop-commits-help@xmlgraphics.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: fop-dev@xmlgraphics.apache.org Delivered-To: mailing list fop-commits@xmlgraphics.apache.org Received: (qmail 83575 invoked by uid 99); 26 Oct 2008 16:32:41 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 26 Oct 2008 09:32:41 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 26 Oct 2008 16:31:37 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id A78E6238896D; Sun, 26 Oct 2008 09:32:16 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r708012 - in /xmlgraphics/fop/trunk: src/java/org/apache/fop/pdf/PDFDocument.java src/java/org/apache/fop/pdf/PDFFactory.java src/java/org/apache/fop/pdf/PDFLaunch.java status.xml Date: Sun, 26 Oct 2008 16:32:16 -0000 To: fop-commits@xmlgraphics.apache.org From: adelmelle@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20081026163216.A78E6238896D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: adelmelle Date: Sun Oct 26 09:32:16 2008 New Revision: 708012 URL: http://svn.apache.org/viewvc?rev=708012&view=rev Log: Bugzilla 45113: Added PDF /Launch action, which is used in case of references to URIs using the file:// protocol. Thanks to Alexander Stamenov (astamenov.AT.gmail.com) for the input! Added: xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFLaunch.java (with props) Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDocument.java xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFFactory.java xmlgraphics/fop/trunk/status.xml Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDocument.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDocument.java?rev=708012&r1=708011&r2=708012&view=diff ============================================================================== --- xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDocument.java (original) +++ xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFDocument.java Sun Oct 26 09:32:16 2008 @@ -224,6 +224,11 @@ protected List gotos = new java.util.ArrayList(); /** + * List of PDFLaunch objects. + */ + protected List launches = new java.util.ArrayList(); + + /** * The PDFDests object for the name dictionary. * Note: This object is not a list. */ @@ -486,6 +491,9 @@ if (obj instanceof PDFPage) { this.pages.notifyKidRegistered((PDFPage)obj); } + if (obj instanceof PDFLaunch) { + this.launches.add(obj); + } if (obj instanceof PDFLink) { this.links.add(obj); } @@ -657,6 +665,15 @@ } /** + * Finds a launch. + * @param compare reference object to use as search template + * @return the launch if found, null otherwise + */ + protected PDFLaunch findLaunch(PDFLaunch compare) { + return (PDFLaunch) findPDFObject(launches, compare); + } + + /** * Looks for an existing GState to use * @param wanted requested features * @param current currently active features @@ -703,7 +720,6 @@ */ public void setColorSpace(int theColorspace) { this.colorspace.setColorSpace(theColorspace); - return; } /** @@ -1019,12 +1035,6 @@ by the table's length */ this.position += outputXref(stream); - // Determine existance of encryption dictionary - String encryptEntry = ""; - if (this.encryption != null) { - encryptEntry = this.encryption.getTrailerEntry(); - } - /* construct the trailer */ String pdf = "trailer\n" @@ -1037,10 +1047,13 @@ + "\n" + "/Info " + this.info.referencePDF() - + "\n" - + getIDEntry() - + "\n" - + encryptEntry + + "\n"; + if (this.encryption != null) { + pdf += this.encryption.getTrailerEntry(); + } else { + pdf += getIDEntry(); + } + pdf += "\n" + ">>\n" + "startxref\n" + this.xref Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFFactory.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFFactory.java?rev=708012&r1=708011&r2=708012&view=diff ============================================================================== --- xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFFactory.java (original) +++ xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFFactory.java Sun Oct 26 09:32:16 2008 @@ -1011,6 +1011,10 @@ // HTTP URL? if (targetLo.startsWith("http://")) { return new PDFUri(target); + // Non PDF files. Try to /Launch them. + } else if (targetLo.startsWith("file://")) { + target = target.substring("file://".length()); + return getLaunchAction(target); // Bare PDF file name? } else if (targetLo.endsWith(".pdf")) { return getGoToPDFAction(target, null, -1, newWindow); @@ -1105,6 +1109,37 @@ } /** + * Creates and returns a launch pdf document action using + * file to create a file spcifiaciton for + * the document/file to be opened with an external application. + * + * @param file the pdf file name + * @return the pdf launch object + */ + private PDFLaunch getLaunchAction(String file) { + getDocument().getProfile().verifyActionAllowed(); + + PDFFileSpec fileSpec = new PDFFileSpec(file); + PDFFileSpec oldSpec = getDocument().findFileSpec(fileSpec); + + if (oldSpec == null) { + getDocument().registerObject(fileSpec); + } else { + fileSpec = oldSpec; + } + PDFLaunch launch = new PDFLaunch(fileSpec); + PDFLaunch oldLaunch = getDocument().findLaunch(launch); + + if (oldLaunch == null) { + getDocument().registerObject(launch); + } else { + launch = oldLaunch; + } + + return launch; + } + + /** * Make an outline object and add it to the given parent * * @param parent the parent PDFOutline object (may be null) Added: xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFLaunch.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFLaunch.java?rev=708012&view=auto ============================================================================== --- xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFLaunch.java (added) +++ xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFLaunch.java Sun Oct 26 09:32:16 2008 @@ -0,0 +1,68 @@ +/* + * 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. + */ +/* $Id$ */ +package org.apache.fop.pdf; + +/** + * This class represents the /Launch action. + */ +public class PDFLaunch extends PDFAction { + + private PDFFileSpec externalFileSpec; + + public PDFLaunch(PDFFileSpec fileSpec) { + this.externalFileSpec = fileSpec; + } + + public String getAction() { + return this.referencePDF(); + } + + public String toPDFString() { + StringBuffer sb = new StringBuffer(64); + sb.append(getObjectID()); + sb.append("<<\n/S /Launch\n/F "); + sb.append(externalFileSpec.referencePDF()); + sb.append(" \n>>\nendobj\n"); + + return sb.toString(); + } + + /** + * Check if this equals another object. + * + * @param obj the object to compare + * @return true if this equals other object + */ + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + + if (obj == null || !(obj instanceof PDFLaunch)) { + return false; + } + + PDFLaunch launch = (PDFLaunch) obj; + + if (!launch.externalFileSpec.referencePDF().equals(externalFileSpec.referencePDF())) { + return false; + } + + return true; + } +} Propchange: xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFLaunch.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: xmlgraphics/fop/trunk/src/java/org/apache/fop/pdf/PDFLaunch.java ------------------------------------------------------------------------------ svn:keywords = Id Modified: xmlgraphics/fop/trunk/status.xml URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/status.xml?rev=708012&r1=708011&r2=708012&view=diff ============================================================================== --- xmlgraphics/fop/trunk/status.xml (original) +++ xmlgraphics/fop/trunk/status.xml Sun Oct 26 09:32:16 2008 @@ -53,6 +53,11 @@ + + Added PDF /Launch action: references to URIs using the file:// protocol will now generate + a /Launch action as opposed to a more general /URI (which doesn't yield the expected result + for this protocol). + Fixed a problem where the BPD or a block area could be wrong if there is a nested, absolutely positioned area (for example a block-container). --------------------------------------------------------------------- To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org