修正したlittlebirdy
/usr/local/bin/littlebirdy
#!/bin/bash
set -e
# Copyright (c) 2012 Jake Petroules. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# In case Ghostscript resides in the current directory
PATH=.:$PATH
export PATH
# Script physical directory
cd $(dirname "$0") && SCRIPTDIR=$(pwd) && cd - > /dev/null
# Paths and filenames
CFG="$SCRIPTDIR/littlebirdy.ini"
LOG="$SCRIPTDIR/littlebirdy.log"
UNLOCKED_DIR="/tmp/littlebirdy"
OUT_DIR="./unlocked"
# If no arguments were supplied, show the usage
if [[ $# < 1 ]] ; then
echo "Usage: $0 file1 file2 file3 ..."
exit
fi
# Make sure Ghostscript exists... for Windows it'd be gswin32c
#if [ ! -f gs ] && [ ! $(which gs) ] ; then
# echo "Ghostscript is missing!"
# exit -1
#fi
# Read a list of all possible directories containing fonts, from our font config file
# Windows would need %WINDIR%/Fonts
FONTPATH=`cat "$CFG" | tr "\\n" ":"`
# Process the files
for f in "$@" ; do
if [ ! -f "$f" ] ; then
echo "File not found: $f"
exit -1
fi
echo -n "Enter the PDF Document Open Password for $f: "
read PASSWORD
# A temporary file to save the unlocked PDF to
mkdir -p $UNLOCKED_DIR
UNLOCKED_PATH="$UNLOCKED_DIR/$(basename $0).$RANDOM.$$"
# Run Ghostscript and append its output to the log file
/usr/local/bin/gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sFONTPATH="$FONTPATH" \
-sPDFPassword="$PASSWORD" -dPDFSettings=/prepress -dPassThroughJPEGImages=true \
-sOutputFile="$UNLOCKED_PATH" "$f" >> "$LOG"
# Move the unlocked PDF from the temporary file to the output path
if [ -f "$UNLOCKED_PATH" ] ; then
mkdir -p "$OUT_DIR"
mv "$UNLOCKED_PATH" "$OUT_DIR/$(basename $f)"
echo "Unlocked PDF saved to $OUT_DIR/$(basename $f)"
fi
doneAutomatorの設定
Unlock_Unprotected_PDF.workflow (Quick Action)

AppleScriptの中身
tell application "System Events"
tell process "Preview"
set thefile to value of attribute "AXDocument" of window 1
end tell
end tell
-- display dialog "my variable: " & thefile
-- display dialog quoted form of replaceText(thefile, "%20", space)
set thefile to replaceText(thefile, "%20", space)
set thefile to replaceText(thefile, "File://", "")
-- set newFile to POSIX file thefile
set thefile to do shell script "/usr/local/bin/php -r 'echo urldecode(\"" & thefile & "\");'"
do shell script "/usr/local/bin/littlebirdy-nopassword " & thefile
tell application "Preview" to close window 1
do shell script "open " & thefile
to replaceText(someText, oldItem, newItem)
(*
replace all occurances of oldItem with newItem
parameters - someText [text]: the text containing the item(s) to change
oldItem [text, list of text]: the item to be replaced
newItem [text]: the item to replace with
returns [text]: the text with the item(s) replaced
*)
set {tempTID, AppleScript's text item delimiters} to {AppleScript's text item delimiters, oldItem}
try
set {itemList, AppleScript's text item delimiters} to {text items of someText, newItem}
set {someText, AppleScript's text item delimiters} to {itemList as text, tempTID}
on error errorMessage number errorNumber -- oops
set AppleScript's text item delimiters to tempTID
error errorMessage number errorNumber -- pass it on
end try
return someText
end replaceTextKeyboard shortcutの設定
