• Tidak ada hasil yang ditemukan

include

N/A
N/A
Protected

Academic year: 2017

Membagikan "include"

Copied!
32
0
0

Teks penuh

(1)

<? include

"koneksi/koneksi.php"; ?> <div class="row">

<div class="col-lg-12">

<h1 class="page-header">Ruangan</h1> </div>

<!-- /.col-lg-12 --> </div>

<!-- /.row -->

<!-- Tampilkan Data --> <div class="row">

<div class="col-lg-12">

<div class="panel panel-green panel-default panel-x"> <div class="panel-heading">

<strong>Data Ruangan</strong> </div>

<!-- /.panel-heading --> <div class="panel-body">

<div class="table-responsive">

<table class="table striped bordered table-hover" id="pdataTables">

<thead> <tr>

<th class="text-center">No</th>

<th class="text-center">Nama Ruangan</th>

<th class="text-center">Edit</th>

<th class="text-center">Hapus</th>

</tr>

</thead> <tbody> <?

$sql_ruangan = "SELECT * FROM tbl_ruangan";

$row_ruangan = mysql_query($sql_ruangan);

while($row =

mysql_fetch_array($row_ruangan)) {

$nomor++;

echo' <tr class="text-center">'; echo' <td>'.$nomor.'</td>'; echo'

<td>'.$row['nama_ruangan'].'</td>';

echo' <td>

<a class="btn btn-info btn-outline btn-circle" onclick=\'document.location.href="? module=ruangan&act=edit_ruangan&id_ruangan='.$row['id_ruang an'].'"\'>

<i class="fa fa-wrench"></i>

(2)

<a class="btn btn-danger btn-outline btn-circle" href="?module=ruangan&act=hapus_ruangan&id_ruangan='. $row['id_ruangan'].'" onclick=\'return confirm(\'Anda yakin ingin menghapus data ini?\')\'>

<i class="fa fa-trash-o"></i>

</a> </td>'; echo' </tr>'; } ?>

</tbody> </table>

</div>

<!-- /.table-responsive --> </div>

<!-- /.panel-body --> <div class="panel-footer">

<a class="btn btn-outline btn-success" href="? module=ruangan&act=tambah_ruangan")>

<i class="fa fa-plus"></i> Tambah </a>

</div>

<!-- /.panel-footer --> </div>

<!-- /.panel --> </div>

<!-- /.col-lg-12 --> </div>

<!-- /.row -->

<!-- Tambahkan Data --> <?

if ($_GET['act']=='tambah_ruangan') { ?> <div class="row">

<div class="col-lg-12 panel-green panel-x">

<div class="panel panel-green panel-primary">

<form action="?module=ruangan&act=simpan_ruangan" method="post"> <div class="panel-heading">

Tambah Ruangan </div>

<div class="panel-body"> <table>

<tr>

<td class="col-md-1"> <label>Nama </label> </td>

<td>

<input class="form-control" name="tnama" type="text" required>

</td> </tr>

<tr>

<td>&nbsp;</td> </tr>

(3)

<div class="panel-footer">

<button type="submit" name="button" class="btn btn-outline btn-success"><i class="fa fa-save"></i> Simpan

</div> </form> </div>

</div> <div> <br> <? } ?>

<!-- Simpan Data -->

<? if ($_GET['act']=='simpan_ruangan') { $aanama=$_POST['tnama'];

if(mysql_query("INSERT INTO tbl_ruangan set nama_ruangan = '$aanama', id_ruangan = ''

")){

echo '

<script type="text/javascript">

document.location.href = \'?module=ruangan\' </script>';

} else {

echo '<b>Gagal menambahkan data...</b> <br />'.$id_ruangan.mysql_error(); }

} ?>

<!-- Edit Data -->

<? if ($_GET['act']=='edit_ruangan'){

$sql_edit = "SELECT * FROM tbl_ruangan WHERE id_ruangan = '".mysql_real_escape_string($_GET['id_ruangan'])."'";

$row_edit = mysql_fetch_array(mysql_query($sql_edit)); ?> <div class="row">

<div class="panel panel-info">

<form method="post" action="? module=ruangan&act=simpan_edit_ruangan">

<div class="panel-heading">

<label>Edit Ruangan</label> </div>

<div class="panel-body">

<table class="table table-striped table-bordered table-hover" id="dataTables">

<input class="form-control" name="id_ruangan" type="hidden" value="<?php echo $row_edit['id_ruangan'];?>"></td> <tr>

<td class="col-md-1"> <label>Nama </label> </td>

<td>

<input class="form-control" name="tnama" type="text" value="<?php echo $row_edit['nama_ruangan']?>">

</td> </tr>

<tr>

<td>&nbsp;</td> </tr>

</table> </div>

<div class="panel-footer"> <tr>

<button type="submit" name="button" class="btn btn-outline btn-success"><i class="fa fa-save"></i> Simpan

(4)

</div> </div> <br> <? } ?>

<!-- Simpan Edit Data -->

<? if ($_GET['act']=='simpan_edit_ruangan'){

$nama_ruangan = $_POST['tnama']; $id_ruangan = $_POST['id_ruangan'];

if(mysql_query("UPDATE tbl_ruangan SET nama_ruangan='$nama_ruangan'

WHERE id_ruangan='$id_ruangan'")) { ?>

<div class="alert alert-success alert-dismissible" role="alert"> <button type="button" class="close" data-dismiss="alert">

<span aria-hidden="true">&times;</span> <span class="sr-only">Close</span> </button>

<strong>Sukses!</strong> Berhasil mengubah data. </div>

<script>

setTimeout(function(){document.location.href = "?module=ruangan"}, 2000);

</script> <? } else { ?>

<div class="alert alert-warning alert-dismissible" role="alert"> <button type="button" class="close" data-dismiss="alert">

<span aria-hidden="true">&times;</span> <span class="sr-only">Close</span> </button>

<strong>Gagal!</strong> Tidak berhasil mengubah data. </div>

<script>

setTimeout(function(){document.location.href = "?module=ruangan"}, 2000);

</script> <? }

}

/** <!-- Hapus Data --> **/

else if ($_GET['act']=='hapus_ruangan'){

if(mysql_query("DELETE FROM tbl_ruangan WHERE id_ruangan='".mysql_real_escape_string($_GET['id_ruangan'])."'")) {

echo '<script type="text/javascript">

document.location.href = \'?module=ruangan\' </script>';

(5)

<!-- jQuery Version 1.11.0 -->

<script src="js/jquery-1.11.0.js"></script> <!-- Bootstrap Core JavaScript --> <script src="js/bootstrap.min.js"></script> <!-- Metis Menu Plugin JavaScript -->

<script src="js/plugins/metisMenu/metisMenu.min.js"></script> <!-- DataTables JavaScript -->

<script src="js/plugins/dataTables/jquery.dataTables.js"></script> <script src="js/plugins/dataTables/dataTables.bootstrap.js"></script> <!-- Custom Theme JavaScript -->

<script src="js/penjadwalanperawat.js"></script>

<!-- Page-Level Demo Scripts - Tables - Use for reference --> <script>

$(document).ready(function() { $ ('#pdataTables').dataTable(); });

</script> <?php /**

* @package dompdf

* @link http://dompdf.github.com/

* @author Benj Carson <benjcarson@digitaljunkies.ca> * @author Helmut Tischer <htischer@weihenstephan.org> * @author Fabien Ménager <fabien.menager@gmail.com> * @autho Brian Sweeney <eclecticgeek@gmail.com>

* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */

if ( class_exists( 'DOMPDF' , false ) ) { return; }

PHP_VERSION >= 5.0 or die("DOMPDF requires PHP 5.0+"); /**

* The root of your DOMPDF installation */

define("DOMPDF_DIR", str_replace(DIRECTORY_SEPARATOR, '/', realpath(dirname(__FILE__)))); /**

* The location of the DOMPDF include directory */

define("DOMPDF_INC_DIR", DOMPDF_DIR . "/include"); /**

* The location of the DOMPDF lib directory */

define("DOMPDF_LIB_DIR", DOMPDF_DIR . "/lib"); /**

* Some installations don't have $_SERVER['DOCUMENT_ROOT']

(6)

*/

if( !isset($_SERVER['DOCUMENT_ROOT']) ) { $path = "";

if ( isset($_SERVER['SCRIPT_FILENAME']) ) $path = $_SERVER['SCRIPT_FILENAME']; elseif ( isset($_SERVER['PATH_TRANSLATED']) )

$path = str_replace('\\\\', '\\', $_SERVER['PATH_TRANSLATED']); $_SERVER['DOCUMENT_ROOT'] = str_replace( '\\', '/', substr($path, 0, 0-strlen($_SERVER['PHP_SELF'])));

}

/** Include the custom config file if it exists */

if ( file_exists(DOMPDF_DIR . "/dompdf_config.custom.inc.php") ){ require_once(DOMPDF_DIR . "/dompdf_config.custom.inc.php"); }

//FIXME: Some function definitions rely on the constants defined by DOMPDF. However, might this location prove problematic?

require_once(DOMPDF_INC_DIR . "/functions.inc.php"); /**

* Username and password used by the configuration utility in www/ */

def("DOMPDF_ADMIN_USERNAME", "user"); def("DOMPDF_ADMIN_PASSWORD", "password"); /**

* The location of the DOMPDF font directory *

* The location of the directory where DOMPDF will store fonts and font metrics * Note: This directory must exist and be writable by the webserver process. * *Please note the trailing slash.*

*

* Notes regarding fonts:

* Additional .afm font metrics can be added by executing load_font.php from command line. *

* Only the original "Base 14 fonts" are present on all pdf viewers. Additional fonts must * be embedded in the pdf file or the PDF may not display correctly. This can significantly * increase file size unless font subsetting is enabled. Before embedding a font please * review your rights under the font license.

*

* Any font specification in the source HTML is translated to the closest font available * in the font directory.

*

* The pdf standard "Base 14 fonts" are:

* Courier, Courier-Bold, Courier-BoldOblique, Courier-Oblique, * Helvetica, Helvetica-Bold, Helvetica-BoldOblique, Helvetica-Oblique, * Times-Roman, Times-Bold, Times-BoldItalic, Times-Italic,

* Symbol, ZapfDingbats. */

def("DOMPDF_FONT_DIR", DOMPDF_DIR . "/lib/fonts/"); /**

(7)

* This directory contains the cached font metrics for the fonts used by DOMPDF. * This directory can be the same as DOMPDF_FONT_DIR

*

* Note: This directory must exist and be writable by the webserver process. */

def("DOMPDF_FONT_CACHE", DOMPDF_FONT_DIR); /**

* The location of a temporary directory. *

* The directory specified must be writeable by the webserver process. * The temporary directory is required to download remote images and when * using the PFDLib back end.

*/

def("DOMPDF_TEMP_DIR", sys_get_temp_dir()); /**

* ==== IMPORTANT ==== *

* dompdf's "chroot": Prevents dompdf from accessing system files or other * files on the webserver. All local files opened by dompdf must be in a * subdirectory of this directory. DO NOT set it to '/' since this could * allow an attacker to use dompdf to read any files on the server. This * should be an absolute path.

* This is only checked on command line call by dompdf.php, but not by * direct class use like:

* $dompdf = new DOMPDF(); $dompdf->load_html($htmldata); $dompdf->render(); $pdfdata = $dompdf->output();

*/

def("DOMPDF_CHROOT", realpath(DOMPDF_DIR)); /**

* Whether to use Unicode fonts or not. *

* When set to true the PDF backend must be set to "CPDF" and fonts must be * loaded via load_font.php.

*

* When enabled, dompdf can support all Unicode glyphs. Any glyphs used in a * document must be present in your fonts, however.

*/

def("DOMPDF_UNICODE_ENABLED", true); /**

* Whether to enable font subsetting or not. */

def("DOMPDF_ENABLE_FONTSUBSETTING", false); /**

* The PDF rendering backend to use *

* Valid settings are 'PDFLib', 'CPDF' (the bundled R&OS PDF class), 'GD' and * 'auto'. 'auto' will look for PDFLib and use it if found, or if not it will

* fall back on CPDF. 'GD' renders PDFs to graphic files. {@link

* Canvas_Factory} ultimately determines which rendering class to instantiate * based on this setting.

*

(8)

* capabilities for dompdf, however additional features (e.g. object, * image and font support, etc.) differ between backends. Please see * {@link PDFLib_Adapter} for more information on the PDFLib backend * and {@link CPDF_Adapter} and lib/class.pdf.php for more information * on CPDF. Also see the documentation for each backend at the links * below.

*

* The GD rendering backend is a little different than PDFLib and * CPDF. Several features of CPDF and PDFLib are not supported or do * not make any sense when creating image files. For example,

* multiple pages are not supported, nor are PDF 'objects'. Have a * look at {@link GD_Adapter} for more information. GD support is * experimental, so use it at your own risk.

*

* @link http://www.pdflib.com * @link http://www.ros.co.nz/pdf * @link http://www.php.net/image */

def("DOMPDF_PDF_BACKEND", "CPDF"); /**

* PDFlib license key *

* If you are using a licensed, commercial version of PDFlib, specify * your license key here. If you are using PDFlib-Lite or are evaluating * the commercial version of PDFlib, comment out this setting. *

* @link http://www.pdflib.com *

* If pdflib present in web server and auto or selected explicitely above, * a real license code must exist!

*/

//def("DOMPDF_PDFLIB_LICENSE", "your license key here"); /**

* html target media view which should be rendered into pdf. * List of types and parsing rules for future extensions: * http://www.w3.org/TR/REC-html40/types.html

* screen, tty, tv, projection, handheld, print, braille, aural, all

* Note: aural is deprecated in CSS 2.1 because it is replaced by speech in CSS 3. * Note, even though the generated pdf file is intended for print output,

* the desired content might be different (e.g. screen or projection view of html file). * Therefore allow specification of content here.

*/

def("DOMPDF_DEFAULT_MEDIA_TYPE", "screen"); /**

* The default paper size. *

* North America standard is "letter"; other countries generally "a4" *

* @see CPDF_Adapter::PAPER_SIZES for valid sizes */

def("DOMPDF_DEFAULT_PAPER_SIZE", "letter"); /**

(9)

*

* Used if no suitable fonts can be found. This must exist in the font folder. * @var string

*/

def("DOMPDF_DEFAULT_FONT", "serif"); /**

* Image DPI setting *

* This setting determines the default DPI setting for images and fonts. The * DPI may be overridden for inline images by explictly setting the * image's width & height style attributes (i.e. if the image's native * width is 600 pixels and you specify the image's width as 72 points, * the image will have a DPI of 600 in the rendered PDF. The DPI of * background images can not be overridden and is controlled entirely * via this parameter.

*

* For the purposes of DOMPDF, pixels per inch (PPI) = dots per inch (DPI). * If a size in html is given as px (or without unit as image size),

* this tells the corresponding size in pt at 72 DPI.

* This adjusts the relative sizes to be similar to the rendering of the * html page in a reference browser.

*

* In pdf, always 1 pt = 1/72 inch *

* Rendering resolution of various browsers in px per inch: * Windows Firefox and Internet Explorer:

* SystemControl->Display properties->FontResolution: Default:96, largefonts:120, custom:? * Linux Firefox:

* about:config *resolution: Default:96

* (xorg screen dimension in mm and Desktop font dpi settings are ignored) *

* Take care about extra font/image zoom factor of browser. *

* In images, <img> size in pixel attribute, img css style, are overriding * the real image dimension in px for rendering.

* * @var int */

def("DOMPDF_DPI", 96); /**

* Enable inline PHP *

* If this setting is set to true then DOMPDF will automatically evaluate * inline PHP contained within <script type="text/php"> ... </script> tags.

*

* Enabling this for documents you do not trust (e.g. arbitrary remote html * pages) is a security risk. Set this option to false if you wish to process * untrusted documents.

* * @var bool */

def("DOMPDF_ENABLE_PHP", false); /**

(10)

*

* If this setting is set to true then DOMPDF will automatically insert

* JavaScript code contained within <script type="text/javascript"> ... </script> tags. *

* @var bool */

def("DOMPDF_ENABLE_JAVASCRIPT", true); /**

* Enable remote file access *

* If this setting is set to true, DOMPDF will access remote sites for * images and CSS files as required.

* This is required for part of test case www/test/image_variants.html through www/examples.php *

* Attention!

* This can be a security risk, in particular in combination with DOMPDF_ENABLE_PHP and * allowing remote access to dompdf.php or on allowing remote html code to be passed to * $dompdf = new DOMPDF(); $dompdf->load_html(...);

* This allows anonymous users to download legally doubtful internet content which on * tracing back appears to being downloaded by your server, or allows malicious php code * in remote html pages to be executed by your server with your account privileges. *

* @var bool */

def("DOMPDF_ENABLE_REMOTE", false); /**

* The debug output log * @var string

*/

def("DOMPDF_LOG_OUTPUT_FILE", DOMPDF_FONT_DIR."log.htm"); /**

* A ratio applied to the fonts height to be more like browsers' line height */

def("DOMPDF_FONT_HEIGHT_RATIO", 1.1); /**

* Enable CSS float *

* Allows people to disabled CSS float support * @var bool

*/

def("DOMPDF_ENABLE_CSS_FLOAT", false); /**

* Enable the built in DOMPDF autoloader *

* @var bool */

def("DOMPDF_ENABLE_AUTOLOAD", true); /**

* Prepend the DOMPDF autoload function to the spl_autoload stack *

(11)

*/

def("DOMPDF_AUTOLOAD_PREPEND", false); /**

* Use the more-than-experimental HTML5 Lib parser */

def("DOMPDF_ENABLE_HTML5PARSER", false); require_once(DOMPDF_LIB_DIR . "/html5lib/Parser.php"); // ### End of user-configurable options ###

/** * Load autoloader */

if (DOMPDF_ENABLE_AUTOLOAD)

{ require_once(DOMPDF_INC_DIR . "/autoload.inc.php");

require_once(DOMPDF_LIB_DIR . "/php-font-lib/classes/Font.php"); }

/**

* Ensure that PHP is working with text internally using UTF8 character encoding. */

mb_internal_encoding('UTF-8'); /**

* Global array of warnings generated by DomDocument parser and * stylesheet class

* * @var array */

global $_dompdf_warnings; $_dompdf_warnings = array(); /**

* If true, $_dompdf_warnings is dumped on script termination when using * dompdf/dompdf.php or after rendering when using the DOMPDF class. * When using the class, setting this value to true will prevent you from * streaming the PDF.

* * @var bool */

global $_dompdf_show_warnings; $_dompdf_show_warnings = false; /**

* If true, the entire tree is dumped to stdout in dompdf.cls.php. * Setting this value to true will prevent you from streaming the PDF.

* * @var bool */

global $_dompdf_debug; $_dompdf_debug = false; /**

* Array of enabled debug message types *

(12)

*/

global $_DOMPDF_DEBUG_TYPES; $_DOMPDF_DEBUG_TYPES = array(); //array("page-break" => 1);

/* Optionally enable different classes of debug output before the pdf content. * Visible if displaying pdf as text,

* E.g. on repeated display of same pdf in browser when pdf is not taken out of * the browser cache and the premature output prevents setting of the mime type. */

def('DEBUGPNG', false); def('DEBUGKEEPTEMP', false); def('DEBUGCSS', false);

/* Layout debugging. Will display rectangles around different block levels. * Visible in the PDF itself.

*/

def('DEBUG_LAYOUT', false); def('DEBUG_LAYOUT_LINES', true); def('DEBUG_LAYOUT_BLOCKS', true); def('DEBUG_LAYOUT_INLINE', true); def('DEBUG_LAYOUT_PADDINGBOX', true); <?php

/**

* Command line utility to use dompdf.

* Can also be used with HTTP GET parameters *

* @package dompdf

* @link http://dompdf.github.com/

* @author Benj Carson <benjcarson@digitaljunkies.ca>

* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */

/**

* Display command line usage */

function dompdf_usage() {

$default_paper_size = DOMPDF_DEFAULT_PAPER_SIZE; echo <<<EOD

Usage: {$_SERVER["argv"][0]} [options] html_file

html_file can be a filename, a url if fopen_wrappers are enabled, or the '-' character to read from standard input.

Options:

-h Show this message

-l List available paper sizes

-p size Paper size; something like 'letter', 'A4', 'legal', etc. The default is '$default_paper_size'

-o orientation Either 'portrait' or 'landscape'. Default is 'portrait' -b path Set the 'document root' of the html_file.

Relative urls (for stylesheets) are resolved using this directory. Default is the directory of html_file.

(13)

in the tree printed to stdout.

-t Comma separated list of debugging types (page-break,reflow,split) EOD;

exit; } /**

* Parses command line options *

* @return array The command line options */

function getoptions() { $opts = array();

if ( $_SERVER["argc"] == 1 ) return $opts;

$i = 1;

while ($i < $_SERVER["argc"]) { switch ($_SERVER["argv"][$i]) { case "--help":

case "-h": $opts["h"] = true; $i++; break; case "-l":

$opts["l"] = true; $i++;

break; case "-p":

if ( !isset($_SERVER["argv"][$i+1]) ) die("-p switch requires a size die("-parameter\n"); $opts["p"] = $_SERVER["argv"][$i+1]; $i += 2;

break; case "-o":

if ( !isset($_SERVER["argv"][$i+1]) )

die("-o switch requires an orientation parameter\n"); $opts["o"] = $_SERVER["argv"][$i+1];

$i += 2; break; case "-b":

if ( !isset($_SERVER["argv"][$i+1]) ) die("-b switch requires a path parameter\n"); $opts["b"] = $_SERVER["argv"][$i+1]; $i += 2;

(14)

if ( !isset($_SERVER["argv"][$i+1]) )

die("-f switch requires a filename parameter\n"); $opts["f"] = $_SERVER["argv"][$i+1];

$i += 2; break; case "-v":

$opts["v"] = true; $i++; break; case "-d":

$opts["d"] = true; $i++; break; case "-t":

if ( !isset($_SERVER['argv'][$i + 1]) )

die("-t switch requires a comma separated list of types\n"); $opts["t"] = $_SERVER['argv'][$i+1];

$i += 2; break; default:

$opts["filename"] = $_SERVER["argv"][$i]; $i++;

break; } }

return $opts; }

require_once("dompdf_config.inc.php");

global $_dompdf_show_warnings, $_dompdf_debug, $_DOMPDF_DEBUG_TYPES; $sapi = php_sapi_name();

$options = array(); switch ( $sapi ) {

case "cli":

$opts = getoptions();

if ( isset($opts["h"]) || (!isset($opts["filename"]) && !isset($opts["l"])) ) { dompdf_usage();

exit; }

if ( isset($opts["l"]) ) {

echo "\nUnderstood paper sizes:\n";

foreach (array_keys(CPDF_Adapter::$PAPER_SIZES) as $size) echo " " . mb_strtoupper($size) . "\n";

(15)

$file = $opts["filename"]; if ( isset($opts["p"]) )

$paper = $opts["p"]; else

$paper = DOMPDF_DEFAULT_PAPER_SIZE; if ( isset($opts["o"]) )

$orientation = $opts["o"]; else

$orientation = "portrait"; if ( isset($opts["b"]) )

$base_path = $opts["b"]; if ( isset($opts["f"]) )

$outfile = $opts["f"]; else {

if ( $file === "-" ) $outfile =

"dompdf_out.pdf"; else

$outfile = str_ireplace(array(".html", ".htm", ".php"), "", $file) . ".pdf"; }

if ( isset($opts["v"]) )

$_dompdf_show_warnings = true; if ( isset($opts["d"]) )

{ $_dompdf_show_warnings = true; $_dompdf_debug = true; }

if ( isset($opts['t']) ) { $arr = split(',', $opts['t']); $types = array(); foreach ($arr as $type)

$types[ trim($type) ] = 1;

$_DOMPDF_DEBUG_TYPES = $types; }

$save_file = true; break;

default:

if ( isset($_GET["input_file"]) )

$file = rawurldecode($_GET["input_file"]); else

throw new DOMPDF_Exception("An input file is required (i.e. input_file _GET variable)."); if ( isset($_GET["paper"]) )

$paper = rawurldecode($_GET["paper"]); else

(16)

$orientation =

rawurldecode($_GET["orientation"]); else $orientation = "portrait";

if ( isset($_GET["base_path"]) ) {

$base_path = rawurldecode($_GET["base_path"]); $file = $base_path . $file; # Set the input file }

if ( isset($_GET["options"]) ) { $options = $_GET["options"]; }

$file_parts = explode_url($file);

/* Check to see if the input file is local and, if so, that the base path falls within that specified by DOMDPF_CHROOT */

if(($file_parts['protocol'] == '' || $file_parts['protocol'] === 'file://')) { $file = realpath($file);

if ( strpos($file, DOMPDF_CHROOT) !== 0 ) {

throw new DOMPDF_Exception("Permission denied on $file. The file could not be found under the directory specified by DOMPDF_CHROOT.");

} }

if($file_parts['protocol'] === 'php://') {

throw new DOMPDF_Exception("Permission denied on $file. This script does not allow PHP streams.");

}

$outfile = "dompdf_out.pdf"; # Don't allow them to set the output file $save_file = false; # Don't save the file

break; }

$dompdf = new DOMPDF(); if ( $file === "-" )

{ $str = "";

while ( !feof(STDIN) ) $str .= fread(STDIN, 4096); $dompdf->load_html($str); } else

$dompdf->load_html_file($file);

if ( isset($base_path) ) { $dompdf->set_base_path($base_path); }

$dompdf->set_paper($paper, $orientation); $dompdf->render();

(17)

global $_dompdf_warnings;

foreach ($_dompdf_warnings as $msg) echo $msg . "\n";

echo $dompdf->get_canvas()->get_cpdf()->messages; flush();

}

if ( $save_file ) {

/ if ( !is_writable($outfile) )

/ throw new DOMPDF_Exception("'$outfile' is not writable."); if ( strtolower(DOMPDF_PDF_BACKEND) === "gd" )

$outfile = str_replace(".pdf", ".png", $outfile); list($proto, $host, $path, $file) = explode_url($outfile); if ( $proto != "" ) // i.e. not file://

$outfile = $file; // just save it locally, FIXME? could save it like wget: ./host/basepath/file $outfile = realpath(dirname($outfile)) . DIRECTORY_SEPARATOR . basename($outfile); if ( strpos($outfile, DOMPDF_CHROOT) !== 0 )

throw new DOMPDF_Exception("Permission denied.");

file_put_contents($outfile, $dompdf->output( array("compress" => 0) )); exit(0);

}

if ( !headers_sent() ) { $dompdf->stream($outfile, $options); }

<?php /**

* @package dompdf

* @link http://dompdf.github.com/

* @author Benj Carson <benjcarson@digitaljunkies.ca> * @author Helmut Tischer <htischer@weihenstephan.org> * @author Fabien Ménager <fabien.menager@gmail.com>

* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */

/**

* Base renderer class *

* @access private * @package dompdf */

abstract class Abstract_Renderer { /**

* Rendering backend *

* @var Canvas */

protected $_canvas; /**

(18)

* * @var DOMPDF */ protected $_dompdf; /**

* Class constructor *

* @param DOMPDF $dompdf The current dompdf instance */

function __construct(DOMPDF $dompdf) { >_dompdf = $dompdf; $this->_canvas = $dompdf->get_canvas(); }

/**

* Render a frame. *

* Specialized in child classes *

* @param Frame $frame The frame to render */

abstract function render(Frame $frame); //... /**

* Render a background image over a rectangular area *

* @param string $url The background image to load * @param float $xThe left edge of the rectangular area * @param float $yThe top edge of the rectangular area * @param float $width The width of the rectangular area * @param float $height The height of the rectangular area * @param Style $style The associated Style object *

* @throws Exception */

protected function _background_image($url, $x, $y, $width, $height, $style) { if ( !function_exists("imagecreatetruecolor") ) {

throw new Exception("The PHP GD extension is required, but is not installed."); }

$sheet = $style->get_stylesheet(); // Skip degenerate cases

if ( $width == 0 || $height == 0 ) { return;

}

$box_width = $width; $box_height = $height; //debugpng

(19)

$url,

>get_protocol(), >get_host(), $sheet->get_base_path(), $this->_dompdf

);

// Bail if the image is no good

if ( Image_Cache::is_broken($img) ) { return;

}

//Try to optimize away reading and composing of same background multiple times //Postponing read with imagecreatefrom ...()

//final composition parameters and name not known yet

//Therefore read dimension directly from file, instead of creating gd object first. //$img_w = imagesx($src); $img_h = imagesy($src);

list($img_w, $img_h) = dompdf_getimagesize($img);

if (!isset($img_w) || $img_w == 0 || !isset($img_h) || $img_h == 0) { return;

}

$repeat = $style->background_repeat; $dpi = $this->_dompdf->get_option("dpi");

//Increase background resolution and dependent box size according to image resolution to be placed in

//Then image can be copied in without resize $bg_width = round((float)($width * $dpi) / 72); $bg_height = round((float)($height * $dpi) / 72);

//Need %bg_x, $bg_y as background pos, where img starts, converted to pixel list($bg_x, $bg_y) = $style->background_position;

if ( is_percent($bg_x) ) {

/ The point $bg_x % from the left edge of the image is placed / $bg_x % from the left edge of the background rectangle $p = ((float)$bg_x)/100.0;

$x1 = $p * $img_w; $x2 = $p * $bg_width; $bg_x = $x2 - $x1; }

else {

$bg_x = (float)($style->length_in_pt($bg_x)*$dpi) / 72; }

$bg_x = round($bg_x + $style->length_in_pt($style->border_left_width)*$dpi / 72); if ( is_percent($bg_y) ) {

/ The point $bg_y % from the left edge of the image is placed / $bg_y % from the left edge of the background rectangle $p = ((float)$bg_y)/100.0;

(20)

$bg_y = $y2 - $y1; }

else {

$bg_y = (float)($style->length_in_pt($bg_y)*$dpi) / 72; }

$bg_y = round($bg_y + $style->length_in_pt($style->border_top_width)*$dpi / 72); //clip background to the image area on partial repeat. Nothing to do if img off area //On repeat, normalize start position to the tile at immediate left/top or 0/0 of area //On no repeat with positive offset: move size/start to have offset==0

//Handle x/y Dimensions separately

if ( $repeat !== "repeat" && $repeat !== "repeat-x" ) { //No repeat x

if ($bg_x < 0) {

$bg_width = $img_w + $bg_x; }

else {

$x += ($bg_x * 72)/$dpi; $bg_width = $bg_width - $bg_x; if ($bg_width > $img_w) {

$bg_width = $img_w; }

$bg_x = 0; }

if ($bg_width <= 0) { return;

}

$width = (float)($bg_width * 72)/$dpi; }

else { //repeat x if ($bg_x < 0) {

$bg_x = - ((-$bg_x) % $img_w); }

else {

$bg_x = $bg_x % $img_w; if ($bg_x > 0) {

$bg_x -= $img_w; }

} }

if ( $repeat !== "repeat" && $repeat !== "repeat-y" ) { //no repeat y

if ($bg_y < 0) {

$bg_height = $img_h + $bg_y; }

else {

$y += ($bg_y * 72)/$dpi; $bg_height = $bg_height - $bg_y; if ($bg_height > $img_h) {

(21)

}

$bg_y = 0; }

if ($bg_height <= 0) { return;

}

$height = (float)($bg_height * 72)/$dpi; }

else { //repeat y if ($bg_y < 0) {

$bg_y = - ((-$bg_y) % $img_h); }

else {

$bg_y = $bg_y % $img_h; if ($bg_y > 0) {

$bg_y -= $img_h; }

} }

//Optimization, if repeat has no effect

if ( $repeat === "repeat" && $bg_y <= 0 && $img_h+$bg_y >= $bg_height ) { $repeat = "repeat-x";

}

if ( $repeat === "repeat" && $bg_x <= 0 && $img_w+$bg_x >= $bg_width ) { $repeat = "repeat-y";

}

if ( ($repeat === "repeat-x" && $bg_x <= 0 && $img_w+$bg_x >= $bg_width) || ($repeat === "repeat-y" && $bg_y <= 0 && $img_h+$bg_y >= $bg_height) ) { $repeat = "no-repeat";

}

//Use filename as indicator only

//different names for different variants to have different copies in the pdf

//This is not dependent of background color of box! .'_'.(is_array($bg_color) ? $bg_color["hex"] : $bg_color)

//Note: Here, bg_* are the start values, not end values after going through the tile loops! $filedummy = $img;

$is_png = false;

$filedummy .= '_'.$bg_width.'_'.$bg_height.'_'.$bg_x.'_'.$bg_y.'_'.$repeat; //Optimization to avoid multiple times rendering the same image. //If check functions are existing and identical image already cached,

//then skip creation of duplicate, because it is not needed by addImagePng if ( $this->_canvas instanceof CPDF_Adapter &&

$this->_canvas->get_cpdf()->image_iscached($filedummy) ) { $bg = null;

} else {

(22)

$bg = imagecreatetruecolor($bg_width, $bg_height); switch (strtolower($type)) {

case IMAGETYPE_PNG: $is_png = true;

imagesavealpha($bg, true); imagealphablending($bg, false); $src = imagecreatefrompng($img); break;

case IMAGETYPE_JPEG:

$src = imagecreatefromjpeg($img); break;

case IMAGETYPE_GIF:

$src = imagecreatefromgif($img); break;

case IMAGETYPE_BMP:

$src = imagecreatefrombmp($img); break;

default:

return; // Unsupported image type }

if ( $src == null ) { return;

}

//Background color if box is not relevant here

//Non transparent image: box clipped to real size. Background non relevant.

//Transparent image: The image controls the transparency and lets shine through whatever background.

//However on transparent image preset the composed image with the transparency color, //to keep the transparency when copying over the non transparent parts of the tiles. $ti = imagecolortransparent($src);

if ( $ti >= 0 ) {

$tc = imagecolorsforindex($src, $ti);

$ti = imagecolorallocate($bg, $tc['red'], $tc['green'], $tc['blue']); imagefill($bg, 0, 0, $ti);

imagecolortransparent($bg, $ti); }

//This has only an effect for the non repeatable

dimension. //compute start of src and dest coordinates of the single copy if ( $bg_x < 0 ) {

$dst_x = 0; $src_x = -$bg_x; }

else { $src_x = 0;

$dst_x = $bg_x; }

(23)

$dst_y = 0; $src_y = -$bg_y; }

else { $src_y = 0;

$dst_y = $bg_y; }

//For historical reasons exchange meanings of variables:

//start_* will be the start values, while bg_* will be the temporary start values in the loops $start_x = $bg_x;

$start_y = $bg_y;

// Copy regions from the source image to the background if ( $repeat === "no-repeat" ) {

// Simply place the image on the background

imagecopy($bg, $src, $dst_x, $dst_y, $src_x, $src_y, $img_w, $img_h); }

else if ( $repeat === "repeat-x" ) {

for ( $bg_x = $start_x; $bg_x < $bg_width; $bg_x += $img_w ) { if ( $bg_x < 0 ) {

$dst_x = 0; $src_x = -$bg_x; $w = $img_w + $bg_x; }

else {

$dst_x = $bg_x; $src_x = 0; $w = $img_w; }

imagecopy($bg, $src, $dst_x, $dst_y, $src_x, $src_y, $w, $img_h); }

}

else if ( $repeat === "repeat-y" ) {

for ( $bg_y = $start_y; $bg_y < $bg_height; $bg_y += $img_h ) { if ( $bg_y < 0 ) {

$dst_y = 0; $src_y = -$bg_y; $h = $img_h + $bg_y; }

else {

$dst_y = $bg_y; $src_y = 0; $h = $img_h; }

imagecopy($bg, $src, $dst_x, $dst_y, $src_x, $src_y, $img_w, $h); }

}

(24)

for ( $bg_y = $start_y; $bg_y < $bg_height; $bg_y += $img_h ) { for ( $bg_x = $start_x; $bg_x < $bg_width; $bg_x += $img_w ) {

if ( $bg_x < 0 ) { $dst_x = 0; $src_x = -$bg_x; $w = $img_w + $bg_x; }

else {

$dst_x = $bg_x; $src_x = 0; $w = $img_w; }

if ( $bg_y < 0 ) { $dst_y = 0; $src_y = -$bg_y; $h = $img_h + $bg_y; }

else {

$dst_y = $bg_y; $src_y = 0; $h = $img_h; }

imagecopy($bg, $src, $dst_x, $dst_y, $src_x, $src_y, $w, $h); }

} } else {

print 'Unknown repeat!'; }

imagedestroy($src);

} /* End optimize away creation of duplicates */

$this->_canvas->clipping_rectangle($x, $y, $box_width, $box_height); //img: image url string

//img_w, img_h: original image size in px //width, height: box size in pt

//bg_width, bg_height: box size in px //x, y: left/top edge of box on page in pt

//start_x, start_y: placement of image relative to pattern //$repeat: repeat mode

//$bg: GD object of result image // $src: GD object of original image

//When using cpdf and optimization to direct png creation from gd object is available, //don't create temp file, but place gd object directly into the pdf

if ( !$is_png && $this->_canvas instanceof CPDF_Adapter ) { // Note: CPDF_Adapter image converts y position

$this->_canvas->get_cpdf()->addImagePng($filedummy, $x, $this->_canvas->get_height() - $y - $height, $width, $height, $bg);

(25)

$tmp_dir = $this->_dompdf->get_option("temp_dir"); $tmp_name = tempnam($tmp_dir, "bg_dompdf_img_"); @unlink($tmp_name);

$tmp_file = "$tmp_name.png"; //debugpng

if (DEBUGPNG) print '[_background_image '.$tmp_file.']'; imagepng($bg, $tmp_file);

$this->_canvas->image($tmp_file, $x, $y, $width, $height); imagedestroy($bg);

//debugpng

if (DEBUGPNG) print '[_background_image unlink '.$tmp_file.']'; if (!DEBUGKEEPTEMP) {

unlink($tmp_file); }

}

$this->_canvas->clipping_end(); }

protected function _get_dash_pattern($style, $width) { $pattern = array();

switch ($style) { default: /*case "solid": case "double": case "groove": case "inset": case "outset": case "ridge":*/ case "none": break; case "dotted":

if ( $width <= 1 )

$pattern = array($width, $width*2); else

$pattern = array($width); break;

case "dashed":

$pattern = array(3 * $width); break;

}

return $pattern; }

protected function _border_none($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0) {

(26)

protected function _border_hidden($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0) {

return; }

// Border rendering functions

protected function _border_dotted($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0) {

$this->_border_line($x, $y, $length, $color, $widths, $side, $corner_style, "dotted", $r1, $r2); }

protected function _border_dashed($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0) {

$this->_border_line($x, $y, $length, $color, $widths, $side, $corner_style, "dashed", $r1, $r2); }

protected function _border_solid($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0) {

/ TODO: Solve rendering where one corner is beveled (radius == 0), one corner isn't. if ( $corner_style !== "bevel" || $r1 > 0 || $r2 > 0 ) {

/ do it the simple way

$this->_border_line($x, $y, $length, $color, $widths, $side, $corner_style, "solid", $r1, $r2); return;

}

list($top, $right, $bottom, $left) = $widths; // All this polygon business is for beveled corners... switch ($side) {

case "top":

$points = array($x, $y, $x + $length, $y,

$x + $length - $right, $y + $top, $x + $left, $y + $top);

$this->_canvas->polygon($points, $color, null, null, true); break;

case "bottom":

$points = array($x, $y, $x + $length, $y,

$x + $length - $right, $y - $bottom, $x + $left, $y - $bottom);

$this->_canvas->polygon($points, $color, null, null, true); break;

case "left":

$points = array($x, $y, $x, $y + $length,

$x + $left, $y + $length - $bottom, $x + $left, $y + $top);

$this->_canvas->polygon($points, $color, null, null, true); break;

(27)

$points = array($x, $y, $x, $y + $length,

$x - $right, $y + $length - $bottom, $x - $right, $y + $top);

$this->_canvas->polygon($points, $color, null, null, true); break;

default: return; } }

protected function _apply_ratio($side, $ratio, $top, $right, $bottom, $left, &$x, &$y, &$length, &$r1, &$r2) {

switch ($side) { case "top":

$r1 -= $left * $ratio; $r2 -= $right * $ratio; $x += $left * $ratio; $y += $top * $ratio;

$length -= $left * $ratio + $right * $ratio; break;

case "bottom": $r1 -= $right * $ratio; $r2 -= $left * $ratio; $x += $left * $ratio; $y -= $bottom * $ratio;

$length -= $left * $ratio + $right * $ratio; break;

case "left":

$r1 -= $top * $ratio; $r2 -= $bottom * $ratio; $x += $left * $ratio; $y += $top * $ratio;

$length -= $top * $ratio + $bottom * $ratio; break;

case "right":

$r1 -= $bottom * $ratio; $r2 -= $top * $ratio; $x -= $right * $ratio; $y += $top * $ratio;

$length -= $top * $ratio + $bottom * $ratio; break;

default: return; } }

protected function _border_double($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0) {

(28)

$third_widths = array($top / 3, $right / 3, $bottom / 3, $left / 3); // draw the outer border

$this->_border_solid($x, $y, $length, $color, $third_widths, $side, $corner_style, $r1, $r2); $this->_apply_ratio($side, 2/3, $top, $right, $bottom, $left, $x, $y, $length, $r1, $r2); $this->_border_solid($x, $y, $length, $color, $third_widths, $side, $corner_style, $r1, $r2); }

protected function _border_groove($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0) {

list($top, $right, $bottom, $left) = $widths;

$half_widths = array($top / 2, $right / 2, $bottom / 2, $left / 2);

$this->_border_inset($x, $y, $length, $color, $half_widths, $side, $corner_style, $r1, $r2); >_apply_ratio($side, 0.5, $top, $right, $bottom, $left, $x, $y, $length, $r1, $r2); $this->_border_outset($x, $y, $length, $color, $half_widths, $side, $corner_style, $r1, $r2); }

protected function _border_ridge($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0) {

list($top, $right, $bottom, $left) = $widths;

$half_widths = array($top / 2, $right / 2, $bottom / 2, $left / 2);

$this->_border_outset($x, $y, $length, $color, $half_widths, $side, $corner_style, $r1, $r2); >_apply_ratio($side, 0.5, $top, $right, $bottom, $left, $x, $y, $length, $r1, $r2); $this->_border_inset($x, $y, $length, $color, $half_widths, $side, $corner_style, $r1, $r2); }

protected function _tint($c) { if ( !is_numeric($c) )

return $c;

return min(1, $c + 0.16); }

protected function _shade($c) { if ( !is_numeric($c) )

return $c;

return max(0, $c - 0.33); }

protected function _border_inset($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0)

{ switch ($side) {

(29)

case "left":

$shade = array_map(array($this, "_shade"), $color);

$this->_border_solid($x, $y, $length, $shade, $widths, $side, $corner_style, $r1, $r2); break;

case "bottom": case "right":

$tint = array_map(array($this, "_tint"), $color);

$this->_border_solid($x, $y, $length, $tint, $widths, $side, $corner_style, $r1, $r2); break;

default: return; } }

protected function _border_outset($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0)

{ switch ($side) {

case "top": case "left":

$tint = array_map(array($this, "_tint"), $color);

$this->_border_solid($x, $y, $length, $tint, $widths, $side, $corner_style, $r1, $r2); break;

case "bottom": case "right":

$shade = array_map(array($this, "_shade"), $color);

$this->_border_solid($x, $y, $length, $shade, $widths, $side, $corner_style, $r1, $r2); break;

default: return; } }

// Draws a solid, dotted, or dashed line, observing the border radius

protected function _border_line($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $pattern_name, $r1 = 0, $r2 = 0) {

list($top, $right, $bottom, $left) = $widths; $width = $$side;

$pattern = $this->_get_dash_pattern($pattern_name, $width); $half_width = $width/2;

$r1 -= $half_width; $r2 -= $half_width; $adjust = $r1/80; $length -= $width; switch ($side) {

case "top":

$x += $half_width; $y += $half_width; if ( $r1 > 0 ) {

(30)

}

$this->_canvas->line($x + $r1, $y, $x + $length - $r2, $y, $color, $width, $pattern); if ( $r2 > 0 ) {

$this->_canvas->arc($x + $length - $r2, $y + $r2, $r2, $r2, 45-$adjust, 90+$adjust, $color, $width, $pattern);

} break; case "bottom":

$x += $half_width; $y -= $half_width; if ( $r1 > 0 ) {

$this->_canvas->arc($x + $r1, $y - $r1, $r1, $r1, 225-$adjust, 270+$adjust, $color, $width, $pattern);

}

$this->_canvas->line($x + $r1, $y, $x + $length - $r2, $y, $color, $width, $pattern); if ( $r2 > 0 ) {

$this->_canvas->arc($x + $length - $r2, $y - $r2, $r2, $r2, 270-$adjust, 315+$adjust, $color, $width, $pattern);

} break; case "left":

$y += $half_width; $x += $half_width; if ( $r1 > 0 ) {

$this->_canvas->arc($x + $r1, $y + $r1, $r1, $r1, 135-$adjust, 180+$adjust, $color, $width, $pattern);

}

$this->_canvas->line($x, $y + $r1, $x, $y + $length - $r2, $color, $width, $pattern); if ( $r2 > 0 ) {

$this->_canvas->arc($x + $r2, $y + $length - $r2, $r2, $r2, 180-$adjust, 225+$adjust, $color, $width, $pattern);

} break; case "right":

$y += $half_width; $x -= $half_width; if ( $r1 > 0 ) {

$this->_canvas->arc($x - $r1, $y + $r1, $r1, $r1, 0-$adjust, 45+$adjust, $color, $width, $pattern); }

$this->_canvas->line($x, $y + $r1, $x, $y + $length - $r2, $color, $width, $pattern); if ( $r2 > 0 ) {

(31)

} break; } }

protected function _set_opacity($opacity) {

if ( is_numeric($opacity) && $opacity <= 1.0 && $opacity >= 0.0 ) { $this->_canvas->set_opacity( $opacity );

} }

protected function _debug_layout($box, $color = "red", $style = array()) { $this->_canvas->rectangle($box[0], $box[1], $box[2], $box[3], CSS_Color::parse($color), 0.1,

(32)

Referensi

Garis besar

Dokumen terkait

Break even point atau analisis titik impas (BEP) umumnya berhubungan dengan suatu proses penentuan tingkat produksi suatu usaha agar kegiatan yang dilakukan dapat membiayai

[r]

tertanggal ___________ perihal layaknya proyek yang sedang Saudara kerjakan untuk dijadikan obyek praktek kerja bagi mahasiswa kami, yang namanya tersebut di bawah

Pembersihan Bahu Jalan NAMA PEKERJAAN :. HALMAHERA

Berdasarkan Hasil Evaluasi dokumen Kualifikasi tersebut, maka Pokja XLVI menetapkan rekanan yang masuk dalam Daftar Pendek Konsultan adalah sebagai berikut :.. NO NAMA PERUSAHAAN

ءامو يف م لودأج

KARYA BETANG MANDIRI KONSULTAN dan berdasarkan tahapan proses Seleksi Sederhana selanjutnya, maka perusahaan Saudara seperti perihal tersebut diatas untuk dapat hadir

TIKA KREATIF DESAIN KONSULTAN dan berdasarkan tahapan proses Seleksi Sederhana selanjutnya, maka perusahaan Saudara seperti perihal tersebut diatas untuk dapat hadir dalam