Print to PDF?

François Chaplais francois.chaplais at mines-paristech.fr
Fri Aug 7 08:08:05 EDT 2009


Le 7 août 09 à 00:40, Richmond Mathewson a écrit :

> Peter Alcibiades wrote:
>> Richmond, don't you want cups-pdf if its Ubuntu?  Its real simple.   
>> Just
>> gives you a virtual printer which is a file.  Or is there something  
>> else?
>>
>> Peter
>>
>> Richmond Mathewson-2 wrote:
>>
>>> Print to PDF?
>>>
>>> I think I am reinventing the wheel . . .
>>>
>>> advice welcomed.
>>> _______________________________________________
>>>
>>>
> I know how to produce pdf files from a 'regular' Mac or Linux
> program . . . come on, Peter, give me a wee bit of credit . . .    :)
>
> But I should like to have a universal method whereby I can print
> directly from a text field in a RunRev stack/standalone to PDF
> regardless of the platform the stack is running on.
>
> For instance:
>
> put field "X" into URL "file:test.pdf"
>
> [which, bye-the-bye, produces a text file with the suffix .pdf]
>
> which ACTUALLY produces a PDF file.
>
> or:
>
> open file "test.pdf" for write
> write field "X" to file "test.pdf"
>
> [which, bye-the-bye, also produces a text file with the suffix .pdf]
>
> as one can EXPORT images as PNG, JPEG, GIF and so on, it would be
> lovely if one could do something of the sort with text files:
>
> write field "X" to file "test.pdf" as PDF
>
> ---------------------------------
> Imagine a RunRev stack that can cope with the complexities of
> producing really decent texts using highly complex writing systems
> such as those used in the Indian subcontinent; now, with unicode
> and so on, that is perfectly reasonable, and that sort of program
> can pump out html files with the end result.
>
> BUT . . .
>
> suppose, owing to the complexity of that sort of writing system,  
> coupled
> with the fact that the unicode standard has not got designated slots
> for all the written forms, the producer of the RunRev stack has had  
> to produce
> his/her own, non-standard unicode font to cope with those problems.
>
> The end result should produce PDF files (that embed the special  
> font) as
> there is a very slim chance that an end-user/reader of such texts  
> would have
> that specialist font on their system.

Hi Richmond
The solution I am currently implementing is an export of the htmlText  
of a  field to a LaTeX (text) file and then using the shell command
"pdflatex" && tFilePath to ouput pdf. It does not do the actual  
printing.
There is also XeTeX which is a variant of TeX which implements support  
for unicode input and AAT or OT fonts. It has been recently ported to  
Windows and Linux.
Use of a LaTeX package enables creates hyperlinks and bookmarks int  
the pdf output.
GUI applications are also available. All of this is freeware and  
actively maintained. Resources are
general: http://www.tug.org/texlive/acquire.html
mac: http://www.tug.org/mactex/

here is a sample (temporary) code I use for experimentation. It  
collects several fields of a card (from a dictionary stack) to produce  
corresponding LaTeX code

-- TeX handlers and functions
function html2TeX theText
    replace "<p>" with empty in theText
    replace "</p>" with cr & cr in theText
    replace "<b>" with "{\bf " in theText
    replace "</b>" with "}" in theText
    replace "<i>" with "{\em " in theText
    replace "</i>" with "}" in theText
    -- special characters
    replace """ with quote in theText
    replace "	" with comma in theText
    replace "&" with backslash & "&" in theText
-- here I get rid of unsupported tags
    replace "<" with tab & "<" in theText
    replace ">" with ">" & tab in theText
     set the itemdelimiter to tab
    put the number of items of theText into n
    repeat with i = n down  to 1
       get item i of theText
       if char 1 of it is "<" then
          delete item i of theText
       end if
    end repeat
    replace tab with empty in theText
    -- deal now with < and >
    replace "<" with "$<$" in theText
    replace ">" with "$>$" in theText
    --   clean up cr's
    put the number of lines of theText into n
    repeat with i = n down  to 2
       get line i of theText
       if it is empty and line (i-1) of theText is empty then
          delete line i of theText
       end if
    end repeat
    return theText
end html2TeX

-- collect fields. Entries are from the rev's dictionary

function card2TeX theCard
    goCard theCard
    put 1 into n
    put backslash & "section{" & fld "name" & "}" into line n of theText
    put backslash & "label{" & the short name of this card & "}" after  
line n of theText
    add 1 to n
    put backslash & "paragraph{Type}" into line n of theText
    add 1 to n
    put fld "type" into line n of theText
    add 1 to n
    put backslash & "paragraph{History}" into line n of theText
    add 1 to n
    put "Introduced in version" && fld "introduced" into line n of  
theText
    get fld "changed"
    if it is not empty then
       put comma && "changed in version" && it after line n of theText
    end if
    get fld "removed"
    if it is not empty then
       put comma && "removed in version" && it after line n of theText
    end if
    put "." after line n of theText
    add 1 to n
    put backslash & "paragraph{Platforms}" into line n of theText
    add 1 to n
    put empty into line n of theText
    get fld "macos"
    if it is true then
       put "Mac classic, " after line n of theText
    end if
    get fld "osx"
    if it is true then
       put "Mac OS X, " after line n of theText
    end if
    get fld "win32"
    if it is true then
       put "Windows, " after line n of theText
    end if
    get fld "unix"
    if it is true then
       put "Linux, " after line n of theText
    end if
    delete last char of line n of theText
    delete last char of line n of theText
    put "." after line n of theText
    put addTeXpar(theText,"Summary","summary") into theText
    put addTeXpar(theText,"Syntax","syntax") into theText
    put addTeXpar(theText,"Description","description") into theText
    put addTeXpar(theText,"Example","example") into theText
    put addTeXpar(theText,"Synonyms","synonyms") into theText
       put addTeXpar(theText,"Related","related") into theText
    put addTeXpar(theText,"Synonyms","synonyms") into theText
    put addTeXpar(theText,"Categories","categories") into theText --  
useless?
    return theText
end card2TeX

-- handle sectioning
function addTeXpar theText,theTitle,theField
    put the number of lines of theText into n
    add 1 to n
    put backslash & "subsection{" & theTitle &"}" into line n of theText
    add 1 to n
    get the htmlText of fld theField
    if theField is in "syntax,example,related" then
       get "{\tt " & it & "}"
    end if
     replace comma with comma & space in it
    put html2TeX(it) into line n of theText
    return theText
end addTeXpar

cheers
	François




More information about the use-livecode mailing list