Getting started with SavaPage: questions and answers

@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.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 \

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

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

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

# Force A3 sheet for A3 media   
*SPConstraint: job-sheets-media-a3 \
   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

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.


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, 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:

%%Title: MSxpsPS
%%Creator: MSxpsPS
%%CreationDate: Today
%%Pages: (atend)
%%PageOrder: Ascend
%%LanguageLevel: 3
%%DocumentData: Clean7Bit
%%BeginProlog [SocketServerThread]
2020-02-14 17:21:45,023 ERROR RawPrintServer:228 - IOException: IP Print job from [] has no [%%Title: ] and/or [%%For: ] (IP Print from ) [SocketServerThread] IP Print job from [] has no [%%Title: ] and/or [%%For: ]
	at org.savapage.server.raw.RawPrintServer.readAndPrint(
	at org.savapage.server.raw.RawPrintServer.access$000(
	at org.savapage.server.raw.RawPrintServer$
2020-02-14 17:23:28,002  WARN RawPrintServer:211 - No IP Print data received from [] within [5000] msec. [SocketServerThread]

Thanks in advance.

@eabreu Hi Eric, “Microsoft PS Class Driver” does not work in JetDirect context because the driver does not pass the requesting user name (%%For: ) in the PostScript header. As you already found out other drivers do. In IPP context the “requesting-user-name” is always present because it is enforced by the IPP standard.

I tested pdftocairo 0.26.5 on centos-release-7-7.1908.0.el7 and to my surprise indeed found that …

$ pdftocairo -png -r 24 -f 1 -l 1 -singlefile "a.pdf" - > "a.png"
Error opening output file fd://0.png

… although the manpage explains that:

If the output-file is “-” , the output file will be written to stdout.

This statement executes okay …

pdftocairo -png -r 24 -f 1 -l 1 -singlefile "a.pdf" "a.png"

… but file a.png.png is created instead of the requested file a.png

I don’t know what to make of this. pdftocairo 0.26.5 behaves very odd compared to other versions that I tested. i.e. 0.41.0 (Ubuntu 16.04) and 0.62.0 (Ubuntu 18.04). Do you have any idea what is wrong?

Hello :slightly_smiling_face:

I’ve recently installed SavaPage on my server, but it seems that the printer somehow doesn’t come to a ready state (it keeps saying “configuration needed” and it doesn’t appear in the user-side menu).

The documentation says that I should configure the media source for this printer, however, when I go into the settings menu, it doesn’t seem like I could add anything there.

Is there something else I need to configure first to make this work? Thanks!

Hello @kaleceres, welcome to SavaPage!

Do you see that at least one (1) Media Source is present? See this section in the User Manual.

If no media sources are present it is probably the PPD used in CUPS that does not provide media source information through the IPP/CUPS interface. This is a known issue and can be solved by making a mapping of the PPD option to the IPP “media-source” attribute.

You can read all about it in PPD Extensions appendix of the User Manual. And take a look at the media-source section.

If you like you can send your PPD to, so I can have a look and make the mapping for you.

Thanks @kaleceres, I received your PPD file for Xerox Phaser 6000B. Looking at the specs, this is a simple desktop usb color printer with a single multi-purpose input tray, capable of one-sided printing. The tray is implicit and not identified as such in the PPD. When you grep the PPD for "*OpenUI *", you see all possible print options. I picked the *XRDocumentType option to map the IPP media-source. Assuming you use SavaPage to share your printer for just plain paper A4 print jobs, you can create /opt/savapage/server/custom/cups/Xerox_Phaser_6000B.ppde with this content:

*XRDocumentType media-source
*XRDocumentType *Normal main

*Collate sheet-collate
*Collate *True collated
*Collate False uncollated

*XRColorMode print-color-mode
*XRColorMode *Black monochrome 
*XRColorMode Color  color

Select the Xerox_Phaser_6000B.ppde file as “PPD Extension File” in your Edit Proxy Printer dialog and assign A4 media size to Media Source "main".

If you like you can enforce or override PPD defaults with this additional .ppde snippet (see Generic PPD Rules in the User Manual).

*SPExtra/media-source/main: main-print \
   *MediaType/Stationary \
   *XRTurnPage/False \
   *XRSkip/False \
   *XRTonerSaver/False \
   *XRTrapping/False \
   *XREdgeEnhance/False \
   *XRDigitalFilter/Off \

Please let me know if this works.

@rijkr it works now, thanks so much for your help!

Also, on the side, would you happen to know whether SavaPage supports StartTLS with Microsoft Active Directory (on port 389) or does it only support explicit TLS on port 636?

@kaleceres Good to hear it works! As LDAP StartTLS is concerned: triggered by your question, I’m working on it right now. I will contact you offline hoping we can do some test / development iterations to complete the implementation and share the conclusions here.

Having a docker image available of SavaPage would make it so much easier to quickly try out the application.
I (like many other people probably) don’t want to fully install a program to try it out. But if we can just throw a docker container on a synology or something, that’s much easier to then remove if you end up not liking it.
(Don’t get me wrong. I’m saying this purely because a lot of people think this way. If it installs using a special script, lots of people are hesitant because they think that uninstalling it might be a nightmare and/or leave files behind still)

Hi @thibaultmol, Welcome to SavaPage!

First of all, to reassure you, Removing SavaPage from a GNU/Linux Server is very easy and leaves no traces. If despite that, people still hesitate to install and a Docker image would win them over, then making such an image is definitely worth the investment.

To everyone: please let me know if you don’t want to try SavaPage unless a Docker image is available.

Personally, I have no experience with Dockerizing versatile applications such as SavaPage. So if a Docker expert is willing to help, that would be great.