En PHP 4, tout d'abord, une ressource PDF doit être récupérée avec l'appel à une fonction comme



Documents pareils
WEB page builder and server for SCADA applications usable from a WEB navigator

Instructions Mozilla Thunderbird Page 1

Le passé composé. C'est le passé! Tout ça c'est du passé! That's the past! All that's in the past!

Application Form/ Formulaire de demande

Utiliser une WebCam. Micro-ordinateurs, informations, idées, trucs et astuces

How to Login to Career Page

Contents Windows

Dans une agence de location immobilière...

calls.paris-neuroscience.fr Tutoriel pour Candidatures en ligne *** Online Applications Tutorial

DOCUMENTATION - FRANCAIS... 2

If you understand the roles nouns (and their accompanying baggage) play in a sentence...

Tammy: Something exceptional happened today. I met somebody legendary. Tex: Qui as-tu rencontré? Tex: Who did you meet?

that the child(ren) was/were in need of protection under Part III of the Child and Family Services Act, and the court made an order on

Our recommendation engine has come up with some personalized suggestions for you.

RAPID Prenez le contrôle sur vos données

Once the installation is complete, you can delete the temporary Zip files..

lundi 3 août 2009 Choose your language What is Document Connection for Mac? Communautés Numériques L informatique à la portée du Grand Public

Guide d'installation rapide TFM-560X YO.13

Academic Project. B2- Web Development. Resit Project. Version 1.0 Last update: 24/05/2013 Use: Students Author: Samuel CUELLA

APPENDIX 6 BONUS RING FORMAT

Editing and managing Systems engineering processes at Snecma

DOCUMENTATION MODULE BLOCKCATEGORIESCUSTOM Module crée par Prestacrea - Version : 2.0

Telecharger gratuitement convertisseur de fichier word en pdf

VTP. LAN Switching and Wireless Chapitre 4

Instructions pour mettre à jour un HFFv2 v1.x.yy v2.0.00

Tutoriel de formation SurveyMonkey

Principe de TrueCrypt. Créer un volume pour TrueCrypt

1.The pronouns me, te, nous, and vous are object pronouns.

Exemple PLS avec SAS

DOCUMENTATION - FRANCAIS... 2

Lesson Plan Physical Descriptions. belle vieille grande petite grosse laide mignonne jolie. beau vieux grand petit gros laid mignon

Nouveautés printemps 2013

3615 SELFIE. HOW-TO / GUIDE D'UTILISATION

MODERN LANGUAGES DEPARTMENT

Gestion des prestations Volontaire

Quick Start Guide This guide is intended to get you started with Rational ClearCase or Rational ClearCase MultiSite.

Package Contents. System Requirements. Before You Begin

Comprendre l impact de l utilisation des réseaux sociaux en entreprise SYNTHESE DES RESULTATS : EUROPE ET FRANCE

The new consumables catalogue from Medisoft is now updated. Please discover this full overview of all our consumables available to you.

CEST POUR MIEUX PLACER MES PDF

GIGABIT PCI DESKTOP ADAPTER DGE-530T. Quick Installation Guide+ Guide d installation+

Exercices sur SQL server 2000

TABLE DES MATIERES A OBJET PROCEDURE DE CONNEXION

CETTE FOIS CEST DIFFERENT PDF

Practice Direction. Class Proceedings

Module Title: French 4

AMENDMENT TO BILL 32 AMENDEMENT AU PROJET DE LOI 32

MELTING POTES, LA SECTION INTERNATIONALE DU BELLASSO (Association étudiante de lʼensaparis-belleville) PRESENTE :

Logitech Tablet Keyboard for Windows 8, Windows RT and Android 3.0+ Setup Guide Guide d installation

affichage en français Nom de l'employeur *: Lions Village of Greater Edmonton Society

Quel temps fait-il chez toi?

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition

RULE 5 - SERVICE OF DOCUMENTS RÈGLE 5 SIGNIFICATION DE DOCUMENTS. Rule 5 / Règle 5

Institut français des sciences et technologies des transports, de l aménagement

UML : Unified Modeling Language

MANUEL MARKETING ET SURVIE PDF

Compléter le formulaire «Demande de participation» et l envoyer aux bureaux de SGC* à l adresse suivante :

WiFi Security Camera Quick Start Guide. Guide de départ rapide Caméra de surveillance Wi-Fi (P5)

valentin labelstar office Made-to-measure label design. Conception des étiquettes sur mesure. Quality. Tradition. Innovation DRUCKSYSTEME

ANGULAR JS AVEC GDE GOOGLE

Get Instant Access to ebook Cest Maintenant PDF at Our Huge Library CEST MAINTENANT PDF. ==> Download: CEST MAINTENANT PDF

Contrôle d'accès Access control. Notice technique / Technical Manual

Notice Technique / Technical Manual

Ocs Inventory et GLPI s appuie sur un serveur LAMP. Je vais donc commencer par installer les paquets nécessaires.

English Q&A #1 Braille Services Requirement PPTC Q1. Would you like our proposal to be shipped or do you prefer an electronic submission?

APPENDIX 2. Provisions to be included in the contract between the Provider and the. Holder

DIPLOME NATIONAL DU BREVET TOUTES SERIES

Project 1 Experimenting with Simple Network Management Tools. ping, traceout, and Wireshark (formerly Ethereal)

Acce s aux applications informatiques Supply Chain Fournisseurs

Règlement sur le télémarketing et les centres d'appel. Call Centres Telemarketing Sales Regulation

GAME CONTENTS CONTENU DU JEU OBJECT OF THE GAME BUT DU JEU

France SMS+ MT Premium Description

Folio Case User s Guide

Tex: The book of which I'm the author is an historical novel.

THE SUBJUNCTIVE MOOD. Twenty-nineth lesson Vingt-neuvième leçon

Les Portfolios et Moodle Petit inventaire

PRESENT SIMPLE PRESENT PROGRESSIF

Support Orders and Support Provisions (Banks and Authorized Foreign Banks) Regulations

Guide d installation Deco Drain inc. DD200

Stockage du fichier dans une table mysql:

Règles et paramètres d'exploitation de Caparmor 2 au 11/12/2009. Pôle de Calcul Intensif pour la mer, 11 Decembre 2009

Thank you for choosing the Mobile Broadband USB Stick. With your USB Stick, you can access a wireless network at high speed.

AND / ET USER GUIDE UK HARDWIRED CONTROL PANEL UK GUIDE UTILISATEUR CENTRALE D ALARME FILAIRE F

Deadline(s): Assignment: in week 8 of block C Exam: in week 7 (oral exam) and in the exam week (written exam) of block D

DOCUMENTATION - FRANCAIS... 2

Present Tense (1) masc = masculine fem = feminine sing = singular pl = plural

DOCUMENTATION - FRANCAIS... 2

PAR RINOX INC BY RINOX INC PROGRAMME D INSTALLATEUR INSTALLER PROGRAM

THE FRENCH EXPERIENCE 1

Vanilla : Virtual Box

PARIS ROISSY CHARLES DE GAULLE

Eléments de statistique

Paxton. ins Net2 desktop reader USB

Micro-ordinateurs, informations, idées, trucs et astuces utiliser le Bureau à distance

SERVEUR DÉDIÉ DOCUMENTATION

Thank you for choosing the Mobile Broadband USB Stick. With your USB Stick, you can access a wireless network at high speed.

COUNCIL OF THE EUROPEAN UNION. Brussels, 18 September 2008 (19.09) (OR. fr) 13156/08 LIMITE PI 53

Formulaire de candidature pour les bourses de mobilité internationale niveau Master/ Application Form for International Master Scholarship Programme

IDENTITÉ DE L ÉTUDIANT / APPLICANT INFORMATION

Transcription:

1 sur 27 08.04.2008 18 Fonctions PDF Introduction Last updated: Sun, 25 Nov 2007 Les fonctions PDF permettent de créer des fichiers PDF en utilisant la bibliothèque PDFlib créée initialement par» Thomas Merz et qui est actuellement maintenue par» PDFlib GmbH. La documentation de cette section est uniquement destinée à être une introduction aux fonctions disponibles, et ne doit pas être considérée comme une référence exaustive. Reportez-vous à la documentation incluse dans la distribution de PDFlib pour plus de détails et d'explications. Elle fournit une excellente référence des capacités de PDFlib, et contient la documentation la plus à jour. Pour commencer, nous vous conseillons de regarder du côté des exemples fournis avec le paquet PDFlib. Ces exemples montrent la création d'un texte simple, de vecteurs ou encore de graphiques, en passant par l'utilisation de fonctions hauts niveaux comme PDI. Toutes les fonctions de la PDFlib et du module PHP ont des noms et des arguments identiques. Vous aurez à comprendre quelques concepts basiques de PDF et PostScript pour l'utiliser efficacement. Toutes les longueurs et coordonnées sont mesurées en points PostScript. Il y a généralement 72 points PostScript pour faire un pouche (2.54 cm), mais cela dépend de la résolution de sortie. Reportez-vous au manuel de référence PDFlib inclus dans la distribution de PDFlib pour plus de détails sur le système de coordonnées. Avec la version 6, PDFlib offre une API orientée objet pour PHP 5 en plus de l'api orientée fonctions pour PHP 4. Voici les plus grandes différences : En PHP 4, tout d'abord, une ressource PDF doit être récupérée avec l'appel à une fonction comme $p = PDF_new(); Cette ressource PDF est utilisée en tant que premier paramètre dans tous les prochains appels de fonctions, comme dans PDF_begin_document($p, "", ""). En PHP 5, un objet PDFlib est créé plutôt avec $p = new PDFlib(). Cet objet offre toutes les fonctions de l'api PDFlib en tant que méthodes, par exemple avec $p->begin_document("", ""). En plus, les exceptions ont été introduites en PHP 5 qui sont supportées dans la version 6 ou supérieure de la PDFlib. Lisez les exemples ci-dessous pour plus d'informations. Note: Si vous êtes intéressé par des alternatives gratuites pour générer des PDF, sans passer par des bibliothèques PDF, reportez-vous à cette entrée de la FAQ. Pré-requis PDFlib Lite est disponible en tant qu'open source. Cependant, la license de PDFlib Lite permet l'utilisation libre sous certaines conditions. PDFlib Lite supporte une partie des fonctionnalités de PDFlib ; reportez-vous au site web de PDFlib pour plus de détails. La version complète de PDFlib est disponible en téléchargement sur» http://www.pdflib.com/products/pdflib-family/, mais impose l'achat d'une license pour l'utiliser commercialement. Problèmes avec les anciennes versions de PDFlib Toutes les versions de PHP 4 éditées après le 9 Mars 2000 ne suportent pas les versions de PDFlib plus anciennes que PDFlib 3.0. PDFlib 4.0 et plus récent est supporté par PHP 4.3.0 et plus récent.

2 sur 27 08.04.2008 18 Installation Cette extension» PECL n'est pas intégrée à PHP. Des informations sur l'installation de ces extensions PECL peuvent être trouvées dans le chapitre du manuel intitulé Installation des extensions PECL. D'autres informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs ainsi qu'un CHANGELOG, peuvent être trouvées ici :» http://pecl.php.net/package/pdflib. Pour inclure le support de la PDFlib dans votre PHP < 4.3.9, il faut compiler PHP avec l'option --with-pdflib[=dir]. DIR est le dossier d'installation de PDFlib et, par défaut, il vaut /usr/local. Types de ressources PDF_new() crée un nouvel objet PDFlib, nécessaire aux fonctions PDF. Remarque sur les fonctions obsolètes de la PDFlib Depuis PHP 4.0.5, l'extension PHP pour la PDFlib est officiellement supportée par PDFlib GmbH. Cela signifie que toutes les fonctions décrites dans le manuel de référence de la PDFlib (PDFlib V3.0 ou supérieur) sont supportées par PHP 4 avec exactement la même signification et les mêmes paramètres. Cepdentant, avec la PDFlib V5.0.4 ou supérieure, tous les paramètres doivent être spécifiés. Pour des raisons de compatibilité, l'implémentation de la PDFlib supporte la plupart des fonctions obsolètes, mais elles doivent être remplacées par leur nouvelle version. PDFlib GmbH ne fournira aucun support pour les problèmes survenant lors de l'utilisation de ces fonctions obsolètes. La documentation de cette section indique les anciennes fonctions comme "obsolètes" et donne la fonction qui doit être utilisée à la place. Exemples La plupart des fonctions sont simples d'emploi. Le plus difficile est probablement de créer un fichier PDF simple. L'exemple suivant devrait vous mettre sur les rails. Il est développé en PHP 4 et crée un fichier hello.pdf d'une page. Il définit quelques champs de contenu et charge la police Helvetica-Bold et affiche le texte "Bonjour le monde (dit PHP)!". Example#1 Exemple "Bonjour le monde!" avec PDFlib en PHP 4 $p = PDF_new(); /* Ouvre un nouveau fichier PDF ; insère un nom de fichier pour créer le PDF sur le disqu if (PDF_begin_document($p, "", "") == 0) die("erreur : ". PDF_get_errmsg($p)); PDF_set_info($p, "Creator", "hello.php"); PDF_set_info($p, "Author", "Rainer Schaaf"); PDF_set_info($p, "Title", "Bonjour le monde (PHP)!"); PDF_begin_page_ext($p, 595, 842, ""); $font = PDF_load_font($p, "Helvetica-Bold", "winansi", ""); PDF_setfont($p, $font, 24.0); PDF_set_text_pos($p, 50, 700); PDF_show($p, "Bonjour le monde "); PDF_continue_text($p, "(dit PHP)!"); PDF_end_page_ext($p, ""); PDF_end_document($p, ""); $buf = PDF_get_buffer($p); $len = strlen($buf); header("content-type: application/pdf"); header("content-length: $len"); header("content-disposition: inline; filename=hello.pdf"); print $buf; PDF_delete($p);

3 sur 27 08.04.2008 18 L'exemple suivant vient avec la distribution de la PDFlib pour PHP 5. Il utilise le nouveau gestionnaire d'exceptions ainsi que les nouvelles fonctionnalités objets disponible en PHP 5. Il crée le fichier hello.pdf d'une seule page. Il définit quelques champs de contenu et charge la police Helvetica-Bold et affiche le texte "Bonjour le monde (dit PHP)!". Example#2 Exemple "Bonjour le monde!" avec PDFlib en PHP 5 try $p = new PDFlib(); /* Ouvre un nouveau fichier PDF ; insère un nom de fichier pour créer le PDF sur le d if ($p->begin_document("", "") == 0) die("erreur : ". $p->get_errmsg()); $p->set_info("creator", "hello.php"); $p->set_info("author", "Rainer Schaaf"); $p->set_info("title", "Bonjour le monde (PHP)!"); $p->begin_page_ext(595, 842, ""); $font = $p->load_font("helvetica-bold", "winansi", ""); $p->setfont($font, 24.0); $p->set_text_pos(50, 700); $p->show("bonjour le monde "); $p->continue_text("(dit PHP)!"); $p->end_page_ext(""); $p->end_document(""); $buf = $p->get_buffer(); $len = strlen($buf); header("content-type: application/pdf"); header("content-length: $len"); header("content-disposition: inline; filename=hello.pdf"); print $buf; catch (PDFlibException $e) die("une exception PDFlib est survenu dans l'exemple hello :\n". "[". $e->get_errnum(). "] ". $e->get_apiname(). ": ". $e->get_errmsg(). "\n"); catch (Exception $e) die($e); $p = 0; Table of Contents PDF_activate_item Active un élément de structure ou un autre élément de contenu PDF_add_annotation [Obsolète] Ajoute une annotation PDF_add_bookmark [Obsolète] Ajoute un signet dans la page courante PDF_add_launchlink [Obsolète] Ajoute une annotation de lancement dans la page PDF courante PDF_add_locallink [Obsolète] Ajoute une annotation de lien dans la page PDF courante PDF_add_nameddest Crée une destination nommée PDF_add_note [Obsolète] Ajoute une annotation dans la page PDF courante

4 sur 27 08.04.2008 18 PDF_add_outline [Obsolète] Ajoute un signet dans la page courante PDF_add_pdflink [Obsolète] Ajoute une annotation sur un lien vers un fichier dans la page PDF courante PDF_add_table_cell Ajoute une cellule à un nouveau tableau ou un tableau existant PDF_add_textflow Crée un flux de texte ou ajoute du texte à un flux de texte existant PDF_add_thumbnail [Obsolète] Ajoute une miniature sur la page PDF courante PDF_add_weblink [Obsolète] Ajoute un lien web sur la page PDF courante PDF_arc Dessine un arc de cercle PDF dans le sens anti-horaire PDF_arcn Dessine un arc de cercle dans le sens horaire PDF_attach_file [Obsolète] Ajoute un fichier attaché à la page PDF PDF_begin_document Crée un nouveau fichier PDF PDF_begin_font Commence une définition de police de type 3 PDF_begin_glyph Commence une définition de glyphe pour les polices de tye 3 PDF_begin_item Ouvre un élément de structure ou un autre élément de contenu PDF_begin_layer Commence une interface PDF_begin_page_ext Commence une nouvelle page PDF_begin_page [Obsolète] Initialise une nouvelle page de document PDF PDF_begin_pattern Initialise un nouveau pattern PDF PDF_begin_template_ext Commence une définition de template PDF_begin_template Initialise un nouveau template PDF (obsolète) PDF_circle Dessine un cercle dans un document PDF PDF_clip Modifie le chemin de clipping PDF PDF_close_image Ferme une image dans un document PDF PDF_close_pdi_page Ferme la page PDF PDF_close_pdi Ferme le fichier PDF d'entrée (obsolète) PDF_close [Obsolète] Ferme le fichier PDF PDF_closepath_fill_stroke Termine le chemin, dessine les bords et remplit la forme PDF_closepath_stroke Termine le chemin et dessine les bords PDF_closepath Termine le chemin PDF courant PDF_concat Concatène une matrice avec le CTM PDF_continue_text Affiche du texte à la prochaine ligne PDF PDF_create_3dview Crée une vue 3D PDF_create_action Crée une action pour des objets ou des événements PDF_create_annotation Crée une annotation rectangulaire PDF_create_bookmark Crée un signet PDF_create_field Crée un champ de formulaire PDF_create_fieldgroup Crée un groupe de champs dans un formulaire PDF_create_gstate Crée un objet graphique PDF_create_pvf Crée un fichier PDFlib virtuel PDF_create_textflow Crée un objet de flux de texte PDF_curveto Dessine une courbe de Bezier PDF_define_layer Crée une définition d'interface PDF_delete_pvf Efface un fichier virtuel PDFlib PDF_delete_table Efface un tableau PDF_delete_textflow Efface un objet de flux de texte PDF_delete Efface un objet PDF PDF_encoding_set_char Ajoute un nom de glyphe et/ou une valeur Unicode PDF_end_document Ferme un fichier PDF PDF_end_font Termine une définition de police de type 3

5 sur 27 08.04.2008 18 PDF_end_glyph Termine la définition d'un glyphe pour les polices de type 3 PDF_end_item Ferme la structure d'un élément ou un autre élément de contenu PDF_end_layer Désactive toutes les interfaces actives PDF_end_page_ext Termine une page PDF_end_page Termine la page PDF courante PDF_end_pattern Termine le pattern PDF PDF_end_template Termine le template PDF PDF_endpath Termine le chemin courant PDF_fill_imageblock Remplit un bloc d'image avec des données variables PDF_fill_pdfblock Remplit un bloc de contenu avec des données variables PDF_fill_stroke Remplit et passe le pinceau sur le chemin PDF courant PDF_fill_textblock Remplit un bloc de texte avec des données variables PDF_fill Remplit le chemin PDF courant avec la couleur courante PDF_findfont [Obsolète] Prépare une police pour utilisation ultérieure PDF_fit_image Place une image ou un template PDF_fit_pdi_page Place une page PDF importée PDF_fit_table Place un tableau sur la page PDF_fit_textflow Formate un flux de texte dans un espace rectangulaire PDF_fit_textline Place un simple ligne de texte PDF_get_apiname Récupère le nom d'une fonction de l'api qui a échouée PDF_get_buffer Lit le tampon contenant le fichier PDF généré PDF_get_errmsg Récupère le texte d'une erreur PDF_get_errnum Récupère un numéro d'erreur PDF_get_font [Obsolète] Charge une police PDF_get_fontname [Obsolète] Lit le nom de la police PDF_get_fontsize [Obsolète] Gère les polices PDF_get_image_height [Obsolète] Retourne la hauteur d'une image PDF_get_image_width [Obsolète] Retourne la largeur d'une image PDF_get_majorversion [Obsolète] Retourne le numéro de version majeur de PDFlib PDF_get_minorversion [Obsolète] Retourne le numéro de version mineure de PDFlib PDF_get_parameter Lit certains paramètres PDF_get_pdi_parameter Lit des paramètres textuels dans le document PDI (obsolète) PDF_get_pdi_value Lit des paramètres numériques dans le document PDF d'entrée (obsolète) PDF_get_value Lit certains paramètres numériques PDF_info_font Récupère des informations détaillées sur une police chargée PDF_info_matchbox Récupère les informations d'une boîte PDF_info_table Récupère les informations d'un tableau PDF_info_textflow Récupère le statut d'un flux de texte PDF_info_textline Effectue le formattage d'une ligne de texte et récupère la matrice PDF_initgraphics Remet à zéro l'environnement graphique PDF PDF_lineto Dessine une ligne PDF PDF_load_3ddata Charge un modèle 3D PDF_load_font Cherche et prépare une police PDF_load_iccprofile Cherche et prépare un profile ICC PDF_load_image Ouvre un fichier image PDF_makespotcolor Place un point de couleur PDF PDF_moveto Place le point courant PDF PDF_new Crée un nouvel objet PDF PDF_open_ccitt [Obsolète] Ouvre une image contenant des données brutes CCITT

6 sur 27 08.04.2008 18 PDF_open_file [Obsolète] Ouvre un nouveau fichier PDF PDF_open_gif [Obsolète] Ouvre une image GIF PDF_open_image_file [Obsolète] Lit une image depuis un fichier PDF_open_image [Obsolète] Ouvre une image PDF_open_jpeg [Obsolète] Ouvre une image JPEG PDF_open_memory_image [Non supporté] Ouvre une image créée en mémoire par PHP PDF_open_pdi_page Prépare une page PDF_open_pdi Ouvre un fichier PDF (obsolète) PDF_open_tiff [Obsolète] Ouvre une image TIFF PDF_pcos_get_number Récupère la valeur du chemin pcos PDF_pcos_get_stream Récupère le contenu du chemin pcos PDF_pcos_get_string Récupère la valeur du chemin pcos PDF_place_image [Obsolète] Place une image dans la page PDF_place_pdi_page [Obsolète] Place une page dans le document PDF_process_pdi Traite un document PDF importé PDF_rect Dessine un rectangle PDF_restore Rétablit l'ancien environnement graphique PDF PDF_resume_page Réouvre une page PDF_rotate Configure la rotation PDF_save Sauve l'environnement graphique courant PDF_scale Configure l'échelle du document PDF_set_border_color [Obsolète] Configure la couleur des bords autour des liens et annotations PDF_set_border_dash [Obsolète] Configure le style des lignes autour des liens des annotations PDF_set_border_style [Obsolète] Choisit le style de bord autour des liens et annotations PDF_set_char_spacing [Obsolète] Configure l'espacement des caractères PDF_set_duration [Obsolète] Configure la durée entre deux pages PDF_set_gstate Active un objet graphique PDF_set_horiz_scaling [Obsolète] Configure l'échelle horizontale du texte PDF_set_info_author [Obsolète] Remplit le champ d'auteur du document PDF_set_info_creator [Obsolète] Remplit le champ de créateur du document PDF_set_info_keywords [Obsolète] Remplit le champ de mots-clés du document PDF_set_info_subject [Obsolète] Remplit le champ de sujet du document PDF_set_info_title [Obsolète] Remplit le champ de titre du document PDF_set_info Remplit un champ de l'en-tête de document PDF PDF_set_layer_dependency Définit les liens entre les interfaces PDF_set_leading [Obsolète] Configure la distance entre deux lignes de texte PDF_set_parameter Modifie certains paramètres PDF_set_text_matrix [Obsolète] Configure la matrice de texte PDF_set_text_pos Modifie la position du texte PDF_set_text_rendering [Obsolète] Détermine le rendu du texte PDF_set_text_rise [Obsolète] Configure l'élévation de texte PDF_set_value Modifie certains paramètres numériques PDF_set_word_spacing [Obsolète] Configure l'espace entre deux mots PDF_setcolor Configure la couleur de dessin et de remplissage PDF_setdash Configure le mode de pointillé PDF_setdashpattern Définit un modèle de masque PDF_setflat Configure la position à plat (flatness) PDF_setfont Configure la police courante PDF_setgray_fill [Obsolète] Configure la couleur de remplissage à un niveau de gris

7 sur 27 08.04.2008 18 PDF_setgray_stroke [Obsolète] Configure la couleur de dessin à un niveau de gris PDF_setgray [Obsolète] Configure la couleur de dessin et de remplissage à un niveau de gris PDF_setlinecap Configure le paramètre de linecap PDF_setlinejoin Configure le paramètre de linejoin PDF_setlinewidth Configure la largeur de ligne PDF_setmatrix Configure la matrice de transformation PDF_setmiterlimit Configure la "miter limit" PDF_setpolydash [Obsolète] Configure des pointillés complexes PDF_setrgbcolor_fill [Obsolète] Choisit la couleur utilisée pour le remplissage PDF_setrgbcolor_stroke [Obsolète] Choisit la couleur utilisée pour le dessin PDF_setrgbcolor [Obsolète] Choisit la couleur rgb de remplissage et de dessin PDF_shading_pattern Définit un masque d'ombrage PDF_shading Définit un dégradé PDF_shfill Remplit un espace avec un degradé PDF_show_boxed [Obsolète] Affiche le texte dans un cadre PDF_show_xy Affiche un texte à une position donnée PDF_show Affiche le texte à la position courante PDF_skew Incline le système de coordonnées PDF_stringwidth Retourne la largeur d'un texte avec la police courante PDF_stroke Dessine la ligne le long du chemin PDF_suspend_page Suspend une page PDF_translate Effectue une translation de l'origine du système de coordonnées PDF_utf16_to_utf8 Convertit une chaîne UTF-16 en UTF-8 PDF_utf32_to_utf16 Convertie une chaîne UTF-32 en UTF-16 PDF_utf8_to_utf16 Convertit une chaîne UTF-8 en UTF-16 User Contributed Notes PDF SID TRIVEDI 20-Jan-2008 03:16 /* Folks, There is an excellent tutorial from Rasmus Lerdorf available at (It does not support I.E.) http://talks.php.net/show/osconpdf/ Where PHP Mastermind Guru (Father) explained nicely about text, fonts, images and their attributes with working snippets. Another tutorial can be found at www.devshed.com/c/a/php/building-pdf-documents-with-php-5 Hence following is the various size of PDF Document. Origin is at the lower left and the basic unit is the DTP pt. 1 pt = 1/72 inch = 0.35277777778 mm Some common page sizes Format Width Height US-Letter 612 792 US-Legal 612 1008 US-Ledger 1224 792

8 sur 27 08.04.2008 18 11x17 792 1224 A0 2380 3368 A1 A2 1684 1190 2380 1684 A3 842 1190 A4 A5 595 421 842 595 A6 297 421 B5 501 709 */ info at tecnick dot com 10-Jan-2008 09:54 For those of us that do not want to pay for a commercial license to use PDFlib I suggest TCPDF: http://tcpdf.sf.net TCPDF is an Open Source PHP class for generating PDF files on-the-fly without requiring external extensions. This class is already adopted by a large number of php projects such as phpmyadmin, Drupal, Joomla, Xoops, TCExam, etc. Starting from 2.1 version TCPDF supports UTF-8 Unicode and bidirectional languages such as Arabic and Hebrew. Ken McColl 21-Nov-2007 02:06 To get this to work on Windows do not use escapeshellcmd() From online help: Following characters are preceded by a backslash: #&;` *?~<>^()[]$\, \x0a and \xff. ' and " are escaped only if they are not paired. In Windows, all these characters plus % are replaced by a space instead. So you are probably passing duff paths to pdf2text.exe Removing escapeshellcmd worked for me. Just make darned sure you are in control of what is being passed through to your system call. kangaroo232002 at yahoo dot co dot uk 18-Nov-2007 09:25 To extend alex's example earlier, you can use a couple of switches inside the pdf doc to give you the total number of pages, without using any ext. I would have added the whole code, however the site keeps on saying "line is too long... yadayada". Open the doc using fopen("$file", "rb"); (for reading) Test the first approx 1000b for the following regex if(preg_match("/\/n\s+([0-9]+)/", $contents, $found)) return $found[1]; If that doesn't return anything, you have to read the rest of the file: preg_match_all("/\/type\s*\/pages\s*\/kids\s+ \[.*?\]\s*\/count\s+([0-9]+)/"); This may return more than one, so look through for the highest value, which is the total number of pages in your doc.

9 sur 27 08.04.2008 18 Jonathon Hibbard 06-Nov-2007 12:37 The other issue with DOMpdf is that it has some pretty painful flaws. You have to supply full paths to everything (images, includes, javascript files, etc). And boy, do i mean everything. Even then, it is not 100% sound. If you have complex sites, it cannot handle it. It instead breaks the design and only provides you with about a million broken images. Don't get me wrong, it's GREAT for use with lower-end more simple sites, but if you have a site that say, has a javascript navigation, flash, and a bunch of container divs, it's really not going to do the job. The above library seems to be the best fit, as about the only way to get high-end sites to work is just to manually write it out yourself using the functions above. Sorry to bust anyone's bubble. Good luck. spadmore1980 at gmail dot com 24-Oct-2007 12:23 http://www.fpdf.org/ is also quite good. Np lib install is required -Shelon Padmore taufiq at simplybuzz dot com 23-Oct-2007 10:13 There is XPDF Win32 binary package at SourceForge for pdftotext purpose that works. I've tried php codes below but didn't work. praokean at yahoo dot com 23-Aug-2007 02:08 dompdf is not so great PDF creator becouse don't support foreign charachters. Sam from dogmaconsult.de 15-Aug-2007 11:00 I seriously tried to get PDF parsing to work to use it in the indexing for fulltext search for a document management. But none of the pdf2text functions below worked for my test cases (among them an openoffice generated pdf file and a file generated by fpdf). But I found a REALLY WORKING SOLUTION! On linux systems, install the XPDF package. It comes with a tool called pdftotext. Use php code similar to the following to get the text content of your pdf files: <? $file = "test.pdf"; $outpath = preg_replace("/\.pdf$/", "", $file).".txt"; system("pdftotext ".escapeshellcmd($file), $ret); if ($ret == 0) $value = file_get_contents($outpath); unlink($outpath); print $value; if ($ret == 127) print "Could not find pdftotext tool."; if ($ret == 1) print "Could not find pdf file."; The solution works on all test cases and is much more powerful than any of the

10 sur 27 08.04.2008 18 previous pure php functions posted here, although only available on linux. tatlar at yahoo dot com 15-Aug-2007 01:49 http://www.digitaljunkies.ca/dompdf/index.php PHP5 class that converts HTML to PDF. From the website: "At its heart, dompdf is (mostly) CSS2.1 compliant HTML layout and rendering engine written in PHP. It is a style-driven renderer: it will download and read external stylesheets, inline style tags, and the style attributes of individual HTML elements. It also supports most presentational HTML attributes." david at metabin 19-Jul-2007 01:19 Easiest way to get the text of a pdf is to install xpdf (on redhat yum -y install xpdf) then run xpdftotext your.pdf - which will then generate your.txt. brain23 at gmx dot de 03-Jul-2007 04:28 For FPDF there also is an addon (FPDI) available, which let you import existing PDF documents: http://www.setasign.de/products/pdf-php-solutions/fpdi/ pitvanester at gemail dot com 25-Jun-2007 04:54 Sorry, both versions of pdf2txt don t work... jaymaity at gmail dot com 01-Jun-2007 02:22 Totally free open source alternative is also available without any license cost at http://fpdf.org/ jkndrkn at gmail dot com 03-May-2007 07:51 For those of us that do not want to pay for a commercial license to use PDFlib in a closed-source project, there are at least two good alternatives: FPDF and TCPDF http://www.fpdf.org/ PHP4 and PHP5 support http://sourceforge.net/projects/pdf-php PHP5 support only luc at phpt dot org 30-Mar-2007 07:09 I am trying to extract the text from PDF files and use it to feed a search engine (Intranet tool). I tried several functions "PDF2TXT" posted below, but not they do not produce the expected result. At least, all words need to be separated by spaces (then used as keywords), and the "junk" codes removed (for example: binary data, pictures...). I start modifying the interesting function posted by Swen, and here is the my current version that starts to work quite well (with PDF version 1.2). Sorry for having a quite different style of programming. Luc // Patch for pdf2txt() posted Sven Schuberth // Add/replace following code (cannot post full program, size limitation) // handles the verson 1.2

11 sur 27 08.04.2008 18 // New version of handlev2($data), only one line changed function handlev2($data) // grab objects and then grab their contents (chunks) $a_obj = getdataarray($data,"obj","endobj"); foreach($a_obj as $obj) $a_filter = getdataarray($obj,"<<",">>"); if (is_array($a_filter)) $j++; $a_chunks[$j]["filter"] = $a_filter[0]; $a_data = getdataarray($obj,"stream\r\n","endstream"); if (is_array($a_data)) $a_chunks[$j]["data"] = substr($a_data[0], strlen("stream\r\n"), strlen($a_data[0])-strlen("stream\r\n")-strlen("endstream")); // decode the chunks foreach($a_chunks as $chunk) // look at each chunk and decide how to decode it - by looking at the contents of the filter $a_filter = split("/",$chunk["filter"]); if ($chunk["data"]!="") // look at the filter to find out which encoding has been used if (substr($chunk["filter"],"flatedecode")!==false) $data =@ gzuncompress($chunk["data"]); if (trim($data)!="") // CHANGED HERE, before: $result_data.= ps2txt($data); $result_data.= PS2Text_New($data); else //$result_data.= "x"; return $result_data; // New function - Extract text from PS codes function ExtractPSTextElement($SourceString) $CurStartPos = 0; while (($CurStartText = strpos($sourcestring, '(', $CurStartPos))!== FALSE) // New text element found if ($CurStartText - $CurStartPos > 8) $Spacing = ' '; else $SpacingSize = substr($sourcestring, $CurStartPos, $CurStartText - $CurStartPos); if ($SpacingSize < -25) $Spacing = ' '; else $Spacing = ''; $CurStartText++; $StartSearchEnd = $CurStartText; while (($CurStartPos = strpos($sourcestring, ')', $StartSearchEnd))!== FALSE) if (substr($sourcestring, $CurStartPos - 1, 1)!= '\\') break; $StartSearchEnd = $CurStartPos + 1; if ($CurStartPos === FALSE) break; // something wrong happened

12 sur 27 08.04.2008 18 // Remove ending '-' if (substr($result, -1, 1) == '-') $Spacing = ''; $Result = substr($result, 0, -1); // Add to result $Result.= $Spacing. substr($sourcestring, $CurStartText, $CurStartPos - $CurStartText); $CurStartPos++; // Add line breaks (otherwise, result is one big line...) return $Result. "\n"; // Global table for codes replacement $TCodeReplace = array ('\(' => '(', '\)' => ')'); // New function, replacing old "pd2txt" function function PS2Text_New($PS_Data) global $TCodeReplace; // Catch up some codes if (ord($ps_data[0]) < 10) return ''; if (substr($ps_data, 0, 8) == '/CIDInit') return ''; // Some text inside (...) can be found outside the [...] sets, then ignored // => disable the processing of [...] is the easiest solution $Result = ExtractPSTextElement($PS_Data); // echo "Code=$PS_Data\nRES=$Result\n\n"; // Remove/translate some codes return strtr($result, $TCodeReplace); Sven.Schuberth(at)gmx.de 29-Mar-2007 08:38 I've improved the codesnipped for the pdf2txt version 1.2. Now its possible the translate pdf version >1.2 into plain text. Sven // Function : pdf2txt() // Arguments : $filename - Filename of the PDF you want to extract // Description : Reads a pdf file, extracts data streams, and manages // their translation to plain text - returning the plain // text at the end // Authors : Jonathan Beckett, 2005-05-02 // : Sven Schuberth, 2007-03-29 function pdf2txt($filename) $data = getfiledata($filename); $s=strpos($data,"%")+1; $version=substr($data,$s,strpos($data,"%",$s)-1); if(substr_count($version,"pdf-1.2")==0) return handlev3($data); else return handlev2($data);

13 sur 27 08.04.2008 18 // handles the verson 1.2 function handlev2($data) // grab objects and then grab their contents (chunks) $a_obj = getdataarray($data,"obj","endobj"); foreach($a_obj as $obj) $a_filter = getdataarray($obj,"<<",">>"); if (is_array($a_filter)) $j++; $a_chunks[$j]["filter"] = $a_filter[0]; $a_data = getdataarray($obj,"stream\r\n","endstream"); if (is_array($a_data)) $a_chunks[$j]["data"] = substr($a_data[0], strlen("stream\r\n"), strlen($a_data[0])-strlen("stream\r\n")-strlen("endstream")); // decode the chunks foreach($a_chunks as $chunk) // look at each chunk and decide how to decode it - by looking at the contents of the filter $a_filter = split("/",$chunk["filter"]); if ($chunk["data"]!="") // look at the filter to find out which encoding has been used if (substr($chunk["filter"],"flatedecode")!==false) $data =@ gzuncompress($chunk["data"]); if (trim($data)!="") $result_data.= ps2txt($data); else //$result_data.= "x"; return $result_data; //handles versions >1.2 function handlev3($data) // grab objects and then grab their contents (chunks) $a_obj = getdataarray($data,"obj","endobj"); $result_data=""; foreach($a_obj as $obj) //check if it a string if(substr_count($obj,"/gs1")>0) //the strings are between ( and ) preg_match_all(" \((.*?)\) ",$obj,$field,preg_set_order); if(is_array($field)) foreach($field as $data) $result_data.=$data[1]; return $result_data; function ps2txt($ps_data) $result = ""; $a_data = getdataarray($ps_data,"[","]");

14 sur 27 08.04.2008 18 if (is_array($a_data)) foreach ($a_data as $ps_text) $a_text = getdataarray($ps_text,"(",")"); if (is_array($a_text)) foreach ($a_text as $text) $result.= substr($text,1,strlen($text)-2); else // the data may just be in raw format (outside of [] tags) $a_text = getdataarray($ps_data,"(",")"); if (is_array($a_text)) foreach ($a_text as $text) $result.= substr($text,1,strlen($text)-2); return $result; function getfiledata($filename) $handle = fopen($filename,"rb"); $data = fread($handle, filesize($filename)); fclose($handle); return $data; function getdataarray($data,$start_word,$end_word) $start = 0; $end = 0; unset($a_result); while ($start!==false && $end!==false) $start = strpos($data,$start_word,$end); if ($start!==false) $end = strpos($data,$end_word,$start); if ($end!==false) // data is between start and end $a_result[] = substr($data,$start,$end-$start+strlen($end_word)); return $a_result; brendandonhue at comcast dot net 22-Aug-2006 05:35 Here is a function to test whether a file is a PDF without using any external library. define('pdf_magic', "\\x25\\x50\\x44\\x46\\x2d"); function is_pdf($filename) return (file_get_contents($filename, false, null, 0, strlen(pdf_magic)) === PDF_MAGIC)? true : false; It's not checking if the whole file is valid, just if the correct header is present at the beginning of the file. MAGnUm at magnumhome dot servehttp.com 17-Jul-2006 11:01 dompdf is also a great PDF creation interface. it basically converts your code to CSS and then builds the PDF from that with the absolute positions, and what not...

15 sur 27 08.04.2008 18 spingary at yahoo dot com 12-Jan-2006 09:55 I was having trouble with streaming inline PDf's using PHP 5.0.2, Apache 2.0.54. This is my code: <? header("pragma: public"); header("expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("last-modified: ". gmdate("d, d M Y H:i:s"). " GMT"); header("cache-control: must-revalidate"); header("content-type: application/pdf"); header("content-length: ".filesize($file)); header("content-disposition: inline; filename=$file"); header("accept-ranges: ".filesize($file)); readfile($file); exit(); It would work fine in Mozilla Firefox (1.0.7) but with IE (6.0.2800.1106) it would not bring up the Adobe Reader plugin and instead ask me to save it or open it as a PHP file. Oddly enough, I turned off ZLib.compression and it started working. I guess the compression is confusing IE. I tried leaving out the content-length header thinking maybe it was unmatched filesize (uncompressed number vs actual received compressed size), but then without it it screws up Firefox too. What I ended up doing was disabling Zlib compression for the PDF output pages using ini_set: <? ini_set('zlib.output_compression','off'); Maybe this will help someone. Will post over in the PDF section as well. ontwerp AT zonnet.nl 03-Nov-2005 08:01 I was searching for a lowcost/opensource option for combining static html files [as templates] and dynamic output from perl or php routines etc. And the sooner or later I found out that this was the most stable, 'speedest' and customizeable way to produce usable pdf 's with nice formatting : 1] create html page output [perl-> html output, direct html output from any app or php echo's etc. [sort these html files locally] 2] parse all html [inluding webimages links, tables font formatting etc] to [E]PS files with the perl app : html2ps [as mentioned beneath] http://user.it.uu.se/~jan/html2ps.html [sort all ps files by future pdf page positions] 3] use the free ps2pdf/ps2pdfwr linux application http://www.ps2pdf.com/convert/index.htm [uses gostscript, ghostview libs and so on etc] Has great formatting options like headers, footers, numbering etc [sort pdf files] 4] convert all pdf files to 1 pdf file with : pdftk [pdftoolkit], deliveres optional compressions/encryption, background stamps etc One should ask why using different scripts : - combination perl/php is great : perl is speedier at some issues like conversion to ps files in my experience - ps to pdf is quickier then direct php to pdf [in my exp.!] - I have total control over every files whenever i change html files as a template I use only editors or other app. for it [online or offline].

16 sur 27 08.04.2008 18 p.s. I had to make a opensource solution for creating simpel report analyses that's based on things like : - first page [name / title / #/ date] - some static info [like introduction, copyrights etc] - some dynamic info [outputted from php->dbase queries] combined with html tags/images etc. And this all mixed [so seperated in files for transparancy]. Also the 3 way manner : data-> html, html->ps, ps->pdf, is easier and quickier to program or adjust in every step. Correct me if i'm wrong [mail me to] ing. Valentijn Langendorff Design & Technologist ragnar at deulos dot com 08-Oct-2005 04:30 After one hole day understanding how pdflib works i got the conclusion that its enough hard to draw just with words to furthermore for drawing a line maybe you will need something like four lines of code, so i did my own functions to do the life easier and the code more understable to modify and draw. I also made a function that will draw a rect with the corners round and the posibility even to fill it ;) You can get it from http://www.deulos.com/pdf_php.php feel free to make suggestions or whatever u like ;o) 17-Sep-2005 08:26 some code that can be very helpful for starters. // Declare PDF File $pdf = pdf_new(); PDF_open_file($pdf); // Set Document Properties PDF_set_info($pdf, "author", "Alexander Pas"); PDF_set_info($pdf, "title", "PDF by PHP Example"); PDF_set_info($pdf, "creator", "Alexander Pas"); PDF_set_info($pdf, "subject", "Testing Code"); // Get fonts to use pdf_set_parameter($pdf, "FontOutline", "Arial=arial.ttf"); // get a custom font $font1 = PDF_findfont($pdf, "Helvetica-Bold", "winansi", 0); // declare default font $font2 = PDF_findfont($pdf, "Arial", "winansi", 1); // declare custom font & embed into file /* You can use the following Fontypes 14 safely (the default fonts) Courier, Courier-Bold, Courier-Oblique, Courier-BoldOblique Helvetica, Helvetica-Bold, Helvetica-Oblique, Helvetica-BoldOblique Times-Roman, Times-Bold, Times-Italic, Times-BoldItalic Symbol, ZapfDingbats */ // make the images $image1 = PDF_open_image_file($pdf, "gif", "image.gif"); //supported filetypes are: jpeg, tiff, gif, png. //Make First Page

17 sur 27 08.04.2008 18 PDF_begin_page($pdf, 450, 450); // page width and height. $bookmark = PDF_add_bookmark($pdf, "Front"); // add a top level bookmark. PDF_setfont($pdf, $font1, 12); // use this font from now on. PDF_show_xy($pdf, "First Page!", 5, 225); // show this text measured from the left top. pdf_place_image($pdf, $image1, 255, 5, 1); // last number will schale it. PDF_end_page($pdf); // End of Page. //Make Second Page PDF_begin_page($pdf, 450, 225); // page width and height. $bookmark1 = PDF_add_bookmark($pdf, "Chapter1", $bookmark); // add a nested bookmark. (can be nested multiple times.) PDF_setfont($pdf, $font2, 12); // use this font from now on. PDF_show_xy($pdf, "Chapter1!", 225, 5); PDF_add_bookmark($pdf, "Chapter1.1", $bookmark1); // add a nested bookmark (already in a nested one). PDF_setfont($pdf, $font1, 12); PDF_show_xy($pdf, "Chapter1.1", 225, 5); PDF_end_page($pdf); // Finish the PDF File PDF_close($pdf); // End Of PDF-File. $output = PDF_get_buffer($pdf); // assemble the file in a variable. // Output Area header("content-type: application/pdf"); //set filetype to pdf. header("content-length: ".strlen($output)); //content length header("content-disposition: attachment; filename=test.pdf"); // you can use inline or attachment. echo $output; // actual print area! // Cleanup PDF_delete($pdf); thodge at ipswich dot qld dot gov dot au 05-Sep-2005 07:22 Yet another addition to the PDF text extraction code last posted by jorromer. The code only seemed to work for PDF 1.2 (Acrobat 3.x) or below. This pdfextracttext function uses regular expressions to cover cases I have found in PDF 1.3 and 1.4 documents. The code also handles closing brackets in the text stream, which were ignored by the previous version. My regular expression skills are somewhat lacking, so improvements may possible by a more skilled programmer. I'm sure there are still cases that this function will not handle, but I haven't come across any yet... function pdf2string($sourcefile) $fp = fopen($sourcefile, 'rb'); $content = fread($fp, filesize($sourcefile)); fclose($fp); $searchstart = 'stream'; $searchend = 'endstream'; $pdftext = ''; $pos = 0; $pos2 = 0; $startpos = 0; while ($pos!== false && $pos2!== false) $pos = strpos($content, $searchstart, $startpos); $pos2 = strpos($content, $searchend, $startpos + 1);

18 sur 27 08.04.2008 18 if ($pos!== false && $pos2!== false) if ($content[$pos] == 0x0d && $content[$pos + 1] == 0x0a) $pos += 2; else if ($content[$pos] == 0x0a) $pos++; if ($content[$pos2-2] == 0x0d && $content[$pos2-1] == 0x0a) $pos2 -= 2; else if ($content[$pos2-1] == 0x0a) $pos2--; $textsection = substr( $content, $pos + strlen($searchstart) + 2, $pos2 - $pos - strlen($searchstart) - 1 ); $data = @gzuncompress($textsection); $pdftext.= pdfextracttext($data); $startpos = $pos2 + strlen($searchend) - 1; return preg_replace('/(\s)+/', ' ', $pdftext); function pdfextracttext($psdata) if (!is_string($psdata)) return ''; $text = ''; // Handle brackets in the text stream that could be mistaken for // the end of a text field. I'm sure you can do this as part of the // regular expression, but my skills aren't good enough yet. $psdata = str_replace('\)', '##ENDBRACKET##', $psdata); $psdata = str_replace('\]', '##ENDSBRACKET##', $psdata); preg_match_all( '/(T[wdcm*])[\s]*(\[([^\]]*)\] \(([^\)]*)\))[\s]*tj/si', $psdata, $matches ); for ($i = 0; $i < sizeof($matches[0]); $i++) if ($matches[3][$i]!= '') // Run another match over the contents. preg_match_all('/\(([^)]*)\)/si', $matches[3][$i], $submatches); foreach ($submatches[1] as $submatch) $text.= $submatch; else if ($matches[4][$i]!= '') $text.= ($matches[1][$i] == 'Tc'? ' ' : ''). $matches[4][$i]; // Translate special characters and put back brackets. $trans = array( '...' => ' ', '\205' '\221' => ' ', => chr(145), '\222' => chr(146), '\223' '\224' => chr(147), => chr(148),

19 sur 27 08.04.2008 18 '\226' => '-', '\267' => ' ', '\(' => '(', '\[' => '[', '##ENDBRACKET##' => ')', '##ENDSBRACKET##' => ']', chr(133) => '-', chr(141) => chr(147), chr(142) => chr(148), chr(143) => chr(145), chr(144) => chr(146), ); $text = strtr($text, $trans); return $text; 28-Aug-2005 06:58 If you want to display the number of pages (for example: page 1 of 3) then the following code could be helpful:... $pdf->begin_page_ext(842,595, "");.. add text,images,... $pdf->suspend_page(""); $pdf->begin_page_ext(842,595, "");.. add text,images,... $pdf->suspend_page("");... create all pages $pdf->resume_page("pagenumber 1");... add number of pages to page 1 $pdf->end_page_ext(""); $pdf->resume_page("pagenumber 2");... add number of pages to page 2 $pdf->end_page_ext("");... jorromer at uchile dot cl -- Krash 07-Jun-2005 07:51 I recently use mattb code below for the extraction of text from PDF files. I modify this code for only extract text fields. Hope i can help some one Here is the Function $text = pdf2string("file.pdf"); echo $text; function pdf2string($sourcefile) $fp = fopen($sourcefile, 'rb'); $content = fread($fp, filesize($sourcefile)); fclose($fp);

20 sur 27 08.04.2008 18 $searchstart = 'stream'; $searchend = 'endstream'; $pdfdocument = ''; $pos = 0; $pos2 = 0; $startpos = 0; while( $pos!== false && $pos2!== false ) $pos = strpos($content, $searchstart, $startpos); $pos2 = strpos($content, $searchend, $startpos + 1); if ($pos!== false && $pos2!== false) if ($content[$pos]==0x0d && $content[$pos+1]==0x0a) $pos+=2; else if ($content[$pos]==0x0a) $pos++; if ($content[$pos2-2]==0x0d && $content[$pos2-1]==0x0a) $pos2-=2; else if ($content[$pos2-1]==0x0a) $pos2--; $textsection = substr($content, $pos + strlen($searchstart) + 2, $pos2 - $pos - strlen($searchstart) - 1); $data = @gzuncompress($textsection); $data = ExtractText2($data); $startpos = $pos2 + strlen($searchend) - 1; if ($data === false) return -1; $pdfdocument.= $data; return $pdfdocument; function ExtractText2($postScriptData) $sw = true; $textstart = 0; $len = strlen($postscriptdata); while ($sw) $ini = strpos($postscriptdata, '(', $textstart); $end = strpos($postscriptdata, ')', $textstart+1); if (($ini>0) && ($end>$ini)) $valtext = strpos($postscriptdata,'tj',$end+1); if ($valtext == $end + 2) $text.= substr($postscriptdata,$ini+1,$end - $ini - 1); $textstart = $end + 1; if ($len<=$textstart) $sw=false; if (($ini == 0) && ($end == 0)) $sw=false; $trans = array("\\341" => "a","\\351" => "e","\\355" => "i","\\363" => "o","\\223" => "","\\224" => ""); $text = strtr($text, $trans); return $text; webadmin at secretscreen dot com 05-Apr-2005 11:51 I found this info about pdflib scope on a Chinese (I think) site and translated it. I was trying to do pdf_setfont and kept getting the wrong scope error. Turns out it has to be in the Page scope. So pdf_setfont will only work when called between pdf_begin_page and pdf_end_page. ######################################### When API of the PDFlib is called, the error, Can't - IN 'document' scope occurs There is a concept of " the scope " in the PDFlib, as for all API of the PDFlib it is called with some scope, the *1 which is decided This error occurs when it is called other than the scope where API is appointed. The chart below in reference, please verify API call position.

21 sur 27 08.04.2008 18 Path: PDF_moveto (), PDF_circle (), PDF_arc (), PDF_arcn (), PDF_rect () in each case PDF_stroke (), PDF_closepath_stroke (), PDF_fill (), PDF_fill_stroke (), PDF_closepath_fill_stroke (), PDF_clip (), PDF_endpath () the between Page: PDF_begin_page () with PDF_end_page () in between outside path Template: PDF_begin_template () with PDF_end_template () in between outside path Pattern: PDF_begin_pattern () with PDF_end_pattern () in between outside path Font: PDF_begin_font () with PDF_end_font () in between outside glyph Glyph: PDF_begin_glyph () with PDF_end_glyph () in between outside path Document: PDF_open_* () with PDF_close () in between outside page tempalte and pattern Object: The PDF_new () with the PDF_delete () it belongs to the other no scope in between the place Null: Outside object Any: All scopes other than ########################################## Hope this helps others as much as it helped me!!! chu61 dot tw at gmail dot com 07-Mar-2005 04:57 How to get how many pages in a PDF? I read PDF spec. V1.6 and find this: PDF set a "Page Tree Node" to define the ordering of pages in the document. The tree structure allows PDF applications, using little memory to quickly open a document containing thousands of pages. If a PDF have 63 pages, the page tree node will like this... 2 0 obj << /Type /Pages /Kidsn [ 4 0 R 10 0 R ] /Count 63 >> endobj <---- YES, got it [P.S] a PDF may not only a pages tree node, The right answer is in "root page tree node", if /Count XX with /Parent XXX node, it not "root page tree node" SO, You must find the node with /Count XX and Without /Parent terms, and you'll get total pages of PDF %PDF-1.0 ~ %PDF-1.5 all works Alex form Taipei,Taiwan mattb at bluewebstudios dot com 04-Feb-2005 10:44 I recently tested Donatas' code below for the extraction of text from PDF files. After running into a few problems where PDF files were not being read at all, I've modified it somewhat. It still isn't perfect, but should work great for searching. Thanks Donatas. $test = pdf2string("<pathtopdffile>"); echo "$test";

22 sur 27 08.04.2008 18 # Returns a -1 if uncompression failed function pdf2string($sourcefile) $fp = fopen($sourcefile, 'rb'); $content = fread($fp, filesize($sourcefile)); fclose($fp); # Locate all text hidden within the stream and endstream tags $searchstart = 'stream'; $searchend = 'endstream'; $pdfdocument = ""; $pos = 0; $pos2 = 0; $startpos = 0; # Iterate through each stream block while( $pos!== false && $pos2!== false ) # Grab beginning and end tag locations if they have not yet been parsed $pos = strpos($content, $searchstart, $startpos); $pos2 = strpos($content, $searchend, $startpos + 1); if( $pos!== false && $pos2!== false ) # Extract compressed text from between stream tags and uncompress $textsection = substr($content, $pos + strlen($searchstart) + 2, $pos2 - $pos - strlen($searchstart) - 1); $data = @gzuncompress($textsection); # Clean up text via a special function $data = ExtractText($data); # Increase our PDF pointer past the section we just read $startpos = $pos2 + strlen($searchend) - 1; if( $data === false ) return -1; $pdfdocument = $pdfdocument. $data; return $pdfdocument; function ExtractText($postScriptData) while( (($textstart = strpos($postscriptdata, '(', $textstart)) && ($textend = strpos($postscriptdata, ')', $textstart + 1)) && substr($postscriptdata, $textend - 1)!= '\\') ) $plaintext.= substr($postscriptdata, $textstart + 1, $textend - $textstart - 1); if( substr($postscriptdata, $textend + 1, 1) == ']' ) // This adds quite some additional spaces between the words $plaintext.= ' '; $textstart = $textstart < $textend? $textend : $textstart + 1; return stripslashes($plaintext); michi (Alt+Q) marel.at 01-Jul-2004 04:10 <?PHP /* A little helpful function to calculate millimeters to points */ function calctopt($intmillimeter) $intpoints = ($intmillimeter*72)/25.4; $intpoints = round($intpoints); return $intpoints;

23 sur 27 08.04.2008 18 /* For example: Create DIN A4 210x297 mm */ pdf_begin_page( $pdf, calctopt(210), calctopt(297)); // 595x842 pt donatas at spurgius dot com 22-Jun-2004 09:56 I've been looking for a way to extract plain text from PDF documents (needed to search for text inside 'em). Not being able to find one I wrote the needed functions myself. here you go folks. function pdf2string ($sourcefile) $textarray = array (); $objstart = 0; $fp = fopen ($sourcefile, 'rb'); $content = fread ($fp, filesize ($sourcefile)); fclose ($fp); $searchtagstart = chr(13).chr(10).'stream'; $searchtagstartlenght = strlen ($searchtagstart); while ((($objstart = strpos ($content, $searchtagstart, $objstart)) && ($objend = strpos ($content, 'endstream', $objstart+1)))) $data = substr ($content, $objstart + $searchtagstartlenght + 2, $objend - ($objstart + $searchtagstartlenght) - 2); $data = @gzuncompress ($data); if ($data!== FALSE && strpos ($data, 'BT')!== FALSE && strpos ($data, 'ET')!== FALSE) $textarray [] = ExtractText ($data); $objstart = $objstart < $objend? $objend : $objstart + 1; return $textarray; function ExtractText ($postscriptdata) while ((($textstart = strpos ($postscriptdata, '(', $textstart)) && ($textend = strpos ($postscriptdata, ')', $textstart + 1)) && substr ($postscriptdata, $textend - 1)!= '\\')) $plaintext.= substr ($postscriptdata, $textstart + 1, $textend - $textstart - 1); if (substr ($postscriptdata, $textend + 1, 1) == ']') //this adds quite some additional spaces between the words $plaintext.= ' '; $textstart = $textstart < $textend? $textend : $textstart + 1; return stripslashes ($plaintext); uwe at steinmann dot cx 13-May-2004 03:25

24 sur 27 08.04.2008 18 Those looking for a free replacement of pdflib may consider pslib at http://pslib.sourceforge.net which produces PostScript but it can be easily turned into PDF by Acrobat Distiller or ghostscript. The API is very similar and even hypertext functions are supported. There is also a php extension for pslib in PECL, called ps. samcontact at myteks dot com 01-May-2004 01:28 Here is another great tutorial on basic PDF building w/ PHP: http://hotwired.lycos.com/webmonkey/02/20/index3a.html?tw=programming ======================= http://myteks.com Computer Repair & Web Design ======================= SenorTZ senortz at nospam dot yahoo dot com 28-Jul-2003 03:23 About creating a PDF document based on the content of another document(let's say a text file): I have tried to send to the PDF-creator page from a link from the sender page the file name of the file I want to read the content from and generate the PDF document containing this content. The idea is is that when I tried to reffer the pdf-creator page via the link your_root/create_pdf.php?filename=$your_file_name, the pdf-creator page does not behave well when before creating the pdf document I have a line like $filename = $_GET["filename"]. I solved this using on the sender page instead of the link a form with a button, so the form has as action "create_pdf.php", as method "post" and a hidden field containing the "filename" value. And it works like this if, on the pdf-creator page I have a line like $filename = $_POST["filename"]. I would like to understand why this way it works and the other way does not. I hope this helps. Here are the pieces of code I used. Sender page: print("<form name='to_pdf' action='see_pdf_file.php' method='post'>"); print("<br/><input type='submit' value='pdf'><input type='hidden' name='filename' value='$filename'></form>"); PDF-creator page: <? $filename = $_POST["filename"]; $file_handle = fopen($filename, "r"); $file_content = file_get_contents($filename); fclose($file_handle); // $file_content = wordwrap($file_content,72," "); $a_row = explode(" ",$file_content); $i = 0; // $pdf = pdf_new(); pdf_open_file($pdf, ""); pdf_begin_page($pdf, 595, 842); pdf_set_font($pdf, "Times-Roman", 16, "host"); pdf_add_outline($pdf, "Page 1"); pdf_set_value($pdf, "textrendering", 1); pdf_show_xy($pdf, 'The content of the file:',50,700); while ($a_row[$i]!= "") pdf_continue_text($pdf,$a_row[$i]); $i++; pdf_end_page($pdf); pdf_close($pdf);

25 sur 27 08.04.2008 18 // $data = pdf_get_buffer($pdf); // header("content-type: application/pdf"); header("content-disposition: inline; filename=test.pdf"); header("content-length: ". strlen($data)); // echo $data; PDFLib and PHP 431 used. Thanks. bmironov at jonview dot com 25-Jun-2003 12:46 RedHat 9 + Apache 2.0 + PHP 4.3.2 + Oracle 9i + PDFlib 5.0.1 (binary distribution) It seems to be a working bundle if you do some magic with./configure: RedHat 9: kernel-2.4.20-18.9 Apache 2.0.46:./configure --enable-so --enable-rewrite=shared --enable-status --enable-mpm=prefork PHP 4.3.2:./configure \ --program-prefix= \ --prefix=/usr \ --exec-prefix=/usr \ --bindir=/usr/bin \ --sbindir=/usr/sbin \ --sysconfdir=/etc \ --datadir=/usr/share \ --includedir=/usr/include \ --libdir=/usr/lib \ --libexecdir=/usr/libexec \ --localstatedir=/var \ --sharedstatedir=/usr/com \ --mandir=/usr/share/man \ --infodir=/usr/share/info \ --with-config-file-path=/etc \ --with-config-file-scan-dir=/etc/php.d \ --without-tsrm-pthreads \ #!!!!!!!!!!!!!!!!!!!! --with-zlib \ --with-gd \ --enable-gd-native-ttf \ --with-ttf \ --without-mysql \ --with-apxs2filter=/usr/local/apache2/bin/apxs \ --with-oci8 \ --enable-sigchild \ --enable-inline-optimization Oracle9i: ln -s $ORACLE_HOME/rdbms/public/nzerror.h $ORACLE_HOME/rdbms/demo/nzerror.h ln -s $ORACLE_HOME/rdbms/public/nzt.h $ORACLE_HOME/rdbms/demo/nzt.h ln -s $ORACLE_HOME/rdbms/public/ociextp.h $ORACLE_HOME/rdbms/demo/ociextp.h If you want to use bundled GD-library then: 1) install following packages: libjpeg, libjpeg-devel, libpng, libpng-devel, freetype, freetype-devel, libtiff, libtiff-devel, zlib, zlib-devel 2) ln -s /usr/lib/libjpeg.so.62 /usr/lib/libjpeg.so ln -s /usr/lib/libpng.so.62 /usr/lib/libpng.so

26 sur 27 08.04.2008 18 It seems to be a working combination, because it is NOT give you: 1) error message in Apache's error_log: Module compiled with module API=20020429, debug=0, thread-safety=0 PHP compiled with module API=20020429, debug=0, thread-safety=1 2) error message in Apache's error_log: [notice] child pid 12345 exit signal Segmentation fault (11) 3) MS Internet Explorer can show PDF-output from your PHP-script via Acrobat plug-in and does not crush. No confusing messages about opening "Adobe Acrobat Control for ActiveX". Hope it will save you some time. Good luck, Boris pbierans at lynet dot de 27-Mar-2002 06:56 Load extension, open a PDF, add a font, modify PDF in memory and send it to browser: // no cache headers: header("expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("last-modified: ".gmdate("d, d M Y H:i:s")." GMT"); header("cache-control: no-store, no-cache, must-revalidate"); header("cache-control: post-check=0, pre-check=0", false); header("pragma: no-cache"); $ext_name="libpdf_php.so"; // libpdf_php.so is the PDFLIB for SunOS by "PDFlib GmbH" // visit http://www.pdflib.com // if the extension is not automatically loaded by Apache // dl() will try to load it on demand: if (!extension_loaded($ext_name) &&!@dl($ext_name)) <table width="100%" border="0"><tr><td align="center"> <table style="border: solid #f0f0f0 2px;"><tr> <td valign="middle" style="padding: 20px; margin: 0px;"> <p style="font-family: arial; font-size: 12px; "> <b>sorry,</b><br> <br> A PDF can not be generated right now.<br> The administrator has been informed and will fix this as soon as possible.<br> Please try again later. </p> </td></tr></table> </td></tr></table> mail('admin@domain.com','error: PDFLib not found', 'Called by script:\n '.$SCRIPT_FILENAME.'?'.$QUERY_STRING, "From: warnings@domain.com\n"); exit; // verify that extension is usable // unique serial number: srand(microtime()*10000); $usnr= gmdate("ymd-his-").rand(1000,9999).'-'; $pdf_file=$usnr.'result.pdf'; $src_file='source.pdf'; // create pdf object $pdf = pdf_new(); pdf_open_file($pdf); pdf_set_parameter($pdf, 'serial', 'if-you-have-one');

27 sur 27 08.04.2008 18 // fonts to embed, they are in the folder of this file: pdf_set_parameter($pdf, 'FontAFM', 'TradeGothic=Tg.afm'); pdf_set_parameter($pdf, 'FontOutline', 'TradeGothic=Tg.pfb'); pdf_set_parameter($pdf, 'FontPFM', 'TradeGothic=Tg.pfm'); // load the source file: $src_doc =pdf_open_pdi($pdf,$src_file,'', 0); $src_page =pdf_open_pdi_page($pdf,$src_doc,1,''); $src_width =pdf_get_pdi_value($pdf,'width',$src_doc,$src_page,0); $src_height=pdf_get_pdi_value($pdf,'height',$src_doc,$src_page,0); pdf_begin_page($pdf, $src_width, $src_height); // place the sourcefile to the background of the actual page: pdf_place_pdi_page($pdf,$src_page,0,0,1,1); pdf_close_pdi_page($pdf,$src_page); // modify the page: pdf_set_font($pdf, 'TradeGothic', 8, 'host'); pdf_show_xy($pdf, 'Now: '.gmdate("y-m-d H:i:s"),50,50); pdf_end_page($pdf); pdf_close($pdf); // prepare output: $pdfdata = pdf_get_buffer($pdf); // to echo the pdf-data $pdfsize = strlen($pdfdata); // IE requires the datasize // real datatype headers: header('content-type: application/pdf'); header('content-disposition: attachment; filename="'.$pdf_file.'"'); header('content-length: '.$pdfsize); echo $pdfdata; exit; // keep this one so no #13#10 or #32 will be written Copyright 2001-2008 The PHP Group All rights reserved.