All of lore.kernel.org
 help / color / mirror / Atom feed
From: Till Kamppeter <till.kamppeter@gmail.com>
To: Tobias Hoffmann <lprint-list@thax.hardliners.org>,
	Alex Korobkin <korobkin+op@gmail.com>
Cc: "printing-architecture@lists.linux-foundation.org"
	<printing-architecture@lists.linux-foundation.org>
Subject: Re: [Printing-architecture] Number of copies in pure PDF workflow
Date: Wed, 15 Oct 2014 15:12:39 +0200	[thread overview]
Message-ID: <543E72C7.3090603@gmail.com> (raw)
In-Reply-To: <543E5168.9010108@thax.hardliners.org>

On 10/15/2014 12:50 PM, Tobias Hoffmann wrote:
> On 14/10/14 23:09, Tobias Hoffmann wrote:
>> On 14/10/14 21:17, Alex Korobkin wrote:
>>> Shouldn't pdftopdf just insert PJL SET COPIES=X without any related
>>> code in PPD? PJL SET COPIES seems to be a standard PJL command.
>>
> 
> Hmm, the biggest problem seems to be that everything from ppd->jcl_begin
> (i.e. for PCL: "\033%-12345X@") until ppd->jcl_ps (set to
> *JCLToPDFInterpreter in pdftopdf, i.e."ENTER LANGUAGE") is written by
> cups's ppdEmitJCL() function.
> As far as I understand it, this are the options:
> 
> a) stick to what cups provides in terms of PPD settings (and probably
> move the Copies replacement code before ppdEmitJCL),
> 
> b) patch cups, namely ppdEmitJCL() in emit.c.
>   As cups does detect PCL as JCL here and sets "JOB NAME", "DISPLAY" or
> "RDYMSG DISPLAY" that would be the best place to add PJL SET COPIES.
>   But this will affect all PPDs with JCL, e.g. when pure PostScript is
> used... and, in case the patch is not accepted upstream, cups-filters
> has to ship it(?)
> 

I will not ship patches for CUPS in the cups-filters upstream package.
You could post an upstream bug report/feature request on CUPS
(http://www.cups.org/str.php) to let the ppdEmitJCL() function add "PJL
SET COPIES=X" with the number of copies taken from the command line
arguments (4th argument, see "man filter"). We must look into whether we
should generally add "PJL SET COPIES=X", or only under certain
conditions (is another copy generation method supposed to be used?
Should we have some PPD keyword to turn it on or off?).

> c) do not use ppdEmitJCL at all. We would loose e.g. JOB NAME, but have
> better control over the output...

Do you mean using the not very elegant method to copy the code of the
function into cups-filters and modify it there?


> If you don't set *JCLToPDFInterpreter, and use *pdftopdfJCLBegin,
> together with more pdftopdfJCL* keywords, this could work. The current
> emitJCLOptions implementation does not insert newlines, though. I'm not
> sure if the PPD value could instead contain it, instead...

One could add "<0A>" to the ends of the PJL code lines in the PPD file.
This way one could go with only *pdftopdfJCL... keywords in the PPD and
so make CUPS' ppdEmitJCL() do nothing, letting pdftopdf gain full
control. We should try this.

>   I think Koji Otani only used the pdftopdfJCL* insertion to pass stuff
> to pdftoopvp, in a format that only used one line, separated by ";".
>   One of his examples is:
>>   *OpenUI *PageSize/Page Size: PickOne
>>   *DefaultPageSize: A4
>>   *PageSize A4/A4:
>>   *pdftopdfJCLPageSize A4/A4: "PS=A4;"
>>   *PageSize Letter/US Letter:
>>   *pdftopdfJCLPageSize Letter/US Letter: "PS=LT;"
>>   *CloseUI: *PageSize
>   I do not understand his original design fully, yet.
> 

This is a simple way to pass PPD option settings to the next filter (in
this case pdftoopvp), so that the filter does not need to read the PPD
and merge the command line option settings again. Also the next filter
gets note when tasks like copy generation are delegated to it.

> d) We can try a hacky workaround: In pdftopdf_jcl.c, emitPreamble(), set
> ppd->jcl_ps to an empty string. Then ppdEmitJCL will not skip JCL
> processing all together, but it also will not write ENTER LANGUAGE at
> the end. But it will result in an empty line. Would that be a problem in
> PCL? After that we can write SET COPIES and ENTER LANGUAGE ourselves.
> Or something like ppd->jcl_ps=concat("...SET COPIES...\n",
> JCLToPDFInterpreter->value) ?
>  

I do not know whether an empty line between PJL lines in a job causes a
problem, like for example the PJL header being terminated and PCL (not
PJL) entered starting with printing this empty line and after that the
PostScript or PDF as text. So better try the ppd->jcl_ps=concat("...SET
COPIES...\n", JCLToPDFInterpreter->value) approach.

> And yes, Till basically has to decide how to proceed.

So please try the two possibilities of

1. using *pdftopdfJCL... instead of *JCL... in the PPD, with "<0a>" in
the code snippets where line ends are supposed to be.

2. setting ppd->jcl_ps=concat("...SET COPIES...\n",
JCLToPDFInterpreter->value)

The first one can simply tried by editing the PPD file, the second needs
a (simple) code change in pdftopdf. CUPS does not need to get modified
for these tests.

Also make the above-mentioned feature request for CUPS to discuss the
SET COPIES in the ppdEmitJCL() of CUPS.

   Till


  reply	other threads:[~2014-10-15 13:12 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-03 19:28 [Printing-architecture] Number of copies in pure PDF workflow Alex Korobkin
2014-10-03 19:49 ` Ira McDonald
2014-10-03 20:23   ` Alex Korobkin
2014-10-04 15:40 ` Michael Sweet
2014-10-04 17:36   ` Alex Korobkin
2014-10-04 19:47     ` Tobias Hoffmann
2014-10-05  4:58       ` Alex Korobkin
2014-10-04 19:48     ` Michael Sweet
2014-10-05  5:03       ` Alex Korobkin
2014-10-06 14:12         ` Michael Sweet
2014-10-06 15:07           ` Alex Korobkin
2014-10-06 15:32             ` Michael Sweet
2014-10-06 15:55               ` Alex Korobkin
2014-10-06 16:01                 ` Michael Sweet
2014-10-07 11:49               ` Till Kamppeter
2014-10-07 11:55                 ` Michael Sweet
2014-10-07 12:12                   ` Till Kamppeter
2014-10-06 12:54       ` Till Kamppeter
2014-10-06 14:06         ` Alex Korobkin
2014-10-07 14:06           ` Alex Korobkin
2014-10-07 20:03           ` Till Kamppeter
2014-10-07 21:18             ` Alex Korobkin
2014-10-07 21:45               ` Tobias Hoffmann
2014-10-08  2:53                 ` Alex Korobkin
2014-10-08  9:57                 ` Till Kamppeter
2014-10-08 14:40                   ` Tobias Hoffmann
2014-10-08 19:41                     ` Alex Korobkin
2014-10-08 20:53                       ` Tobias Hoffmann
2014-10-10 18:38                         ` Alex Korobkin
2014-10-10 20:06                           ` Tobias Hoffmann
2014-10-10 20:58                             ` Till Kamppeter
2014-10-14 19:17                               ` Alex Korobkin
2014-10-14 21:09                                 ` Tobias Hoffmann
2014-10-15 10:50                                   ` Tobias Hoffmann
2014-10-15 13:12                                     ` Till Kamppeter [this message]
2014-10-15 15:04                                       ` Till Kamppeter
2014-10-15 16:17                                       ` Till Kamppeter
2014-10-15 19:28                                         ` Tobias Hoffmann
2014-10-16 15:53                                           ` Till Kamppeter
2014-10-16 16:52                                           ` Alex Korobkin
2014-10-16 20:59                                             ` Tobias Hoffmann
2014-10-17 16:22                                               ` Alex Korobkin
2014-10-17 16:40                                                 ` Till Kamppeter
2014-10-20 16:23                                                   ` Alex Korobkin
2014-10-20 16:29                                                     ` Till Kamppeter
2014-10-20 17:28                                                       ` Alex Korobkin
2014-10-20 20:30                                                         ` Till Kamppeter
2014-10-20 21:18                                                           ` Alex Korobkin
2014-10-15 16:22                                       ` Tobias Hoffmann
2014-10-15 17:06                                         ` Alex Korobkin
2014-10-15 19:02                                           ` Tobias Hoffmann
2014-10-15 19:16                                             ` Tobias Hoffmann
2014-10-07 22:40             ` Michael Sweet

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=543E72C7.3090603@gmail.com \
    --to=till.kamppeter@gmail.com \
    --cc=korobkin+op@gmail.com \
    --cc=lprint-list@thax.hardliners.org \
    --cc=printing-architecture@lists.linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.