История изменений
Исправление
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 и не тянет столько зависимостей как последний.