OJS - 使用 FPDI 和 TCPDF 库 - 致命错误
OJS - using FPDI and TCPDF libs - fatal error
我正在尝试找出在 Open Journal System 中添加我自己的 "modul" 的问题。我需要使用 FPDI 和 TCPDF 功能编辑 PDF 文档 - 向 PDF 文件添加一些信息。
我在 OJS 中有自己的页面,我想在其中上传文件,然后在表单中输入一些信息,提交后,有一些过程将信息添加到 PDF 中。但是当我得到我的页面时,我得到这个错误:
Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Cannot open C:\xampp\htdocs\ojs245 !' in C:\xampp\htdocs\ojs245\pages\stamp\pdf_parser.php:192 Stack trace: #0 C:\xampp\htdocs\ojs245\pages\stamp\fpdi_pdf_parser.php(71): pdf_parser->__construct('C:\xampp\htdocs...') #1 C:\xampp\htdocs\ojs245\pages\stamp\fpdi.php(128): fpdi_pdf_parser->__construct('C:\xampp\htdocs...') #2 C:\xampp\htdocs\ojs245\pages\stamp\fpdi.php(108): FPDI->_getPdfParser('C:\xampp\htdocs...') #3 C:\xampp\htdocs\ojs245\pages\stamp\class.php(15): FPDI->setSourceFile(NULL) #4 C:\xampp\htdocs\ojs245\pages\stamp\lib\tcpdf\tcpdf.php(3543): PDF->Header() #5 C:\xampp\htdocs\ojs245\pages\stamp\lib\tcpdf\tcpdf.php(3210): TCPDF->setHeader() #6 C:\xampp\htdocs\ojs245\pages\stamp\lib\tcpdf\tcpdf.php(3122): TCPDF->startPage('schval.pdf', '', false) #7 [internal function]: TCPDF->AddPage('schval.pdf') #8 C:\xampp\htdocs\ojs245\pages\stamp\fpdf_tpl.php(367): call_user_func_array(Array, Array) #9 C:\xampp\htdocs\ojs245\pages\stamp\StampHandl in C:\xampp\htdocs\ojs245\pages\stamp\pdf_parser.php on line 192
我在 ojs\pages 中有这个结构:
index.php,
StampHandler.inc.php
主要功能在哪里,应该在 PDF 中进行更改:
import('classes.handler.Handler');
class StampHandler extends Handler {
function stampingOperation($args, $request) {
$templateMgr = TemplateManager::getManager($request);
$templateMgr->display('stamp/stampingOperation.tpl');
//echo 'Operace razitkovani';
//$templateMgr->assign('test', $promenna);
$templateMgr->assign('test', $request->getUserVar('test'));
require_once('lib/tcpdf/tcpdf.php');
require_once('fpdi.php');
// Original file with multiple pages
require_once('class.php');
// initiate PDF
$pdf = new PDF();
$pdf->fullPathToFile = "TestClanek.pdf";
// add a page
$pdf->AddPage("schval.pdf");
//$pdf->AddPage();
if($pdf->numPages>1) {
for($i=2;$i<=$pdf->numPages;$i++) {
$pdf->endPage();
$pdf->_tplIdx = $pdf->importPage($i);
$pdf->AddPage();
}
}
// or Output the file as forced download
$file_time = time();
$pdf->Output("$file_time.pdf", "F");//, "I");
echo "'<a href=$file_time.pdf>Edited file</a>'"; }
}
任何人都可以知道,可能是什么问题?
谢谢,Zbynek
编辑:
class.php
class PDF extends FPDI {
var $_tplIdx;
var $fullPathToFile;
function Header() {
echo $this->fullPathToFile;
if(is_null($this->_tplIdx)) {
// THIS IS WHERE YOU GET THE NUMBER OF PAGES
$this->numPages = $this->setSourceFile($this->fullPathToFile);
$this->_tplIdx = $this->importPage(1);
}
if($this->page > 1) {
$this->SetFont('helvetica', 'I', 10);
$this->SetTextColor(0);
$this->Write(15, $_POST["casopis"] .", Cislo: ". $_POST["rocnik"]."/0".$_POST["cislo"].", Autor: ".$_POST["autor"]."\n"); // ."\n" border, 1);
// generování času a podmínka pro časové razítko
SetLocale(LC_ALL, "Czech");
$cas = StrFTime("%H:%M:%S", Time());
if($_POST["cas_razitko"]=="ok") {
// pozice $this->SetXY(30, 30);
$this->Write(0, "Cas upravy: ".$cas); //."\n"); //." ", '', 0, 'L', true, 0, false, false, 0 15,
}
// pokud je vlastní text - potom vytiskni:
if($_POST["text_razitko"]=="ok") {
//$this->SetXY(30, 30);
$this->Write(0, $_POST["text"]);
}
$style = array(
'border' => 1,
'padding' => 'auto',
'fgcolor' => array(0,0,0),
'bgcolor' => array(255,255,255)
);
if($_POST["qr_kod"]=="ok") {
$this->write2DBarcode($_POST["casopis"].", ".$_POST["autor"], 'QRCODE,L', 180, 3, 20, 20, $style, 'N');
}
$this->Image('logo.png', 100, 2, 75,7);
}
$this->useTemplate($this->_tplIdx, 0, 0,200);
}
}
在您的调用 class 中,var $fullPathToFile 不是全局变量,这会导致在您的 PDF class 中将 null 传递给 setSourceFile()...您应该将其更改为 属性 改为:
$pdf->fullPathToFile = "...";
稍后在您的 PDF 中 class:
$this->setSourceFile($this->fullPathToFile);
我正在尝试找出在 Open Journal System 中添加我自己的 "modul" 的问题。我需要使用 FPDI 和 TCPDF 功能编辑 PDF 文档 - 向 PDF 文件添加一些信息。
我在 OJS 中有自己的页面,我想在其中上传文件,然后在表单中输入一些信息,提交后,有一些过程将信息添加到 PDF 中。但是当我得到我的页面时,我得到这个错误:
Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Cannot open C:\xampp\htdocs\ojs245 !' in C:\xampp\htdocs\ojs245\pages\stamp\pdf_parser.php:192 Stack trace: #0 C:\xampp\htdocs\ojs245\pages\stamp\fpdi_pdf_parser.php(71): pdf_parser->__construct('C:\xampp\htdocs...') #1 C:\xampp\htdocs\ojs245\pages\stamp\fpdi.php(128): fpdi_pdf_parser->__construct('C:\xampp\htdocs...') #2 C:\xampp\htdocs\ojs245\pages\stamp\fpdi.php(108): FPDI->_getPdfParser('C:\xampp\htdocs...') #3 C:\xampp\htdocs\ojs245\pages\stamp\class.php(15): FPDI->setSourceFile(NULL) #4 C:\xampp\htdocs\ojs245\pages\stamp\lib\tcpdf\tcpdf.php(3543): PDF->Header() #5 C:\xampp\htdocs\ojs245\pages\stamp\lib\tcpdf\tcpdf.php(3210): TCPDF->setHeader() #6 C:\xampp\htdocs\ojs245\pages\stamp\lib\tcpdf\tcpdf.php(3122): TCPDF->startPage('schval.pdf', '', false) #7 [internal function]: TCPDF->AddPage('schval.pdf') #8 C:\xampp\htdocs\ojs245\pages\stamp\fpdf_tpl.php(367): call_user_func_array(Array, Array) #9 C:\xampp\htdocs\ojs245\pages\stamp\StampHandl in C:\xampp\htdocs\ojs245\pages\stamp\pdf_parser.php on line 192
我在 ojs\pages 中有这个结构: index.php, StampHandler.inc.php 主要功能在哪里,应该在 PDF 中进行更改:
import('classes.handler.Handler');
class StampHandler extends Handler {
function stampingOperation($args, $request) {
$templateMgr = TemplateManager::getManager($request);
$templateMgr->display('stamp/stampingOperation.tpl');
//echo 'Operace razitkovani';
//$templateMgr->assign('test', $promenna);
$templateMgr->assign('test', $request->getUserVar('test'));
require_once('lib/tcpdf/tcpdf.php');
require_once('fpdi.php');
// Original file with multiple pages
require_once('class.php');
// initiate PDF
$pdf = new PDF();
$pdf->fullPathToFile = "TestClanek.pdf";
// add a page
$pdf->AddPage("schval.pdf");
//$pdf->AddPage();
if($pdf->numPages>1) {
for($i=2;$i<=$pdf->numPages;$i++) {
$pdf->endPage();
$pdf->_tplIdx = $pdf->importPage($i);
$pdf->AddPage();
}
}
// or Output the file as forced download
$file_time = time();
$pdf->Output("$file_time.pdf", "F");//, "I");
echo "'<a href=$file_time.pdf>Edited file</a>'"; }
}
任何人都可以知道,可能是什么问题?
谢谢,Zbynek
编辑: class.php
class PDF extends FPDI {
var $_tplIdx;
var $fullPathToFile;
function Header() {
echo $this->fullPathToFile;
if(is_null($this->_tplIdx)) {
// THIS IS WHERE YOU GET THE NUMBER OF PAGES
$this->numPages = $this->setSourceFile($this->fullPathToFile);
$this->_tplIdx = $this->importPage(1);
}
if($this->page > 1) {
$this->SetFont('helvetica', 'I', 10);
$this->SetTextColor(0);
$this->Write(15, $_POST["casopis"] .", Cislo: ". $_POST["rocnik"]."/0".$_POST["cislo"].", Autor: ".$_POST["autor"]."\n"); // ."\n" border, 1);
// generování času a podmínka pro časové razítko
SetLocale(LC_ALL, "Czech");
$cas = StrFTime("%H:%M:%S", Time());
if($_POST["cas_razitko"]=="ok") {
// pozice $this->SetXY(30, 30);
$this->Write(0, "Cas upravy: ".$cas); //."\n"); //." ", '', 0, 'L', true, 0, false, false, 0 15,
}
// pokud je vlastní text - potom vytiskni:
if($_POST["text_razitko"]=="ok") {
//$this->SetXY(30, 30);
$this->Write(0, $_POST["text"]);
}
$style = array(
'border' => 1,
'padding' => 'auto',
'fgcolor' => array(0,0,0),
'bgcolor' => array(255,255,255)
);
if($_POST["qr_kod"]=="ok") {
$this->write2DBarcode($_POST["casopis"].", ".$_POST["autor"], 'QRCODE,L', 180, 3, 20, 20, $style, 'N');
}
$this->Image('logo.png', 100, 2, 75,7);
}
$this->useTemplate($this->_tplIdx, 0, 0,200);
}
}
在您的调用 class 中,var $fullPathToFile 不是全局变量,这会导致在您的 PDF class 中将 null 传递给 setSourceFile()...您应该将其更改为 属性 改为:
$pdf->fullPathToFile = "...";
稍后在您的 PDF 中 class:
$this->setSourceFile($this->fullPathToFile);