0
私はPDFBoxを使用してPDFを印刷しています。 PrinterJob Sides.DUPLEXでプリンタに送信された場合、一部のプリンタがデュプレックスを印刷しないという問題に直面しました。ただし、これらのプリンタは、準備されたPCLまたはPSファイルを送信すると、両面印刷できます。私はこのようなリンクを見つけたDuplex Printing of PDF document with T&C at the Back作者は、サードパーティのpsファイルを作成し、それに二重化を追加します。私は、PDFBoxが出力ストリームに直接二重化を追加できるかどうかを知りたいと思います。あるいは、印刷時に両面印刷を追加できる代替PDFBoxがあります。二重印刷PDF
import java.awt.print.PrinterJob;
import java.io.File;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.Sides;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.printing.PDFPageable;
public class PrintPDFMain
{
public static void main(String args[]) throws Exception {
try
{
File file ;
int qty;
if (args.length < 2)
{
System.out.println("1st param File 2nd param printer name 3rd param qty of copies 4th param duplex (yes/no) \n1st and 2nd params are mandatory");
return;
}
file = new File(args[0]);
if (!file.exists()) return;
PDDocument document = PDDocument.load(file);
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
if (args.length > 2)
{
if (args.length >= 3)
{
qty = 1;
try
{
qty = Integer.parseInt (args[2]);
}
catch (NumberFormatException e)
{
qty = 1;
}
System.out.println(qty);
pras.add(new Copies(qty));
}
if (args.length >=4)
{
if (args[3].length() == 3) {System.out.println(args[3]); pras.add(Sides.DUPLEX);}}
}
PrinterJob job = PrinterJob.getPrinterJob();
job.setPageable(new PDFPageable(document));
job.print(pras);
System.out.println("print");
System.out.println();
}
catch (Exception e)
{
System.out.println("error " + e);
}
}
}
PDF仕様には言及されていますが、上記のように印刷するとPDFファイルがプリンタに送信されないため、PDFを読み込んでプリンタにレンダリングコマンドを送信します。ですから、私の理解では、PDFアプリケーションは、(ビューア設定ディクショナリ内のエントリからの)設定を照会し、あなたが言及したように 'Sides.DUPLEX'オプションを設定する必要があります。このリンクには、PSからプリンタへの直接のストリーミングが示されていますが、PDFBoxはどのプリンタ言語が使用されているかわからず、注意もしません。 –