gpt4 book ai didi

php - Zend_PDF : Remove html contents from PDF document

转载 作者:搜寻专家 更新时间:2023-10-31 21:14:28 25 4
gpt4 key购买 nike

我在自定义 Controller 中创建了函数 getPdf

public function getPdf()
{
$pdf = new Zend_Pdf();
$page = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);
$imagePath="C:\Users\Hp\Desktop\landscape3.jpg";
$image = Zend_Pdf_Image::imageWithPath($imagePath);
$page->drawImage($image, 40,764,240, 820);
$pdf->pages[] = $page;
$pdf->save('myfile.pdf');
}

它生成带图像的 PDF,但位于 magento1.7 文件夹中。我试过以下几行

$pdfString = $pdf->render();
header("Content-Disposition: attachment; filename=mydownloads.pdf");
header("Content-type: application/x-pdf");
echo $pdfString;

它在 Downloads 文件夹中生成 PDF 文档,但是当我打开它时显示错误消息:Adobe Reader 无法打开 myfile.pdf 因为它不是受支持的文件类型或因为文件已损坏.... .........当我在文本编辑器(记事本)中打开 mydownloads.pdf 时,我注意到存在 html 内容(调用 getPdf() 函数的当前 phtml 文件的内容)和 pdf 自己的内容。我什至试图通过使用禁用 magento1.7 中的 View 渲染

$vr = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); 
$vr->setNoRender(true);
$layout = Zend_Layout::getMvcInstance();
$layout->disableLayout();

但不幸的是,它在 magento1.7 中不起作用。然后我尝试通过删除这两行 header 函数来回显 $pdfString 的内容
喜欢

 $pdfString = $pdf->render();
return $pdfString;

它只是包含了 Pdf 自己的内容。然后我意识到html内容的存在是由于这两行

header("Content-Disposition: attachment; filename=mydownloads.pdf");
header("Content-type: application/x-pdf");

谁能帮我解决这个问题。这样就在下载文件夹中生成了 PDF 文档。如何从 pdf 文档中删除 html 内容?

最佳答案

创建 PDF 文件

要在您选择的服务器文件夹中创建 PDF 文档,您可以使用如下内容:

$sImagePath = 'C:\Users\Hp\Desktop\landscape3.jpg';
$sPdfPath = 'C:\Users\Hp\Desktop\my.pdf';

$oPdf = new Zend_Pdf();
$oPage = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);
$oImg = Zend_Pdf_Image::imageWithPath($sImagePath);
$oPage->drawImage($oImg, 40, 764, 240, 820);
$oPdf->pages[] = $oPage;
$sContent = $oPdf->render();
file_put_contents($sPdfPath, $sContent);

提供下载链接

您似乎还想为您的用户提供一个链接,以便他们可以在创建 PDF 后下载它。参见 How to make PDF file downloadable in HTML link?有关更多信息。

使用 Controller 创建和下载的例子

请注意,这是一个快速而肮脏的 hack,滥用 Mage_Cms_IndexController 只是为了快速证明和演示所使用的原理。无论如何,将其移植到您的自定义 Controller 应该是小菜一碟。

在新的 Magento 1.7.0.2 实例上使用 FF15 和 IE9 测试并正常工作:

class Mage_Cms_IndexController extends Mage_Core_Controller_Front_Action
{

const PDF_PATH = '/home/user/public_html/magento-1-7-0-2/';

public function indexAction($coreRoute = null)
{

// Create the PDF file
$sImagePath = '/home/user/public_html/magento-1-7-0-2/media/catalog/category/furniture.jpg';
$sPdfPath = self::PDF_PATH . 'myfurniture.pdf';
$oPdf = new Zend_Pdf();
$oPage = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);
$oImg = Zend_Pdf_Image::imageWithPath($sImagePath);
$oPage->drawImage($oImg, 40, 764, 240, 820);
$oPdf->pages[] = $oPage;
$sContent = $oPdf->render();
file_put_contents($sPdfPath, $sContent);

// Echo the download link
echo '<a href="cms/index/download/pdf/myfurniture">Download myfurniture.pdf</a>';
return;

/*
$pageId = Mage::getStoreConfig(Mage_Cms_Helper_Page::XML_PATH_HOME_PAGE);
if (!Mage::helper('cms/page')->renderPage($this, $pageId)) {
$this->_forward('defaultIndex');
}
*/

}

public function downloadAction()
{

// Cancel if the `pdf` param is missing
if (!$sPdfName = $this->getRequest()->getParam('pdf', false)) {
return $this->_forward('noRoute');
}

// Sanitize passed value and form path
$sPdfName = preg_replace('[a-z0-9]', '', $sPdfName);
$sPdfPath = self::PDF_PATH . $sPdfName . '.pdf';

// Cancel if file doesn't exist or is unreadable
if (!file_exists($sPdfPath) || !is_readable($sPdfPath)) {
return $this->_forward('noRoute');
}

// Set proper headers
header('Content-Type: application/pdf');
header("Content-Disposition: attachment; filename=" . urlencode($sPdfName . '.pdf'));
header('Content-Transfer-Encoding: binary');
header("Content-Length: " . filesize($sPdfPath));

// Send
readfile($sPdfPath);

}

// :

}

只需暂时将此复制/粘贴到您的

app/code/core/Mage/Cms/controllers/IndexController.php

文件,调整路径,开始测试。

加载 Magento 安装的主页应该会显示 PDF 的下载链接。

关于php - Zend_PDF : Remove html contents from PDF document,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12190591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com