Re: Convert HTML to PDF
Re: Convert HTML to PDF
- Subject: Re: Convert HTML to PDF
- From: Takaaki Naganoya <email@hidden>
- Date: Wed, 13 Sep 2017 17:32:49 +0900
Thanks Shane! I enjoyed your skillful magic with your script.
And…I understand it is very alike with “Offline Web Renderer” script.
—Offline Web renderer AppleScript to one large PDF
http://piyocast.com/as/archives/3684
So the better way is to convert html to pdf directly by using very deep
*webview* with pagenation.
--
Takaaki Naganoya
email@hidden
http://piyocast.com/as/
> 2017/09/13 16:43、Shane Stanley <email@hidden>のメール:
> On 13 Sep 2017, at 2:56 pm, Takaaki Naganoya <email@hidden> wrote:
>>
>> Is there a way to output paginated PDF?
>
> Yes, although it's a little more complex -- you have to set up and run a
> print operation.
>
> use AppleScript version "2.4"
> use scripting additions
> use framework "Foundation"
> use framework "AppKit"
>
> -- classes, constants, and enums used
> property NSAutoPagination : a reference to 0
> property NSClipPagination : a reference to 2
> property NSThread : a reference to current application's NSThread
> property NSPrintJobSavingURL : a reference to current application's
> NSPrintJobSavingURL
> property NSPrintOperation : a reference to current application's
> NSPrintOperation
> property NSPrintSaveJob : a reference to current application's NSPrintSaveJob
> property |NSURL| : a reference to current application's |NSURL|
> property NSString : a reference to current application's NSString
> property NSTextView : a reference to current application's NSTextView
> property NSPrintInfo : a reference to current application's NSPrintInfo
> property NSAttributedString : a reference to current application's
> NSAttributedString
> property NSData : a reference to current application's NSData
> property NSUUID : a reference to current application's NSUUID
> property NSDictionary : a reference to current application's NSDictionary
>
> property bRes : false
>
> set aFile to POSIX path of (choose file of type {"public.html"})
>
> set thePath to NSString's stringWithString:aFile
> set path1 to thePath's stringByDeletingLastPathComponent()
> set theName to NSUUID's UUID()'s UUIDString()
> set path2 to (path1's stringByAppendingPathComponent:theName)'s
> stringByAppendingPathExtension:"pdf"
> set theURL to |NSURL|'s fileURLWithPath:path2
>
> set aStyledText to my htmlToStyledText(aFile)
> my saveStyledTextAsPDF(theURL, aStyledText)
>
> on htmlToStyledText(thePath)
> set theData to NSData's dataWithContentsOfFile:thePath
> set attStr to NSAttributedString's alloc()'s initWithHTML:theData
> documentAttributes:(missing value)
> return attStr
> end htmlToStyledText
>
> on saveStyledTextAsPDF(theURL, aStyledString)
> -- create print info for saving to file
> set printInfo to NSPrintInfo's alloc()'s
> initWithDictionary:(NSDictionary's dictionaryWithObject:theURL
> forKey:(NSPrintJobSavingURL)) -- sets destination
> printInfo's setJobDisposition:NSPrintSaveJob -- save to file job
> printInfo's setHorizontalPagination:NSClipPagination
> printInfo's setVerticalPagination:NSAutoPagination
> -- get page size and margins
> set pageSize to printInfo's paperSize()
> set theLeft to printInfo's leftMargin()
> set theTop to printInfo's topMargin()
> -- make a very deep text view
> set theView to NSTextView's alloc()'s initWithFrame:{origin:{x:0, y:0},
> |size|:{width:pageSize's width, height:3.0E+38}}
> theView's setTextContainerInset:{theLeft, theTop}
> theView's setHorizontallyResizable:false
> -- put in the text
> theView's textStorage()'s setAttributedString:aStyledString
> -- size to fit; must be done on the main thread
> if NSThread's isMainThread() then
> theView's sizeToFit()
> else
> theView's performSelectorOnMainThread:"sizeToFit"
> withObject:(missing value) waitUntilDone:true
> end if
> -- create print operation and run it
> set printOp to NSPrintOperation's printOperationWithView:theView
> printInfo:printInfo
> printOp's setShowsPrintPanel:false
> printOp's setShowsProgressPanel:false
> if NSThread's isMainThread() then
> set my bRes to printOp's runOperation()
> else
> my performSelectorOnMainThread:"runPrintOperation:"
> withObject:printOp waitUntilDone:true
> end if
> end saveStyledTextAsPDF
>
> on runPrintOperation:printOp -- on main thread
> set my bRes to printOp's runOperation()
> end runPrintOperation:
>
> --
> Shane Stanley <email@hidden>
> <www.macosxautomation.com/applescript/apps/>, <latenightsw.com>
>
>
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> AppleScript-Users mailing list (email@hidden)
> Help/Unsubscribe/Update your Subscription:
> Archives: http://lists.apple.com/archives/applescript-users
>
> This email sent to email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
AppleScript-Users mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
Archives: http://lists.apple.com/archives/applescript-users
This email sent to email@hidden