定制 quickshiftin/php-pdf-invoice 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

quickshiftin/php-pdf-invoice

Composer 安装命令:

composer require quickshiftin/php-pdf-invoice

包简介

Generate PDF files for your application's invoices with PHP

README 文档

README

This project uses a PDF invoice generator extracted from Magento for general use via Composer. You can easily integrate your existing domain model and start generating PDF invoices that look like this:

Example Invoice PDF

Features

  • Generate Invoice PDF documents
  • Integrate your domain model easily by implementing Order and OrderItem interfaces
  • Composer distribution
  • Change background and font colors, font types, line color and provide custom logo
  • Automatically create multiple pages based on number of line items

Install via Composer

./composer.phar require quickshiftin/php-pdf-invoice

Usage

Integration boilerplate - connecting your existing domain model to the generator

To integrate your existing application's orders, simply provide two classes that implement Quickshiftin\Pdf\Invoice\Spec\Order and Quickshiftin\Pdf\Invoice\Spec\OrderItem

OrderItem interface implementation

namespace MyApp;
use Quickshiftin\Pdf\Invoice\Spec\OrderItem;

// Implement the Order Item methods below
class MyOrderItem interface implements OrderItem
{
    /**
     * The name or description of the product
     * @return string
     */
    public function getName();

    /**
     * The 'SKU' or unique identifier for your product
     * @return string
     */
    public function getSku();

    /**
     * The quantity sold
     * @return int
     */
    public function getQuantity();

    /**
     * The price per unit
     * @return float
     */
    public function getPricePerUnit();

    /**
     * The price including tax
     * @return flaot
     */
    public function getPrice();

    /**
     * The sales tax amount in dollars
     * @return float
     */
    public function getSalesTaxAmount();
}

Order interface implementation

use Quickshiftin\Pdf\Invoice\Spec\Order;

// Implement the order methods below
class MyOrder implements Order
{
    /**
     * Get the sub-total, eclusive of shipping and tax.
     * @return float
     */
    public function getPriceBeforeShippingNoTax();

    /**
     * Get the shipping charge if any
     * @return float
     */
    public function getCustomerShipCharge();

    /**
     * Get the sales tax amount, eg .08 for 8%
     * @return float
     */
    public function getSalesTaxAmount();

    /**
     * Get the total cost including shipping and tax
     * @return float
     */
    public function getTotalCost();

    /**
     * Get the full billing address for the customer
     * @return string
     */
    public function getFullBillingAddress();

    /**
     * Get the payment method, EG COD, Visa, PayPal etc
     * @return string
     */
    public function getPaymentMethod();

    /**
     * Get the full shipping address for the order
     * @return string
     */
    public function getFullShippingAddress();

    /**
     * Get the name of the shipping method, EG UPS, FedEx, etc
     * @return string
     */
    public function getShippingMethodName();

    /**
     * Get an array of OrderItem objects
     * @note This should return an array of instances of a class where you implement Quickshiftin\Pdf\Invoice\Spec\OrderItem
     * @return array
     */
    public function getOrderItems();

    /**
     * Get the id of the order
     * @return int|string
     */
    public function getOrderId();

    /**
     * Get the date of the sale
     * @return DateTime
     */
    public function getSaleDate();
}

Implementation suggestion

Since these are interfaces, you can create a new class that wraps your existing OrderItem objects. If there are no name collisions you could also consider implementing directly on your existing OrderItem class.

Building & Styling your Invoice PDFs

This system uses Zend_Pdf (from ZF1) under the hood. The package provides Quickshiftin\Pdf\Invoice\Factory which is a wrapper for instantiating classes from Zend_Pdf. You'll use these objects to customize the appearance of your PDFs.

We also assume you have an instance of an order object which implements Quickshiftin\Pdf\Invoice\Spec\Order as described above that is stored in a variable called $myOrder.

use Quickshiftin\Pdf\Invoice\Invoice as PdfInvoice;
use Quickshiftin\Pdf\Invoice\Factory as InvoiceFactory;

$oInvoiceFactory = new InvoiceFactory();
$oInvoicePdf     = new PdfInvoice();

// Configure fonts - just put ttf font files somewhere your project can access them
$oInvoicePdf->setRegularFontPath(__DIR__ . '/../assets/Arial.ttf');
$oInvoicePdf->setBoldFontPath(__DIR__ . '/../assets/Arial Bold.ttf');
$oInvoicePdf->setItalicFontPath(__DIR__ . '/../assets/Arial Italic.ttf');

// Set Colors
$red    = '#d53f27';
$yellow = '#e8e653';

// Title section of invoice
// Background color for title section of invoice, the default is white
$oInvoicePdf->setTitleBgFillColor($oInvoiceFactory->createColorHtml($yellow));
$oInvoicePdf->setTitleFontColor($oInvoiceFactory->createColorHtml('black'));

// Header sections of invoice
$oInvoicePdf->setHeaderBgFillColor($oInvoiceFactory->createColorHtml($red));
$oInvoicePdf->setBodyHeaderFontColor($oInvoiceFactory->createColorHtml('white'));

// Body section of invoice
$oInvoicePdf->setBodyFontColor($oInvoiceFactory->createColorHtml('black'));

// Line color of invoice
$oInvoicePdf->setLineColor($oInvoiceFactory->createColorGrayscale(0));

// Configure logo
$oInvoicePdf->setLogoPath(__DIR__ . '/../assets/fake-logo.jpg');

// Build the PDF
// $oPdf is an instance of Zend_Pdf
$oPdf = $oInvoicePdf->getPdf($myOrder);

// A string rendition, you could echo this to the browser with headers to implement a download
$pdf = $oPdf->render();

// You can also simply save it to a file
file_put_contents('/tmp/test.pdf', $pdf);

Notes

You can look at the test directory for usage insights. Issues and PRs welcome!

统计信息

  • 总下载量: 207
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 17
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 16
  • Watchers: 2
  • Forks: 7
  • 开发语言: PHP

其他信息

  • 授权协议: OSL-3.0
  • 更新时间: 2017-08-17

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固