Using Ruby, Rename PDF with text from input PDF file
I have this script running pretty well thanks to the great support on this site. It currently opens a PDF, searches for a text string, and then saves the PDF with the string as the file name.
For a different project I need to check the string matches the original filename, so my thoughts are to read the string and then append it to the original filename like this: Originalname_Foundstring.pdf - then I can take over and compare the first and second parts of the filename.
This script searches for a string beginning "1000…." then saves the file with a new name based on the string.
How can I grab the input filename and then append the string like this: Originalname_Foundstring.pdf?
(I am only a beginner in Applescript and even more clueless in Ruby script).
_main()
on _main()
script o
property aa : choose file with prompt ("Choose PDF Files.") of type {"com.adobe.pdf"} ¬
default location (path to desktop) with multiple selections allowed
set my aa's beginning to choose folder with prompt ("Choose Destination Folder.") ¬
default location (path to desktop)
set args to ""
repeat with a in my aa
set args to args & a's POSIX path's quoted form & space
end repeat
considering numeric strings
if (system info)'s system version < "10.9" then
set ruby to "/usr/bin/ruby"
else
set ruby to "/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby"
end if
end considering
do shell script ruby & " <<'EOF' - " & args & "
require 'osx/cocoa'
include OSX
require_framework 'PDFKit'
outdir = ARGV.shift.chomp('/')
ARGV.select {|f| f =~ /\\.pdf$/i }.each do |f|
url = NSURL.fileURLWithPath(f)
doc = PDFDocument.alloc.initWithURL(url)
path = doc.documentURL.path
pcnt = doc.pageCount
(0 .. (pcnt - 1)).each do |i|
page = doc.pageAtIndex(i)
page.string.to_s =~ /1000\\S*/
name = $&
unless name
puts \"no matching string in page #{i + 1} of #{path}\"
next # ignore this page
end
newname = name[1..-1]
doc1 = PDFDocument.alloc.initWithData(page.dataRepresentation) # doc for this page
unless doc1.writeToFile(\"#{outdir}/#{newname}.pdf\")
puts \"failed to save page #{i + 1} of #{path}\"
end
end
end
EOF"
end script
tell o to run
end _main