git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1862597 13f79535-47bb-0310-9956-ffa450edef68tags/fop-2_4
@@ -35,5 +35,14 @@ public abstract class PDFAction extends PDFObject { | |||
*/ | |||
public abstract String getAction(); | |||
protected String encodeScript(String text) { | |||
if (getDocument() != null && getDocumentSafely().isEncryptionActive()) { | |||
final byte[] buf = PDFText.encode(text); | |||
byte[] enc = getDocument().getEncryption().encrypt(buf, this); | |||
return PDFText.toHex(enc, true); | |||
} else { | |||
return "(" + text + ")"; | |||
} | |||
} | |||
} |
@@ -43,12 +43,11 @@ public class PDFJavaScriptLaunchAction extends PDFAction { | |||
/** {@inheritDoc} */ | |||
public String toPDFString() { | |||
StringBuffer sb = new StringBuffer(64); | |||
sb.append("<<\n/S /JavaScript\n/JS ("); | |||
sb.append(this.script); | |||
sb.append(")\n>>"); | |||
sb.append("<<\n/S /JavaScript\n/JS "); | |||
sb.append(encodeScript(this.script)); | |||
sb.append("\n>>"); | |||
return sb.toString(); | |||
} | |||
/** {@inheritDoc} */ | |||
protected boolean contentEquals(PDFObject obj) { | |||
if (this == obj) { |
@@ -49,7 +49,7 @@ public class PDFUri extends PDFAction { | |||
} | |||
private String getDictString() { | |||
return "<< /URI " + encodeURI(uri) + "\n/S /URI >>"; | |||
return "<< /URI " + encodeScript(uri) + "\n/S /URI >>"; | |||
} | |||
/** {@inheritDoc} */ | |||
@@ -57,14 +57,4 @@ public class PDFUri extends PDFAction { | |||
//TODO Convert this class into a dictionary | |||
return getDictString(); | |||
} | |||
private String encodeURI(String text) { | |||
if (getDocument() != null && getDocumentSafely().isEncryptionActive()) { | |||
final byte[] buf = PDFText.encode(text); | |||
byte[] enc = getDocument().getEncryption().encrypt(buf, this); | |||
return PDFText.toHex(enc, true); | |||
} else { | |||
return "(" + text + ")"; | |||
} | |||
} | |||
} |
@@ -0,0 +1,43 @@ | |||
/* | |||
* 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.fop.pdf; | |||
import org.junit.Test; | |||
import static org.junit.Assert.assertFalse; | |||
import static org.junit.Assert.assertTrue; | |||
public class PDFJavaScriptLaunchActionTestCase { | |||
@Test | |||
public void testToPDFStringShouldEncrypt() { | |||
String jsScript = "this.exportDataObject({cName:\"some.pdf\", nLaunch:2});"; | |||
PDFJavaScriptLaunchAction action = new PDFJavaScriptLaunchAction(jsScript); | |||
PDFDocument document = new PDFDocument("<test />"); | |||
document.setEncryption(new PDFEncryptionParams(null, null, false, | |||
true, false, true, true)); | |||
action.setDocument(document); | |||
action.setObjectNumber(1); | |||
String pdfString = action.toPDFString(); | |||
assertTrue(pdfString.startsWith("<<\n/S /JavaScript\n/JS <")); | |||
assertFalse(pdfString.contains(jsScript)); | |||
assertTrue(pdfString.endsWith(">\n>>")); | |||
} | |||
} |