Приветствую всех. Разрабатываю свой компонент и делаю вывод данных для печати в PDF, при этом использую $format=pdf В общем все работает и я получаю нужные сведения, но у меня серьезная проблема в том, что я вывожу данные для печати на бланке, а сформированный PDF выводит нужные мне сведения ( в нужных местах) НО с колонтитулами --- верхний "заголовок сайта" и нижний "номера страниц" мне это не нужно ... Как от этого можно избавиться? Подскажите пожалуйста...
Спустя 4 суток. я нашел решение. по крайней мере для себя. Но, возможно не только я сталкиваюсь с такими задачами, и я решил кое что пояснить в их реализации. 1. Нам изначално известно, что в пакет Joomla 1.5 уже интегрирован механизм формирования и отображения контента в формат PDF на базе библиотеки TCPDF. И нам так же известно, что (используя MVC) достаточно создать файл view.pdf.php рядом с view.html.php и ссылаясь на него из шаблона как-то похоже на это: Но выводимый результат предопределен в ../libraries/joomla/document/pdf/pdf.php что-либо здесь поправить ведет только (или в большей мере) к потере времени ... ну и это изменение ядра Joomla, что не желательно в принципе. Остается одно - создать файл view.pdf.php и в нем все решить. И так, создадим view.pdf.php и в нем пропишем что-то похожее на это; // Запрещаем прямой доступ defined('_JEXEC') or die('Прямой доступ запрещен'); // Будем наследовать объект View require_once JPATH_COMPONENT.DS.'view.php'; // Если понадобятся данные, нам надо подключить Модель из которой мы их получим require_once JPATH_COMPONENT.DS.'models'.DS.'mymodel.php'; //Создадим свой View=класс class MynamecomponentViewMynamecontroller extends MynamecomponentView { //Возможно, мы захотим получать данные, тогда нам понадобится объект MODEL тут мы его получим function &getModel() { static $model = null; if ($model === null){ $model = new MynamecomponentModelMymodel(); } return $model; } //Далее нам надо будет отобразить результат function display( $tpl = null ) { //В ссылке мы передавали (в моем случае) значение ID объекта, тут его прочитаем $id = JRequest::getInt('id', 0); //Проверяем все ли у нас есть то, что мы ожидаем ... if( $id && $this->getLayout() == 'default' ){ А ВОТ ТУТ И НАЧИНАЕТСЯ САМОЕ ИНТЕРЕСНОЕ и что приводит в заблуждение ну и что следует понять: Ошибка. Когда мы пытаемся здесь прописать или передать (возвратить из функции) сюда объект ... что то созданное в виде $pdf = new TCPDF(); Мы непременно получим ошибку, потому что пытаемся отобразить вместо HTML данные в бинарном виде. Решение. Чтобы получить желаемый результат без ошибки, нам надо сформировать и выполнить PDF в отдельной функции, например: $this->showPDF(); При этом функция ни в коем случае не должна ничего возвращать в function display - иначе БУДЕТ ОШИБКА ... Вернее мы сюда можем предать (вернуть или написать изначально) текст или форматированный HTML --- предопределенный механизм это отработает правильно и без проблем, а так же отобразит на экране в предопределенном формате. МЫ не должны сюда возвращать по типу ДАННЫЕ как-либо отличающиеся от ТЕКСТА .. Естественно в этом классе нам надо создать функцию с именем (например) showPDF, где все обработается и выполнится... } } function showPDF() { Здесь мы пишем все. что нам надо обработать и выполнить. Т.е. именно тут мы сформируем и выведем на экран PDF-файл. Ну и об этом и о моей проблеме. а так же о том как я ее решил я опишу ниже ... } } 2. Ближе к PDF и к решению проблемы. И так, мне было необходимо избавиться от колнтитулов. чтобы писать нужные данные-текст на бумажном бланке. Попытки сделать это через $document=& JFactory::getDocument(); $document->setTitle(false); $document->setName(false); делают свое дело, но к нужному результату не приводят. Нам надо изменить установки TCPDF, переопределить свойства ... для этого делаем свою функцию showPDF() function showPDF() { //Если нам нужны данные - получим из из Model $model =& $this->getModel(); $row =& $model->getRow(); //Теперь в $row находится массив с данными .. как с ним работать Вам наверное известно иил вы узнаете в другом посте .. Моя цель объяснить о другом . Далее Вы конечно могли бы попробовать подключить библиотеку TCPDF приблизительно так: require_once JPATH_LIBRARIES.DS.'tcpdf'.DS.'config'.DS.'lang'.DS.'eng.php'; require_once JPATH_LIBRARIES.DS.'tcpdf'.DS.'tcpdf.php'; Все это так. но лично у меня из этого ХОРОШЕГО ПОЛУЧИЛОСЬ МАЛО и я вместо этого сделат так: jimport('tcpdf.config.lang.eng'); jimport('tcpdf.tcpdf'); // Создаем новый PDF документ $pdf = new TCPDF(); // Заполняем свойства файла, если надо. Это все то, что будет отображено в свойствах файла $pdf->SetCreator('Создатель'); $pdf->SetAuthor('Автор'); $pdf->SetTitle('название файла не имя файла'); $pdf->SetSubject('Что это за файл такой о чем он'); $pdf->SetKeywords("Ключевые слова через запятую"); //Далее можно установитьсвойства Заголовка $address = ""; $phone = ""; $fax = ""; $pdf->setHeaderData('your company logo', 25, 'company name', $address.$phone.$fax); $pdf->setHeaderFont(array('freesans', '', 8)); $pdf->setFooterFont(array('freesans', '', 6)); $pdf->setHeaderMargin(5); $pdf->setFooterMargin(5); $pdf->SetMargins(15,35,-1); ... Но ЗАГОЛОВОК и ПОДНОЖИЕ - это как-раз то, от чего мне надо было избавиться и я сделл так: //false = Не отображать Заголовок Ну и тоже самое с Подножием (Footer) $pdf->setPrintHeader(false); $pdf->setPrintFooter(false); //Назначим шрифт по умолчанию. К стати он единственный в пакете Joomla для этой библиотеки. Надо больше? Добавляйте свои. $pdf->SetFont('freesans', '',10); // Создадим страницу и для нее шрифт $pdf->AddPage(); $pdf->SetFont('freesans', '',9); //Создадим контент для PDF //Cell('Width', 'Height', 'Content', 'Border', 'Line', 'Cell Align', 'Fill', 'Link', 'Stretch') $pdf->Cell(0, 10, 'TEST CELL STRETCH: no stretch', 0, 1, 'C', 0, '', 0); $pdf->Cell( 40, 4, 'Вітаю', 0, 0, 'С', 0, 1); $pdf->Cell( 60, 4, 'Вам', 1, 10, 'L', 0, 1); $pdf->Cell( 10, 4, 'Всем', 1, 10, 'L', 0, 1); $pdf->Cell( 10, 4, 'От', 1, 10, 'L', 0, 1); $pdf->Cell( 40, 4, 'Меня', 1, 10, 'L', 0, 1); $pdf->ln();//Новая строка $pdf->SetTextColor(0,0,0); //set text colour $pdf->SetLineWidth(.1); $pdf->Output('mypdf.pdf', 'I'); exit; } Ну вот и все, теперь вы можете полностью реализовать возможности библиотеки TCPDF. Конечно я тут привел примитивный пример. Если вам необходимо больше - Вам надо ознакомиться с Примерами на официальном сайте разработчика TCPDF. Если я что то изложио не так, ну или вообще исказил реальность, участники меня поправят. Всем Благодарю и успехов Вам побольше !!!
Привет форуму жумлы и его жумловодам. сто лет тут не был вот вернулся чтобы постнуть ибо столкнулся с той же фигнёй что и автор. но у меня ситуация другая и сделал я всё гораздо проще: компонент mtree нужно сделать так чтобы кнопка распечатать выводила пдф а на хтмл всё что я сделал это добавил в строку запроса просмотра деталей записи в каталоге - com_mtree&task=viewlink&link_id=***&format=pdf как результат получил ошибку addcostomtag но это я решил обычным способом - закомментил "///" эти костомтаги и обновил страничку и о чудо я получил ПДФ )) конечно все хтмл теги вышли в виде текста и пдф не смог их обработать и выкинул как есть но я думаю что почистить их для итоговой формы распечатки несложно. кстати колонтитулов вообще никаких нет . точнее они есть в виде номера страницы, и верхний колонтитул это название объекта в каталоге mtree но это тоже можно подправить.... вот как то так. ещё раз привет всем кого давно не видел