ساخت pdf فارسی با php

برای ایجاد فایل pdf چند تا کتابخونه خوب برای php وجود داره dompdf,TCPDF و mPDF

من هر سه رو تست کردم و بی شک mPDF چه در پشتیانی زبان فارسی چه در سرعت و کارایی سرامد تر از بقیه هست.

 

برای شروع اول یک پروژه با composer ایجاد میکنیم

Composer create-project mpdf/mpdf:6.1

حالا فایل index.php با محتویات زیر را درست میکنیم

 

<?php 
require_once __DIR__ . '/vendor/autoload.php';
$mpdf = new \mPDF();
$html = <<<EOT
<!DOCTYPE>
<html>
 <head>
  <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cstyle%3E%0A%20%20%20%20body%20%7B%0A%20%20%20%20%20%20direction%3A%20rtl%3B%0A%20%20%20%20%20%20font-family%3Abyekan%2Carial%3B%0A%20%20%20%20%7D%0A%20%20%3C%2Fstyle%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;style&gt;" title="&lt;style&gt;" />
 </head>
 <body>
  <p>سلام ایران</p>
 </body>
</html>
EOT;
$mpdf->AddPage(); // force pagebreak
$mpdf->WriteHTML($html);
$mpdf->Output();

 

لیست تگ های قابل پشتیبانی توسط mpdf

Tag mPDF Display type CSS Description
<!–…–> Defines a comment
<!DOCTYPE> Defines the document type
<a> INLINE Defines a hyperlink
<abbr> Defines an abbreviation
<acronym> INLINE Not supported in HTML5. Defines an acronym
<address> BLOCK Defines contact information for the author/owner of a document
<applet> Not supported in HTML5. Defines an embedded applet
<area> Defines an area inside an image-map
<article> BLOCK Defines an article
<aside> BLOCK Defines content aside from the page content
<audio> Defines sound content
<b> INLINE Defines bold text
<base> Specifies the base URL/target for all relative URLs in a document
<basefont> Not supported in HTML5. Specifies a default color, size, and font for all text in a document
<bdi> INLINE Isolates a part of text that might be formatted in a different direction from other text outside it. mPDF≥6.0
<bdo> INLINE Overrides the current text direction
<big> INLINE Not supported in HTML5. Defines big text
<blockquote> BLOCK Defines a section that is quoted from another source
<body> Defines the document’s body
<br> Defines a single line break
<button> Defines a clickable button
<canvas> Used to draw graphics, on the fly, via scripting (usually JavaScript)
<caption> BLOCK/TABLE Defines a table caption
<center> BLOCK Not supported in HTML5. Defines centered text
<cite> INLINE Defines the title of a work
<code> INLINE Defines a piece of computer code
<col> Specifies column properties for each column within a <colgroup> element
<colgroup> Specifies a group of one or more columns in a table for formatting
<command> Defines a command button that a user can invoke
<datalist> Specifies a list of pre-defined options for input controls
<dd> BLOCK Defines a description of an item in a definition list
<del> INLINE Defines text that has been deleted from a document
<details> BLOCK Defines additional details that the user can view or hide
<dfn> Defines a definition term
<dir> Not supported in HTML5. Defines a directory list
<div> BLOCK Defines a section in a document
<dl> BLOCK Defines a definition list
<dt> BLOCK Defines a term (an item) in a definition list
<em> INLINE Defines emphasized text
<embed> Defines a container for an external (non-HTML) application
<fieldset> FORMS Groups related elements in a form
<figcaption>  BLOCK Defines a caption for a <figure> element
<figure>  BLOCK Specifies self-contained content
<font> INLINE Not supported in HTML5. Defines font, color, and size for text
<footer> BLOCK Defines a footer for a document or section
<form> FORMS Defines an HTML form for user input
<frame> Not supported in HTML5. Defines a window (a frame) in a frameset
<frameset> Not supported in HTML5. Defines a set of frames
<h1> to <h6> BLOCK Defines HTML headings
<head> Defines information about the document
<header> BLOCK Defines a header for a document or section
<hgroup> BLOCK Groups heading (<h1> to <h6>) elements
<hr> Defines a thematic change in the content
<html> Defines the root of an HTML document
<i> INLINE Defines a part of text in an alternate voice or mood
<iframe> Defines an inline frame
<img> INLINE Defines an image
<input> FORMFIELD Defines an input control
<ins> INLINE Defines a text that has been inserted into a document
<kbd> INLINE Defines keyboard input
<keygen> Defines a key-pair generator field (for forms)
<label> Defines a label for an <input> element
<legend> FORMFIELD   Defines a caption for a <fieldset>, < figure>, or <details> element
<li>  BLOCK Defines a list item
<link> Defines the relationship between a document and an external resource
<main> BLOCK Defines a main section
<map> Defines a client-side image-map
<mark> INLINE Defines marked/highlighted text
<menu> Defines a list/menu of commands
<meta> Defines metadata about an HTML document
<meter> INLINE Defines a scalar measurement within a known range (a gauge)
<nav> BLOCK Defines navigation links
<noframes> Not supported in HTML5. Defines an alternate content for users that do not support frames
<noscript> Defines an alternate content for users that do not support client-side scripts
<object> Defines an embedded object
<ol>  BLOCK Defines an ordered list
<optgroup> Defines a group of related options in a drop-down list
<option> FORMFIELD   Defines an option in a drop-down list
<output> Defines the result of a calculation
<p> BLOCK Defines a paragraph
<param> Defines a parameter for an object
<pre> BLOCK Defines preformatted text
<progress> Represents the progress of a task
<q> INLINE Defines a short quotation
<rp> Defines what to show in browsers that do not support ruby annotations
<rt> Defines an explanation/pronunciation of characters (for East Asian typography)
<ruby> Defines a ruby annotation (for East Asian typography)
<s> INLINE Defines text that is no longer correct
<samp> INLINE Defines sample output from a computer program
<script> Defines a client-side script
<section> BLOCK Defines a section in a document
<select> FORMFIELD Defines a drop-down list
<small> INLINE Defines smaller text
<source> Defines multiple media resources for media elements (<video> and <audio>)
<span> INLINE Defines a section in a document
<strike> INLINE Not supported in HTML5. Defines strikethrough text
<strong> INLINE Defines important text
<style> Defines style information for a document
<sub> INLINE Defines subscripted text
<summary> BLOCK Defines a visible heading for a <details> element
<sup> INLINE Defines superscripted text
<table> TABLE Defines a table
<tbody> TABLE Groups the body content in a table
<td> TABLE Defines a cell in a table
<textarea> FORMFIELD Defines a multiline input control (text area)
<tfoot> TABLE Groups the footer content in a table
<th> TABLE Defines a header cell in a table
<thead> TABLE Groups the header content in a table
<time> INLINE Defines a date/time
<title> Defines a title for the document
<tr> TABLE Defines a row in a table
<track> Defines text tracks for media elements (<video> and <audio>)
<tt> INLINE Not supported in HTML5. Defines teletype text
<u> INLINE Defines text that should be stylistically different from normal text
<ul> BLOCK Defines an unordered list
<var> INLINE Defines a variable
<video> Defines a video or movie
<wbr> Defines a possible line-break (treated as identical to soft-hyphen) mPDF ≥5.7

 

در رابطه با دستورات CSS هم بهتره از دستوراتی که چند مقدار باهم میگیرن مثل font استفاده نکنید چون کار نمیکنه به جاش از دستورات صریح استفاده کنید: font-family,font-size… البته تو نسخه ۶٫۱ که اینجوری هست.

بعد اینکه ممکنه مواردی ببینید که استایلتون تو مرورگر درست نشون میده ولی تو اینجا نه که طبیعی هست چون ممکنه هنوز تو mPDF پشتیبانی ندشه باشه تو این موارد پیشنهاد میکنم از inline-style تو خود تگ HTML استفاده کنید.

برای اینکه فونت دلخواه خودتون را استفاده کنید باید فونت را در پوشه vendor/mpdf/mpdf/ttfonts قرار بدید که برای من دو تا فایل byekan.ttf و byekan_bold.ttf هست بعد فایل config_fonts.php در مسیر vendor/mpdf/mpdf را باز کنید و به آرایه $this->fontdata مقدار زیر را اضافه کنید

 

"byekan" => array(
  'R' => "byekan.ttf", //regular
  'B' => "byekan.ttf", //bold, optional
//'I' => "byekan_italic.ttf" //italic, optional
//'BI' => "byekan_bold_italic.ttf"//bold and italic, optional
  'useOTL' => 0xFF,    
  'useKashida' => 75, 
)

 

یه نکته خیلی مهم اینکه فونتون باید جدول GDEF رو داشته باشه که این مورد من رو خیلی اذیت کرد چون از همین فونت یکان من هرچی نسخه استفاده میکردم خطا میداد که این جدول رو نداره

 

 

دو مقدار useOTL و useKashida تنظیمات مخصوص فونت های عربی و فارسی هستند میتونید توضیحشو اینجا بخونید.

Fatal error: Uncaught MpdfException: Warning - You cannot set this font (byekan.ttf) to use OTL, as 
it does not include OTL tables (or at least, not a GDEF table)

دانلود 39 فارسی استاندارد برای استفاده در mpdf

  1. اولین نفری باشید که دیدگاه خود را ثبت می کند!
  1. No trackbacks yet.
« تنظیمات mpdf برای ساخت pdf
اضافه کردن استایل مدیریت وردپرس به قالب »