Сохраните файл PDF, используя Java Для печати в системе Linux - PullRequest
1 голос
/ 13 июля 2020

У меня есть рабочий класс, который создает и сохраняет файл PDF для пользователя, реализуя Printable и используя PrinterJob для создания PDF в заданном месте. Это отлично работает в системе Windows, но у меня проблемы с этим в системе Linux.

Я пытаюсь автоматизировать создание этих PDF-файлов в системе Linux следующим образом:

    PrinterJob job = PrinterJob.getPrinterJob();
    job.setPrintable( this );
    job.setPrintService( defaultPrinter );
    // create a new HashPrintRequestAttributeSet
    HashPrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
    // set the output file as a destination 
    attributes.add(new Destination(new File(fileName).toURI()));
    job.print(attributes);

Я установил cups-pdf в свою систему Linux и указал defaultPrinter на этот PrintService. Файл создается, но это не файл PDF, а файл Postscript. CUPS даже не создает для этого задания на печать, поэтому я считаю, что он просто создает файл postscript с командами принтера.

Файл Postscript начинается следующим образом:

%!PS-Adobe-3.0
%%BeginProlog
/imStr 0 def /imageSrc {currentfile /ASCII85Decode filter /RunLengthDecode filter  imStr readstring pop } def
/BD {bind def} bind def
/D {def} BD
/C {curveto} BD
/L {lineto} BD
/M {moveto} BD
/R {grestore} BD
/G {gsave} BD
/N {newpath} BD
/P {closepath} BD
/EC {eoclip} BD
/WC {clip} BD
/EF {eofill} BD
/WF {fill} BD
/SG {setgray} BD
/SC {setrgbcolor} BD
...

Я знаю, что могу использовать PDFBox, чтобы нарисовать PDF самостоятельно, но весь код есть для создания файла PDF, и все это работает на windows. Можно ли получить систему linux для создания PDF-файла и сохранения его в папке с помощью PrinterJob?

1 Ответ

1 голос
/ 13 июля 2020

Оказывается, атрибуты нужны только windows системам. Если вы используете атрибуты в системе Linux, он сохранит только команды принтера, а не PDF.

Если у вас есть lpr в вашей системе linux и вызовите job.print();, он создаст PDF, дайте задание имя, чтобы вы могли найти его в своей системе.

Пришлось установить cups-pdf и cups-bsd.

...