本文介绍了FPDF + FPDI自动打印的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要将import pdf
文件放入fpdf
和print it silently
.我使用fpdi扩展名加载现有的pdf,但是我不知道如何自动打印它.
I need to import pdf
file into fpdf
and print it silently
. I use fpdi extension to load existing pdf, but I have no idea how to autoprint it.
这是fpdf中自动打印的工作原理-fpdf周围还有两个其他类(来自它们的示例).
This is how autoprint in fpdf works - 2 additional classes around fpdf (from their examples).
require('lib/fpdf/fpdf.php');
require('lib/fpdi-1.6.1/fpdi.php');
class PDF_JavaScript extends FPDF {
protected $javascript;
protected $n_js;
function IncludeJS($script, $isUTF8=false) {
if(!$isUTF8)
$script=utf8_encode($script);
$this->javascript=$script;
}
function _putjavascript() {
$this->_newobj();
$this->n_js=$this->n;
$this->_put('<<');
$this->_put('/Names [(EmbeddedJS) '.($this->n+1).' 0 R]');
$this->_put('>>');
$this->_put('endobj');
$this->_newobj();
$this->_put('<<');
$this->_put('/S /JavaScript');
$this->_put('/JS '.$this->_textstring($this->javascript));
$this->_put('>>');
$this->_put('endobj');
}
function _putresources() {
parent::_putresources();
if (!empty($this->javascript)) {
$this->_putjavascript();
}
}
function _putcatalog() {
parent::_putcatalog();
if (!empty($this->javascript)) {
$this->_put('/Names <</JavaScript '.($this->n_js).' 0 R>>');
}
}
}
class PDF_AutoPrint extends PDF_JavaScript
{
function AutoPrint($printer='')
{
// Open the print dialog
if($printer)
{
$printer = str_replace('\\', '\\\\', $printer);
$script = "var pp = getPrintParams();";
$script .= "pp.interactive = pp.constants.interactionLevel.full;";
$script .= "pp.printerName = '$printer'";
$script .= "print(pp);";
}
else
$script = 'print(true);';
$this->IncludeJS($script);
}
}
$pdf = new PDF_AutoPrint();
$pdf->AddPage();
$pdf->SetFont('Arial', '', 20);
$pdf->Text(90, 50, 'Print me!');
$pdf->AutoPrint();
$pdf->Output();
它工作正常,但我需要将其与此结合起来:
And it works fine, but I need it to combine with this:
require('lib/fpdf/fpdf.php');
//require('lib/fpdi-2.0.1/src/autoload.php');
require('lib/fpdi-1.6.1/fpdi.php');
$pdf = new FPDI();
$pdf->setSourceFile("BCEB_20171207_100_A_1_51.pdf");
$tplIdx = $pdf->importPage(1, '/MediaBox');
$pdf->addPage();
$pdf->useTemplate($tplIdx, 0, 0, 0, 0, true);
$pdf->Output();
我真的不知道如何将两者结合在一起(和fpdi的autoload
类一起使用).可能会有帮助的替代方法-另一种将现成的pdf加载到fpdf并输出的方法.
I really have no idea how to combine both (with autoload
classes aroud fpdi?). Alternative that would help - another way to load ready pdf into fpdf and output it.
推荐答案
<?php
require('lib/fpdf/fpdf.php');
require('lib/fpdi-1.6.1/fpdi.php');
class PDF_JavaScript extends FPDI {
var $javascript;
var $n_js;
function IncludeJS($script) {
$this->javascript=$script;
}
function _putjavascript() {
$this->_newobj();
$this->n_js=$this->n;
$this->_out('<<');
$this->_out('/Names [(EmbeddedJS) '.($this->n+1).' 0 R]');
$this->_out('>>');
$this->_out('endobj');
$this->_newobj();
$this->_out('<<');
$this->_out('/S /JavaScript');
$this->_out('/JS '.$this->_textstring($this->javascript));
$this->_out('>>');
$this->_out('endobj');
}
function _putresources() {
parent::_putresources();
if (!empty($this->javascript)) {
$this->_putjavascript();
}
}
function _putcatalog() {
parent::_putcatalog();
if (!empty($this->javascript)) {
$this->_out('/Names <</JavaScript '.($this->n_js).' 0 R>>');
}
}
}
class PDF_AutoPrint extends PDF_JavaScript
{
function AutoPrint($dialog=false)
{
//Open the print dialog or start printing immediately on the standard printer
$param=($dialog ? 'true' : 'false');
$script="print($param);";
$this->IncludeJS($script);
}
function AutoPrintToPrinter($server, $printer, $dialog=false)
{
$script = "document.contentWindow.print();";
$this->IncludeJS($script);
}
}
$pdf=new PDF_AutoPrint();
$pageCount = $pdf->setSourceFile("BCEB_20171207_28_A_1_04_long.pdf");
// $pageCount = $pdf -> setSourceFile("BCEB_20171207_100_A_1_51.pdf");
//Open the print dialog
//$tplIdx = $pdf->importPage(1, '/MediaBox'); //this you need to do on every page
for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
$tplIdx = $pdf->importPage($pageNo);
$pdf->addPage();
$pdf->useTemplate($tplIdx, 0, 0, 0, 0, true);
}
$pdf->AutoPrint(true);
$pdf->Output();
?>
这篇关于FPDF + FPDI自动打印的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!