laravel-Snappy PDF DIV使用高度大小不正确:11英寸

时间:2015-10-24 02:49:27

标签: php css laravel pdf

我正在使用Laravel-snappy,我试图绝对定位6列,以便每页打印3个。

查看

...
    body {
        position: relative;
    }

.col1-1 {
        text-align: right;
        background-color: #00dd00;
        position: absolute;
        top: 0px;
        left: 0px;
        width: 250px;
        height: 11in;
    }

    .col1-2 {
        text-align: right;
        position: absolute;
        background-color: #1c94c4;
        top: 0px;
        left: 270px;
        width: 250px;
        height: 11in;
    }

    .col1-3 {
        text-align: right;
        background-color: #46b8da;
        position: absolute;
        top: 0px;
        left: 540px;
        width: 250px;
        height: 11in;
    }

    .col2-1 {
        text-align: right;
        background-color: #dd0100;
        position: absolute;
        top: 11in;
        left: 0px;
        width: 250px;
        height: 11in;
    }

    .col2-2 {
        text-align: right;
        position: absolute;
        background-color: #c4770b;
        top: 11in;
        left: 270px;
        width: 250px;
        height: 11in;
    }

    .col2-3 {
        text-align: right;
        background-color: #da0073;
        position: absolute;
        top: 11in;
        left: 540px;
        width: 250px;
        height: 11in;
    }
</style>
</head>
<body>
<div class="col1-1"></div>
<div class="col1-2"></div>
<div class="col1-3"></div>
<div class="col2-1"></div>
<div class="col2-2"></div>
<div class="col2-3"></div>
....

控制器

return $pdf->stream('page.pdf');

        return view('page');

问题是列变短了,所以第2行从第1页开始......

Screenshot of PDF

我将页面大小设置为字母

    'pdf' => array(
    'enabled' => true,
    'binary' => 'C:\wkhtmltopdf\bin\wkhtmltopdf',
    'timeout' => false,
    'options' => array('page-size'=>'letter'),

所以我不确定下一步该做什么......

我觉得这是一个缩放问题?

如果我不使用Snappy,只是在屏幕上显示页面并以PDF格式打印屏幕,结果会好得多(只有几个像素关闭),但当然我需要将页面返回为PDF。

1 个答案:

答案 0 :(得分:0)

Snappy使用wkhtmltopdf,后者又使用Webkit呈现HTML。 (如果我的建议无法帮助您,可能会帮助您找到更多信息,因为您的问题可能与Snappy无关。)

我认为您可以通过阻止页面在列内部破坏来解决您的问题。为此,您可以在每个列上使用以下CSS:

page-break-after: avoid

您也可以尝试在div中包装3列并在包装div上应用该css。

您还可以在列上尝试page-break-before: avoid public void actionPerformed(ActionEvent e) { int saveType = 0; String buttonString = e.getActionCommand(); if (buttonString.equals("Shutdown >>")) { shutdownServer(); } else if (buttonString.equals("Save >>")) { JFileChooser fc = new JFileChooser(); fc.setCurrentDirectory(new java.io.File(".")); fc.setDialogTitle("Save file"); FileNameExtensionFilter filter = new FileNameExtensionFilter(".txt", "txt", "text"); fc.setFileFilter(filter); int select = fc.showSaveDialog(null); if (select == JFileChooser.APPROVE_OPTION) { File fi = fc.getSelectedFile(); fileName = fi.getPath(); if (fileRB.isSelected()) { dbDisplaytx.setText("REPORT SAVED TO FILE"); saveType = 1; } else if (databaseRB.isSelected()) { dbDisplaytx.setText("REPORT SAVED TO DATABASE"); saveType = 2; } else if (bothRB.isSelected()) { dbDisplaytx.setText("REPORT SAVED TO BOTH FILE & DATABASE"); saveType = 3; } else { // stub to test radio button dbDisplaytx.setText("WRONG SELECTION"); } } produceProfileReport(saveType); } } ,或者在列集之间创建一个空div,并使用`page-break-after:always&#39;来设置样式。