LINUX.ORG.RU

История изменений

Исправление Twissel, (текущая версия) :

<?php
ini_set('dispay_errors', 1);
require('tcpdf/tcpdf.php');

function Convertion($proc, $xmlFile, $xslFile, $output_page, $doc_name, $tmp_dir)
{
                $zip = new ZipArchive();
                if ($zip->open($doc_name, ZipArchive::CREATE) === TRUE)
                {
                                $zip->extractTo($tmp_dir);
                                $zip->close();
                }
                $saxonProc = new Saxon\SaxonProcessor();
                $proc      = $saxonProc->newXsltProcessor();
                $proc->setSourceFromFile($xmlFile);
                $proc->compileFromFile($xslFile);
                touch($output_page);
                $proc->setOutputFile($output_page);
                $proc->transformToFile();
                $proc->clearParameters();
                $proc->clearProperties();
}

function ProducePDF($pdf_name, $html_page)
{
                // create new PDF document
                $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
                
                // set document information
                $pdf->SetCreator(PDF_CREATOR);
                $pdf->SetAuthor('Tony');
                $pdf->SetTitle('A document');
                $pdf->SetSubject('Information');
                $pdf->SetKeywords('TCPDF, PDF');
                
                // set default header data
                $pdf->SetHeaderData('', PDF_HEADER_LOGO_WIDTH, '', '');
                
                // set header and footer fonts
                $pdf->setHeaderFont(Array(
                                PDF_FONT_NAME_MAIN,
                                '',
                                PDF_FONT_SIZE_MAIN
                ));
                $pdf->setFooterFont(Array(
                                PDF_FONT_NAME_DATA,
                                '',
                                PDF_FONT_SIZE_DATA
                ));
                
                // set default monospaced font
                $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
                
                // set margins
                $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
                $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
                $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
                
                // set auto page breaks
                $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
                
                // set image scale factor
                $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
                
                // set some language-dependent strings (optional)
                if (file_exists(dirname(__FILE__) . '/lang/eng.php'))
                {
                                require_once(dirname(__FILE__) . '/lang/eng.php');
                                $pdf->setLanguageArray($l);
                }
                // ---------------------------------------------------------
                
                // set font
                $pdf->SetFont('helvetica', '', 12);
                
                // add a page
                $pdf->AddPage();
                
                
                $html = file_get_contents($html_page);
                // output the HTML content
                $pdf->writeHTML($html, true, false, true, false, '');
                
                // reset pointer to the last page
                $pdf->lastPage();
                
                // ---------------------------------------------------------
                
                //Close and output PDF document
                $pdf->Output($pdf_name, 'FI');
                
                
}

function recursiveRemoveDirectory($pathName)
{
                foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($pathName, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST) as $path)
                {
                                $path->isDir() && !$path->isLink() ? rmdir($path->getPathname()) : unlink($path->getPathname());
                }
                chmod($pathName, 0777);
                rmdir($pathName);
}
$doc_name    = "commands_deu.docx";
$result_name = "result.pdf";
//$FILES['userfile']['name'];
$tmp_dir     = substr(str_shuffle(MD5(microtime())), 0, 10);
mkdir($tmp_dir);
$output_page   = $tmp_dir . "/output.html";
$download_path = $tmp_dir . '_' . $result_name;
$xmlFile       = $tmp_dir . "/word/document.xml";
$xslTable      = "xsl/docx2html.xsl";
Convertion($proc, $xmlFile, $xslTable, $output_page, $doc_name, $tmp_dir);
$html = file_get_contents($output_page);
$html = preg_replace('#<script(.*?)>(.*?)</script>#is', '', $html);
file_put_contents($output_page, $html);
ProducePDF($download_path, $output_page);
recursiveRemoveDirectory($tmp_dir);

Вроде подправил отступы :-)

Единственное, что меня нынче радует это то, что мой велосипед создаёт pdf примерно в 3 раза быстрее,

чем docx2tex -p и не тянет столько зависимостей как последний.

Исходная версия Twissel, :

<?php
ini_set('dispay_errors', 1);
require('tcpdf/tcpdf.php');

function Convertion($proc, $xmlFile, $xslFile, $output_page, $doc_name, $tmp_dir)
{
                $zip = new ZipArchive();
                if ($zip->open($doc_name, ZipArchive::CREATE) === TRUE)
                {
                                $zip->extractTo($tmp_dir);
                                $zip->close();
                }
                $saxonProc = new Saxon\SaxonProcessor();
                $proc      = $saxonProc->newXsltProcessor();
                $proc->setSourceFromFile($xmlFile);
                $proc->compileFromFile($xslFile);
                touch($output_page);
                $proc->setOutputFile($output_page);
                $proc->transformToFile();
                $proc->clearParameters();
                $proc->clearProperties();
}

function ProducePDF($pdf_name, $html_page)
{
                // create new PDF document
                $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
                
                // set document information
                $pdf->SetCreator(PDF_CREATOR);
                $pdf->SetAuthor('Tony');
                $pdf->SetTitle('A document');
                $pdf->SetSubject('Information');
                $pdf->SetKeywords('TCPDF, PDF');
                
                // set default header data
                $pdf->SetHeaderData('', PDF_HEADER_LOGO_WIDTH, '', '');
                
                // set header and footer fonts
                $pdf->setHeaderFont(Array(
                                PDF_FONT_NAME_MAIN,
                                '',
                                PDF_FONT_SIZE_MAIN
                ));
                $pdf->setFooterFont(Array(
                                PDF_FONT_NAME_DATA,
                                '',
                                PDF_FONT_SIZE_DATA
                ));
                
                // set default monospaced font
                $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
                
                // set margins
                $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
                $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
                $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
                
                // set auto page breaks
                $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
                
                // set image scale factor
                $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
                
                // set some language-dependent strings (optional)
                if (file_exists(dirname(__FILE__) . '/lang/eng.php'))
                {
                                require_once(dirname(__FILE__) . '/lang/eng.php');
                                $pdf->setLanguageArray($l);
                }
                // ---------------------------------------------------------
                
                // set font
                $pdf->SetFont('helvetica', '', 12);
                
                // add a page
                $pdf->AddPage();
                
                
                $html = file_get_contents($html_page);
                // output the HTML content
                $pdf->writeHTML($html, true, false, true, false, '');
                
                // reset pointer to the last page
                $pdf->lastPage();
                
                // ---------------------------------------------------------
                
                //Close and output PDF document
                $pdf->Output($pdf_name, 'FI');
                
                
}

function recursiveRemoveDirectory($pathName)
{
                foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($pathName, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST) as $path)
                {
                                $path->isDir() && !$path->isLink() ? rmdir($path->getPathname()) : unlink($path->getPathname());
                }
                chmod($pathName, 0777);
                rmdir($pathName);
}
$doc_name    = "commands_deu.docx";
$result_name = "result.pdf";
//$FILES['userfile']['name'];
$tmp_dir     = substr(str_shuffle(MD5(microtime())), 0, 10);
mkdir($tmp_dir);
$output_page   = $tmp_dir . "/output.html";
$download_path = $tmp_dir . '_' . $result_name;
$xmlFile       = $tmp_dir . "/word/document.xml";
$xslTable      = "xsl/docx2html.xsl";
Convertion($proc, $xmlFile, $xslTable, $output_page, $doc_name, $tmp_dir);
$html = file_get_contents($output_page);
$html = preg_replace('#<script(.*?)>(.*?)</script>#is', '', $html);
file_put_contents($output_page, $html);
ProducePDF($download_path, $output_page);
recursiveRemoveDirectory($tmp_dir);

Вроде подправил отступы :-)

Единственное, что меня нынче радует это то, что мой велосипед создаёт pdf примерно в 3 раза быстрее, чем docx2tex -p и не тянет столько зависимостей как последний.