4

我是 apache PDFBox api 的新手,我想使用 apache PDFBox 设置打印设置属性。

在这里,我想将页面大小设置为,A4并且我还想将打印缩放选项设置为NO SCALING.

在此处记下我正在加载一个准备好的 PDF 输入流。所以我想在打印org.apache.pdfbox.pdmodel.PDDocument之前用类设置打印属性。

我怎样才能做到这一点 ?

编辑:

这是我打印 PDF 文件的课程。请注意, 我想在其中添加代码的TODO标记将 PDF 页面大小更改为A4并将页面缩放设置为NO SCALING

public class PrintPDF extends Applet{
    private PrintPDF(){
        //static class
    }


    public static void main(String a[]) throws Exception{
        System.out.println("Printing Started...");
        String password = "";
        String pdfFile = "D://TEST//output.pdf";
        boolean silentPrint = true;
        String printerindx = "1";

        PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();            


        if( pdfFile == null )
        {
            usage();
        }

        PDDocument document = null;
        try
        {
            document = PDDocument.load( pdfFile );

            //TODO : ADD CODE TO SET PAPER SIZE TO A4 AND 
            //ADD CODE TO SET PAGE SCALING TO : NO SCALING

            if( document.isEncrypted() )
            {
                document.decrypt( password );
            }
            PrinterJob printJob = PrinterJob.getPrinterJob();

            if(printerindx != null )
            {
                PrintService[] printServices = PrinterJob.lookupPrintServices();

                for(PrintService printService : printServices){
                    if(printService.getName().equals("FG_LASER_PRINTER")){
                        printJob.setPrintService(printService);
                    }
                }
                            }

            if( silentPrint ){
                document.silentPrint( printJob );
            }else{
                document.print( printJob );
            }
        }
        finally{
            if( document != null ){
                document.close();
            }
        }

        System.out.println("Printing Completed...");
    }

    /**
     * This will print the usage requirements and exit.
     */
    private static void usage()
    {
        System.err.println( "Usage: java org.apache.pdfbox.PrintPDF [OPTIONS] <PDF file>\n" +
                "  -password  <password>        Password to decrypt document\n" +
                "  -silentPrint                 Print without prompting for printer info\n"
        );
        System.exit( 1 );
    }
}
4

3 回答 3

2

您应该可以通过更新 PageFormat 的 Paper 来做到这一点。

pdDocument.getPageFormat().getPaper().setSize(double width, double length);

宽度和长度以英寸为单位。A4 尺寸为 8.27 × 11.69 英寸。

于 2013-04-22T06:37:48.380 回答
1

创建您的页面,如下所示:

PDPage page = new PDPage(PDPage.PAGE_SIZE_A4)
于 2013-04-22T06:26:03.573 回答
0

我有同样的问题,我觉得做这件简单的事情太难了。对我来说,已接受的答案 pdDocument.getPageFormat(int page) 已弃用且无法使用。尽管它并不理想,但我最终还是选择了以下方法——甚至不使用 PDFBox 打印。

以下代码一次将页面转换为图像,并使用 java2d 调整大小并打印出来。

PDDocument pdfdoc = PDDocument.load(pdfPane.pdfFile);
@SuppressWarnings("unchecked")
final List<PDPage> pdfPages = pdfdoc.getDocumentCatalog().getAllPages();

PrinterJob pjob = PrinterJob.getPrinterJob();
pjob.setJobName(pdfPane.pdfFile.getName());
pjob.setPrintable(new Printable()
{
  @Override
  public int print( Graphics g, PageFormat pf, int page ) throws PrinterException
  {
    if (page > pdfPages.size())
      return NO_SUCH_PAGE;
    try
    {
      g.drawImage(pdfPages.get(page).convertToImage()
                ,(int)pf.getImageableX()
                ,(int)pf.getImageableY()
                ,(int)pf.getImageableWidth()
                ,(int)pf.getImageableHeight()
                ,null);
    }
    catch (IOException e)
    {
      LoggerUtil.error(e);
    }
    return PAGE_EXISTS;
  }
});
pjob.print();
pdfdoc.close();
于 2013-08-01T00:42:31.560 回答