REBOL [ Title: "Print labels" Purpose: {Provide functions used to put labels on paper.} ] ;; [---------------------------------------------------------------------------] ;; [ This module provides functions for emitting four-line labels into an ] ;; [ html file in such a way that if you print the html page you will get ] ;; [ a printout that can be put onto Avery 5160 labels. ] ;; [ There are some constraints. ] ;; [ The first page of labels comes out fine, but following pages have to ] ;; [ be fussed with. It appears to work if you do a print preview and ] ;; [ shorten up the bottom of the first page. That seems to fix up the ] ;; [ alignment of a second page. ] ;; [ You have to set up printing preferences to take out any headers, footers, ] ;; [ page numbers, and any other ornamentation. ] ;; [ It appears that the person who figured this out went through a bit of ] ;; [ trial and error and never did get it just right. ] ;; [ Reference: ] ;; [ https://boulderinformationservices.wordpress.com/ ] ;; [ 2011/08/25/print-avery-labels-using-css-and-html/ ] ;; [ ] ;; [ So how does this work? ] ;; [ Define the body of the html page as being 8.5 inches wide. ] ;; [ Define a class called "label" that is defined as the appropriate size. ] ;; [ For each label, emit to the html the four lines of data as a label ] ;; [ class. Because the label size is defined, and the page width is ] ;; [ restricted, the labels will go on the page left to right and will ] ;; [ overflow to the next line every three labels. This makes "printing" ] ;; [ one label very simple and it makes printing many labels a matter of ] ;; [ just printing one after the other without regard to fussing with things ] ;; [ like counting every three labels for a line break and so on. ] ;; [ ] ;; [ If a person did have to do lots of labels, and the first page always ] ;; [ comes out aligned correctly, one could modify this module to emit ] ;; [ several html files, with each html file being one page of labels. ] ;; [ Yes, that is not a pretty solution, but remember that neither REBOL ] ;; [ not html is designed for page layouts on paper. Sometimes we must ] ;; [ work with what we have and make the best of it. ] ;; [---------------------------------------------------------------------------] LBL: make object! [ FILE-ID: %LABELS.html LABELS: copy "" HEADING-EMITTED: false HTML-START: rejoin [ "" newline "" newline "" newline "" newline "" newline ] HTML-LAB: rejoin [ {
} "%%LINE1%%
" "%%LINE2%%
" "%%LINE3%%
" "%%LINE4%%
" "
" ] HTML-END: {} CLEAR-LABELS: does [ LABELS: copy "" HEADING-EMITTED: false ] CLOSE-LABELS: does [ append LABELS HTML-END write FILE-ID LABELS browse FILE-ID ] EMIT-LABEL: func [ LINE1 LINE2 LINE3 LINE4 ] [ if not HEADING-EMITTED [ append LABELS HTML-START HEADING-EMITTED: true ] WS-LAB: copy HTML-LAB replace WS-LAB "%%LINE1%%" LINE1 replace WS-LAB "%%LINE2%%" LINE2 replace WS-LAB "%%LINE3%%" LINE3 replace WS-LAB "%%LINE4%%" LINE4 append LABELS WS-LAB append LABELS newline ] ] ;;Uncomment to test ;LBL/EMIT-LABEL "Adam Adamson" "1800 1st St" "Boston MA 00000" "USA" ;LBL/EMIT-LABEL "Ben Braddock" "1800 1st St" "Boston MA 00000" "USA" ;LBL/EMIT-LABEL "Charles Carlson" "1800 1st St" "Boston MA 00000" "USA" ;LBL/EMIT-LABEL "Donald Davis" "1800 1st St" "Boston MA 00000" "USA" ;LBL/EMIT-LABEL "Everett Evenson" "1800 1st St" "Boston MA 00000" "USA" ;LBL/EMIT-LABEL "Francis Fisk" "1800 1st St" "Boston MA 00000" "USA" ;LBL/EMIT-LABEL "Gerald George" "1800 1st St" "Boston MA 00000" "USA" ;LBL/CLOSE-LABELS