Getting started with SavaPage: questions and answers

Hello @rijkr

I have two questions:
1 - I’m interested in integrating SavaPage with 1 FreeIPA directory and two Active Directories servers. All of them have different base dn. Is it possible?

2 - I want to configure SavaPage so that users can only print thru it, they will have to type user name and password or pin code to release print jobs. In that case SavaPage is going to be a single point of failure. Is there a way to configure an HA SavaPage cluster?

Thanks in advance

Hi @eabreu

1 - FreeIPA connectivity is on our to do list. If you actually want to use SavaPage + FreeIPA we can implement it, if you help us test it. Please contact us at support@savapage.org so we can discuss details.

SavaPage uses one (1) user source for synchronization. So it is not possible to simultaneously connect to one (1) FreeIPA directory and two (2) AD servers from one (1) SavaPage server instance.

2 - If you want SavaPage to be the only access point for printing, you can put your physical printers in a VLAN that can be accessed by SavaPage server only. In this way users will be forced to print to SavaPage first (with generic PostScript driver, or driverless with e.g. file upload), and after that follow one of the many Print Scenarios from within the SavaPage User Web App. Secure Print Release with userid/password, PIN or NFC is possible. You can optionally use a dedicated Custom Proxy Print Release Station positioned next to a printer.

As clustering is concerned: SavaPage is not designed for multiple concurrent server instances behind a dynamic routing (load balancing) proxy. Just a single SavaPage server instance can be active on a database, and on the file system where user data are persisted. As the database part is concerned, this is due to server-side Java/Hibernate caching of database data: concurrent server instances would probably produce SQL constraint violations on unexpected moments. NFS could be used to share file persistence, but again concurrent file access could give conflicts. Above that, HTTP session management and server push messaging will be flawed. Perhaps a fine grained micro-services approach could solve all these issues, but again SavaPage is not designed that way.

The best you can do is implement a static routing scheme where a proxy front-end routes to a single SavaPage server, either being the Primary SavaPage Server or a Fall-back SavaPage Server. Both server instances need to have identical configuration and connect to the same external database (preferably PostgreSQL) and same external user file system. You can use NFS to share the user file system and configure Alternative File Locations in SavaPage accordingly. You can consult this Technical Note where NFS sharing is explained in more detail.

Hi @rijkr and thanks for your quick answer.

Regarding the multiple directories integration with different base dn. I was thinking If I install multiple SavaPage server instances (one for each base dn) and I redirect the request based on DNS using an Apache web proxy. That part could work, but the problem would again arise on the printer release station. Any idea on this approach?

Hi @eabreu

Indeed, put a Release Station (kiosk) device next to each target printer. In case multiple SavaPage server instances share the same target printer, add a Release Station Terminal definition at each server instance for the station device IP address and assign the related proxy printer as Single Printer Target.

Assuming each SavaPage User Web App instance has a unique URL, accessible from the Terminal device, you can inject an HTML snippet into the User Web App login screen of each server instance with (graphic) links to all of the SavaPage User Web App server instances.

Well, as a user arrives at the Release Station they must first click on the picture in the Login screen to select their domain (if not already selected). This will load the right User Web App instance, so they can authenticate with their domain credentials. You can optionally attach an NFC card Reader as alternative authentication. Tip: CSS customize the Web Apps of each server instance with a distinguishable look-and-feel.

N.B. set a value for Idle Seconds before auto logout. This will make the Web App return to the Login screen after x idle seconds, in case a user forgets to log out after printing is done.

The printer next to the terminal will be the only printer available in the User Web App. Currently, users must create and execute the print job in the User Web App on the Release Station on the spot. If other scenarios are required, we need to discuss how SavaPage could be adapted to accommodate that.

Dear Sir

I work at a school in Belgium. I’m trying to replace the in-house developed printing solution. It’s been made to fully comply with the needs of the school. The current solution creates a cover page for every print-ticket with the name of the teacher and the name of the group(class). How can I do this with Savapage?

With kind regards
Sander Loones

Hello @sander.loones. You might want to take a look to Letterheads, in the user manual search for “3.6. Letterheads” (Chapter 3, section 6) . That could fit your needs.

Hi @sander.loones , welcome to SavaPage. Glad you joined!

Have a look at the org.savapage-job-sheets IPP attribute:

“This attribute determines which Job start/end sheet(s), if any, must be printed with a Job. Contrary to the IPP job-sheets definition, where sheets are part of the job, org.savapage-job-sheets are printed as a separate job. In this way sheets can be printed from a different media-source with distinctive org.savapage-job-sheets-media and media-color. A job sheet is a single monochrome page with job detail information.”

The job sheet indeed shows the name of the teacher and the name of the group/class in a so-called Delegated Print scenario.

Do a global search for job-sheet in the most recent "SavaPage *-rc • User Manual • PDF" version from the Download page. You will find all the information needed. It is an advanced topic that needs careful configuration. If you have any questions, don’t hesitate to ask.

Hello @rijkr

I just finished implementing authentication using HID Proximity Card II. It works nice. There is a couple of things I have still to tune but it’s reading fine and the printer releases when the card is swiped. The card reader I used is HID Omnikey 5025-CL. Once everything will be set I’m gonna document the whole process. Thank you.

@eabreu Hi Eric. Great that you got HID Proximity Card II working! I’m looking forward to the details. Can you please post your findings as a reply to NFC Authentication: questions and answers

Dear Sir

Thank you for putting me in the right direction. I was looking for the wrong terminology. I found an error in the documentation. …/docs/manual/app-ppd-ext-job-ticket.html: *job-sheet-start --> *job-start-sheet. It took a while before I found the error.

I have yet another question. How can I let my users choose the tray for the job-start-sheet and could I name the tray to a color?

I’ve found how I can choose the papersize but cant seem to find how to choose the tray.

With kind regards
Sander

@sander.loones Hi Sander, thanks for pointing out the error in the documentation! Indeed, “job-start-sheet” is the right value for the “org.savapage-job-sheets” IPP keyword (Manual is adapted).

The Job Ticket Operator (not the Job Ticket Creator) selects the input tray for the job sheet at the redirect printer. See Job Ticket Print. An extra option (marked with a “label” icon) appears in case a job-sheet is selected (I still have to complete the manual to reflect this case.).

Yes, you can name a tray anything you want, as long as you assign it a paper size. See the Media Sources section in the User Manual. Also note that at the bottom of the section it reads:

" When the printer is member of at least one Job Ticket Printer Group, and can therefore act as redirect printer, a media-source select menu for Job Sheets is shown. Multiple media-sources with assigned media-size can be selected. When this printer is selected as redirect printer, the first Jobs Sheets media-source that matches the requested job-sheet media size will be selected as default."

@sander.loones Some ideas for setting Job Ticket job-sheets in a .ppde file.

# start-sheet: the '+' prefix makes the 'none' option
# available for Job Ticket Operator only.
*SPJobTicket/Set: org.savapage-job-sheets \
  +none \
  *job-start-sheet

# A4 and A3 sheets
*SPJobTicket/Set: org.savapage-job-sheets-media \
  *iso_a4_210x297mm \
   iso_a3_297x420mm

# A4 sheet cost
*SPJobTicket/Set/Cost: 0.0550 banner-A4 \
   org.savapage-job-sheets/!none \
   org.savapage-job-sheets-media/iso_a4_210x297mm

# A3 sheet cost
*SPJobTicket/Set/Cost: 0.1100 banner-A3 \
   org.savapage-job-sheets/!none \
   org.savapage-job-sheets-media/iso_a3_297x420mm
   
# Force A4 sheet for A4 media   
*SPConstraint: job-sheets-media-a4 \
   media/iso_a4_210x297mm \
   org.savapage-job-sheets-media/!iso_a4_210x297mm

# Force A3 sheet for A3 media   
*SPConstraint: job-sheets-media-a3 \
   media/iso_a3_297x420mm \
   org.savapage-job-sheets-media/!iso_a3_297x420mm

Dear Sir

Thanks for the help. I’ve found a rather dirty solution for forcing the start-sheet to be printed from another tray. I’ve defined a tray to be a US-letter source, and made the start-sheet to be printed as US-letter. This seems to work. For now I would only need one seperate tray for the start-sheet so I could hide this “choice” with css or Jquery.

Now I’m working on coverpages. I would like the user to choose between multiple trays(colored pages). But I don’t exactly know how this would work? When I choose “int.printfront” it lookes nice in the form but the ticket-operator has to do the print manually. When I look into more documentation I find “ext.printfront-1”. This is externally defined, but where and how? And can it be used without a manual intervention of the operator?

With kind regards
Sander Loones

@sander.loones Good to see that you are making progress. However, I am not sure if I fully understand your “dirty solution”. With cover pages we come to the field of advanced configuration and your specific requirements. I propose that we continue our dialogue by e-mail and report final conclusions back into this post. Can you please contact me at support@savapage.org?

Hello @rijkr

I’m trying to map my printer attributes to SAVAPAGE.ppd postscript driver. When I install the HP MFP M775 from one client machine I can see “two sided” option, and Trays from 1 to 5 to pick. When I install the SavaPage print server those options are only availables from the WebApp. I modified the original SAVAPAGE.ppd file and had the “two-sided” option to show up but the print server does not understand when I send the two sided job the printer releases two sheets instead of one. Do you know a solution for this? Thank you in advance.

Hi @eabreu

SAVAPAGE.ppd is meant to create a workstation printer that prints to SavaPage: see SavaPage Printer Installation. The result of any SavaPage print is visible in the User Web App. This makes the printer a “virtual” printer, since the result is not printed on paper, but captured in a PDF document held in SavaPage.

Install HP Linux Printing and Imaging System (HPLIP) on the SavaPage Server:

sudo apt install hplip

This package contains the PPD for HP MFP M775 printer. Use this PPD to create the M775 printer in CUPS on the SavaPage Server. SavaPage will recognize this as Proxy Printer: press the “Synchronize” button in the Proxy Printer List to make it visible.

Printing to paper takes two steps:

  1. Print to SavaPage with the SavaPage printer.
  2. Open User Web App, inspect print preview and select Proxy Printer to print it.

Note: To make all PPD options of the MFP M775 visible in the Printer Settings dialog, you might need to Map PPD to IPP attributes.

Greetings!

I hope someone can help with an issue I ran into while configuring my Savapage server (new instal). So far, the installation and wiki have been very helpful and I got everything installed and savapage runs great. However, I hit a snag in switching it over to use a PostgreSQL DB. I follow all the instructions to the letter (stop services, backup using the savapage-db tool, then import using said tool into the already created postgre DB (“savapagedb”). When I execute the import command, I get “ERROR - ERROR: relation “tbl_config” does not exist Position: 311” I have googled this for a while and nothing related comes up. I’ve triple checked my database connection info in server.properties, I’ve gone back to using internal DB and backing up again, I’ve deleted the “savapagedb” and re-created it, I’ve even removed the “savapage” dedicated PostgreSQL user and re-created it. I’m stuck. Any advice greatly appreciated!

Hi @MattM,
Welcome to SavaPage! Your case probably has a special factor that SavaPage does not expect. I have to investigate. Does savapage-db --db-init execute without errors?

@eabreu Hi Eric, Thanks for reporting. I made a fix that hopefully solves your issue. See details here. The fix is implemented in latest SavaPage 1.2.0-rc snapshot. Please let me know if this indeed solves your problem.

Hi @rijkr. Rendering pdf on the user WebApp works in Ubuntu but not in Centos 7. Centos 7 installs poppler version 0.26.5 which I think does not support the pdftocairo syntax used. This is tail -f output for server.log:

2020-02-14 16:35:00,079  WARN ImageServer:111 - image [/opt/savapage/server/tmp/savapage/eabreu_d3624ac3-7f2e-4a52-a092-965bf0f87fcd.pdf_0_1581716099994_1_node012c4n6sstu8dcrwmeryx6r8b61.png] could not be created. [jetty-threadpool-31]
2020-02-14 16:35:00,085 ERROR OutputProducer:295 - pdftocairo -png -r 24 -f 1 -l 1 -singlefile "/opt/savapage/server/data/internal/safepages/2/5/eabreu/d3624ac3-7f2e-4a52-a092-965bf0f87fcd.pdf" - > "/opt/savapage/server/tmp/savapage/eabreu_d3624ac3-7f2e-4a52-a092-965bf0f87fcd.pdf_0_1581716099991_0_node012c4n6sstu8dcrwmeryx6r8b61.png" [jetty-threadpool-16]
2020-02-14 16:35:00,100 ERROR OutputProducer:296 - Error opening output file fd://0.png [jetty-threadpool-16]

I ran the previous command without the middle hyphen and it converted fine:

pdftocairo -png -r 72 -f 2 -l 2 -singlefile "/opt/savapage/server/data/internal/safepages/2/5/eabreu/d3624ac3-7f2e-4a52-a092-965bf0f87fcd.pdf" > "/opt/savapage/server/tmp/savapage/eabreu_d3624ac3-7f2e-4a52-a092-965bf0f87fcd.pdf_1_1581716106220_1_node012c4n6sstu8dcrwmeryx6r8b61.png"

Regarding the JetDirect/RAW printing it does not work with Microsoft PS Class Driver either. I tried with the Xerox Global Print Driver PS and this time it printed. With the Microsoft PS Class Driver output this message:

@PJL ENTER LANGUAGE=POSTSCRIPT
%!PS-Adobe-3.0
%%Title: MSxpsPS
%%Creator: MSxpsPS
%%CreationDate: Today
%%Pages: (atend)
%%PageOrder: Ascend
%%LanguageLevel: 3
%%DocumentData: Clean7Bit
%%EndComments
%%BeginProlog [SocketServerThread]
2020-02-14 17:21:45,023 ERROR RawPrintServer:228 - IOException: IP Print job from [192.168.122.50] has no [%%Title: ] and/or [%%For: ] (IP Print from ) [SocketServerThread]
java.io.IOException: IP Print job from [192.168.122.50] has no [%%Title: ] and/or [%%For: ]
	at org.savapage.server.raw.RawPrintServer.readAndPrint(RawPrintServer.java:531)
	at org.savapage.server.raw.RawPrintServer.access$000(RawPrintServer.java:78)
	at org.savapage.server.raw.RawPrintServer$SocketServerThread.run(RawPrintServer.java:200)
2020-02-14 17:23:28,002  WARN RawPrintServer:211 - No IP Print data received from [192.168.122.50] within [5000] msec. [SocketServerThread]

Thanks in advance.