Insert FF (feed form) in text file so that when printing the printer print on a new page accordingly


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Insert FF (feed form) in text file so that when printing the printer print on a new page accordingly
# 1  
Old 01-12-2019
Insert FF (feed form) in text file so that when printing the printer print on a new page accordingly

Hello.
First happy new year to everybody.


I have a script that generate a text file ( /tmp/part_list.txt for example ).
This file can be edited using a kde graphical text editor like kate or kwrite
The file can be printed out from command line or within the text editor using the print option menu.



Code:

echo "" > /tmp/part_list.txt
echo "" > /tmp/part_list.txt
 
for A_DEVICE in $(lsblk --noheadings -o kname) ; do...
...
        CUR_DEVICE="$A_DEVICE"      # A_DEVICE = /dev/sda /dev/sdb /dev/sdc .....  
        gdisk -l "$CUR_DEVICE"  >>  /tmp/part_list.txt  2>&1

done

Now I would like to add the code so that when printing the file "/tmp/part_list.txt" the printer change page after each device
Something like that :



Code:

echo "" > /tmp/part_list.txtecho "" > /tmp/part_list.txt

for A_DEVICE in $(lsblk --noheadings -o kname) ; do...
...
        CUR_DEVICE="$A_DEVICE"      # A_DEVICE = /dev/sda /dev/sdb /dev/sdc .....  
        gdisk -l "$CUR_DEVICE"  >>  /tmp/part_list.txt  2>&1
        echo "some code that printer understand as do FF" >> /tmp/part_list.txt  
done

And then the file "/tmp/part_list.txt" contains some thing like :


Code:
device : /dev/sda

ligne of text
ligne of text
ligne of text
ligne of text
ligne of text
ligne of text
ligne of text
0x0c  or  do FF or .....?
device : /dev/sdb

ligne of text
ligne of text
ligne of text
ligne of text
ligne of text
ligne of text
ligne of text0x0c  or  do FF or .....?
device : /dev/sdc

ligne of text
ligne of text
ligne of text
ligne of text
ligne of text
ligne of text
ligne of text

Any help is welcome.
# 2  
Old 01-12-2019
Notice that such a function is usually located in the printers (or, more precisely, the printer queues) backend and you are - by trying to do what you do - second-guessing the work of it. Chances are this might get filtered out in the processing the printer driver does after you send it to the queue.

Some historical background on where that mattered: you probably know that the line-feed sequence in UNIX is a "linefeed" character, whereas in DOS/Windoze it is a carriage-return plus a linefeed. The reason is: (dot-matrix) printers worked this way, the carriage-return moved the printing head back to the left side and the linefeed move the paper upwards. It was quite like the mechanical and electrical typewriters that preceeded printers. By having this sequence as a end-of-line sequence the makers of DOS could forego the necessity to write a printer driver for their OS. UNIX, on the other hand, had printer drivers and therefore didn't need a two-character sequence. Therefore it had (and has, up to this day) a one-character EOL sequence which is in turn changed to a CR+LF if you print something to one of these old dot-matrix printers with endless paper.

Now, consider what that would do to your print job if you would mess around with the EOL sequence yourself: most probably not what you wanted to have because between your artificially inserted characters and them being processed (and turned into something maybe completely different) by the driver the printer might get confused over the result.

My suggestion is: use a "high-level" document language (i.e. Postscript, TeX, PDF, ....) to create your report. You can easily force form-feeds (or, repectively, their equivalent) within these languages because the all have that. Then use a driver for the respective language (in fact there are even natively-capable Postscript printers) to process your generated file into a correct print job. This way you are save from unknown (and unwanted) side effects and furthermore you are not bound to a specific printer model. All the mentioned languages are quasi-standards and you can easily swap one i.e. Postscript-capable printer for another Postscript-capable printer and the printed result will guaranteed to look the same.

I hope this helps.

bakunin
This User Gave Thanks to bakunin For This Post:
# 3  
Old 01-12-2019
replace the line 'echo some code...'
with
Code:
echo -e "\f"

This User Gave Thanks to jgt For This Post:
# 4  
Old 01-13-2019
If somebody has a better, shorter, cleaner solution tell me.

First create a groff file

Code:
echo "" > /tmp/part_list.groff echo ".nf" >> /tmp/part_list.groff  # NO FILL MODE 
FIRST_PASS="true"

for A_DEVICE in $(lsblk --noheadings -o kname) ; do
... 
...
...
    if [[ -z $FIRST_PASS ]] ; then
           echo ".bp" >> /tmp/part_list.groff  # do a page break if not processing the first device
        else
            FIRST_PASS=""
        fi
         CUR_DEVICE="$A_DEVICE"      # A_DEVICE = /dev/sda /dev/sdb /dev/sdc .....           
         gdisk -l "$CUR_DEVICE"  >>  /tmp/part_list.groff  2>&1  

done
 #
# Finished
#
echo ".pl -3" >> /tmp/part_list.groff  # i do adjustment because groff page length does not match 
                                                 # the page length of my laser printer
                                                 # so I got to much line feed.
echo ".ex" >> /tmp/part_list.groff     # No more to do

2) Build the text file :
Code:
groff -Tascii /tmp/part_list.groff > /tmp/part_list.txt

Any comment is welcome
# 5  
Old 01-13-2019
I'm not at all sure that I follow what you're trying to do, but if you just want to insert a formfeed character before each occurrent of a line starting with the string "device" except the first one, I would be tempted to try a simple awk script:
Code:
awk '/^device/{if(seen++) printf "\f"}1' file

or, more simply, replace your first script:
Code:
echo "" > /tmp/part_list.txt
echo "" > /tmp/part_list.txt
 
for A_DEVICE in $(lsblk --noheadings -o kname) ; do...
...
        CUR_DEVICE="$A_DEVICE"      # A_DEVICE = /dev/sda /dev/sdb /dev/sdc .....  
        gdisk -l "$CUR_DEVICE"  >>  /tmp/part_list.txt  2>&1

done

with:
Code:
device_cnt=0
 
for A_DEVICE in $(lsblk --noheadings -o kname)
do	...
	device_cnt=$((device_cnt + 1))
	if [ $device_cnt -gt 1 ]
	then	printf '\f\n'
	else	echo
	fi
	gdisk -l "$A_DEVICE" 2>&1
done > /tmp/part_list.txt

(assuming, of course, that whatever code you showed as as ... doesn't write anything to standard output).

Last edited by Don Cragun; 01-18-2019 at 08:15 AM..
This User Gave Thanks to Don Cragun For This Post:
# 6  
Old 01-15-2019
Thank you very much
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Print a python script down a list in a text file without printing a lot combinations

In a python script I have 2 files printing side by side on the same line. I want to have 1 of the files to be already displayed at once while the other file print down the list in the file and it still will produce new lines. I want to do it like that to reduce printing a lot of lines and... (0 Replies)
Discussion started by: bigvito19
0 Replies

2. Slackware

Printer won't print but 1 page

OS: Slackwar 13.37 Printer: hpDeskjet 1000 j110 Printer Drivers/Software: HPLIP 3.11.3a (min was 3.10.9) and Cups The printer will print the first of n-pages but from page 2 on it prints the page (or part of it) backs up and starts again down about 0.8 lines and does this repeatedly till the... (2 Replies)
Discussion started by: slak0
2 Replies

3. AIX

AIX Printer Issue: Blank Page Printing.

We have configured Network printers in AIX 6.1. We are facing a Weird problem in Printing. While printing the user is getting a blank page after 2 pages. Please let us know the cause of this issue and ways to rectify it. If this is problem with banner/feeds how to view the default banner... (1 Reply)
Discussion started by: sugan_p
1 Replies

4. Shell Programming and Scripting

print formatted text to the printer

Hello!!! I am using shell script that print some formated text on the screen (example) ======== hello I am ... ======== Is it possible to print this information to the printer exactly as I see it on the screen??? (6 Replies)
Discussion started by: tdev457
6 Replies

5. AIX

Printer delay before final form feed

Hi, I am new to printing with Unix (AIX on HP). I am printing from a COBOL program. On our test system the page prints and does a Form Feed to the next page. This is good. When I release the program to our customer it prints the page but waits 5 or more seconds before doing a page... (11 Replies)
Discussion started by: habler
11 Replies

6. AIX

AIX printer and extra blank page after each print

Guy's I have installed AIX direct Network printer as the below details.... printer1 hp@printer1 hplj-3 (HP-GL/2) Printer is printing fain and clearly but it's printing extra blank page after each print ? What's the couse of this problem ? Pls advice ! (6 Replies)
Discussion started by: ITHelper
6 Replies

7. Shell Programming and Scripting

replace last form feed with line feed

Hi I have a file with lots of line feeds and form feeds (page break). Need to replace last occurrence of form feed (created by - echo "\f" ) in the file with line feed. Please advise how can i achieve this. TIA Prvn (5 Replies)
Discussion started by: prvnrk
5 Replies

8. UNIX for Dummies Questions & Answers

Page feed in Troff

Hi, does anyone knows how to give the page feed command to Printer in troff. Actually I want to implement the functionality where I'll print say 10 pages and I want user to stop printer at 5th page to do manual feed by user .... (2 Replies)
Discussion started by: dpmore
2 Replies

9. UNIX for Dummies Questions & Answers

Disable form feed on a serial printer connected to Sco OpenServer

I connected a serial printer to my scoOpenServer which works great. I was able to disable the banner in the interface of the printer. However i am unable to find the command in the interface to disable the formfeed . Below is a copy of the interface file. Please can anyone instruct me on how to... (0 Replies)
Discussion started by: scoman2
0 Replies

10. UNIX for Dummies Questions & Answers

Form Feed...

Hi, I've a text file that has a formfeed character at the beginning. I want to get rid of this formfeed character using sed. But I don't know how to specify the formfeed character. I've tried \014 (octal for formfeed), \f but still not works. Regards, Johnny (5 Replies)
Discussion started by: johnny_woo
5 Replies
Login or Register to Ask a Question