SQLの窓

2024年08月08日


SQLServer の BCP で INT IDENTITY 列に csv からリストアする

bcp ユーティリティにおいて、-E オプションで可能になります。

▼ -E の説明
インポートしたデータ ファイルの ID 値 (複数可) を ID 列に使用することを指定します。 -E を指定しない場合、インポートされるデータ ファイルのこの列の ID 値は無視され、SQL Server はテーブルの作成時に指定されたシードと増分の値に基づいて、一意の値を自動的に割り当てます。

出力
bcp.exe DB名..[出力テーブル名] out "c:\TMP\data.csv" -c -t , -U sa -P

入力
bcp.exe DB名..[入力テーブル名] in "c:\TMP\data.csv" -e "c:\TMP\error.log" -c -t , -E -U sa -P
この環境では、パスワードは空文字です。
データにカンマが含まれる場合は、区切り文字を変更します。( -t , )



【SQLExpressの最新記事】
posted by lightbox at 2024-08-08 11:20 | SQLExpress | このブログの読者になる | 更新情報をチェックする

2024年08月06日


MySQL に PIPES_AS_CONCAT を設定して、CSV を出力する SQL

Windows で、XAMPP を使用している場合、my.ini がありますが、その中の設定で sql_mode と言うエントリがあるので、そこに PIPES_AS_CONCAT を追加します。
sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT
そのうえで、以下のような SQL を作成して実行します。
select

社員コード||','||氏名||','||フリガナ||','||所属||','||性別||','||作成日||','||更新日||','||給与||','||手当||','||管理者||','||生年月日 from 社員マスタ

into OUTFILE 'C:\\TEMP\\syain.csv'
※ データ内に NULL 値が無いようにする必要があります( または SQL で関数を使うか )
※ csv の二度目の上書きはできません


関連する記事

PL/SQL : 最も簡単な CSV 出力 の記述


posted by lightbox at 2024-08-06 09:50 | MySQL | このブログの読者になる | 更新情報をチェックする

Chrome ポリシー : レジストリ : ( ChatGPT 解説 )

以下のレジストリの効果を解説してください
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome]
"ShowHomeButton"=dword:00000001
"AutofillAddressEnabled"=dword:00000000
"HomepageLocation"="https://www.google.com/"
"BrowserThemeColor"="#FFFFFF"
"PromptForDownloadLocation"=dword:00000001
"AutofillCreditCardEnabled"=dword:00000000
"ShowAppsShortcutInBookmarkBar"=dword:00000000
"HomepageIsNewTabPage"=dword:00000000
"PasswordManagerEnabled"=dword:00000000
"TaskManagerEndProcessEnabled"=dword:00000001
"TranslateEnabled"=dword:00000001
"BrowserAddPersonEnabled"=dword:00000000
"NTPCustomBackgroundEnabled"=dword:00000000

  • このレジストリキーと値は、Google Chromeの特定の機能の動作を制御するためのものです。それぞれの値の意味を以下に説明します。
    1. ShowHomeButton
      ホームボタンをブラウザのツールバーに表示するかどうかを指定します。dword:00000001 はホームボタンが表示されることを意味します。
    2. AutofillAddressEnabled
      自動入力機能で住所の自動入力が有効かどうかを指定します。dword:00000000 は無効であることを示します。
    3. HomepageLocation
      ホームボタンをクリックしたときに開かれるホームページのURLを指定します。ここでは https://www.google.com/ です。
    4. BrowserThemeColor
      ブラウザのテーマカラーを指定します。#FFFFFF は白色です。
    5. PromptForDownloadLocation
      ダウンロードするファイルの保存場所を指定するようにユーザーにプロンプトを表示するかどうかを指定します。dword:00000001 はプロンプトを表示することを意味します。
    6. AutofillCreditCardEnabled
      自動入力機能でクレジットカードの自動入力が有効かどうかを指定します。dword:00000000 は無効であることを示します。
    7. ShowAppsShortcutInBookmarkBar
      ブックマークバーにアプリのショートカットを表示するかどうかを指定します。dword:00000000 は表示されないことを意味します。
    8. HomepageIsNewTabPage
      ホームページが新しいタブページであるかどうかを指定します。dword:00000000 は新しいタブページではないことを意味します。
    9. PasswordManagerEnabled
      パスワードマネージャーが有効かどうかを指定します。dword:00000000 は無効であることを意味します。
    10. TaskManagerEndProcessEnabled
      タスクマネージャーでプロセスを終了する機能が有効かどうかを指定します。dword:00000001 は有効であることを意味します。
    11. TranslateEnabled
      翻訳機能が有効かどうかを指定します。dword:00000001 は有効であることを意味します。
    12. BrowserAddPersonEnabled
      ブラウザで新しいユーザープロファイルを追加できるかどうかを指定します。dword:00000000 は追加できないことを意味します。
    13. NTPCustomBackgroundEnabled
      新しいタブページでカスタム背景画像が使用できるかどうかを指定します。dword:00000000 は使用できないことを意味します。
  • これらの設定により、特定の機能がユーザーの希望やポリシーに応じて有効または無効にされます。
  • 
    
    
    
    posted by lightbox at 2024-08-06 08:38 | Google Chrome | このブログの読者になる | 更新情報をチェックする

    PL/SQL : 最も簡単な CSV 出力 の記述

    CSV イメージを最初から SQL で作成しておいて、取りだすデータが 1つの列にしておく事で高速な処理が可能になります
    
    CREATE OR REPLACE PROCEDURE LIST_MEMBER
    (
    	/* カーソルの範囲指定用  */
    	PM_STRING IN VARCHAR2
    )
    
    /**********************************************************/
    /* 変数の定義 */
    /**********************************************************/
    AS
    	WK_VALUE	VARCHAR2(2000);
    
    	/* カーソルの定義(主に複数読み込み用)  */
    	CURSOR cur_main IS
    		SELECT
    			社員コード||','||
    			氏名||','||
    			フリガナ||','||
    			所属||','||
    			性別||','||
    			作成日||','||
    			更新日||','||
    			給与||','||
    			手当||','||
    			管理者||','||
    			生年月日
    			from "社員マスタ"
    		where 社員コード <= PM_STRING;
    
    	-- ディスクへ書き込むファイル名
    	WK_FILENAME VARCHAR2(100) := 'syain.csv';
    	-- ファイルにアクセスする為のハンドルの定義
    	FILEHANDLE UTL_FILE.FILE_TYPE;
    
    /**********************************************************/
    /* 処理開始 */
    /**********************************************************/
    BEGIN
    	DBMS_OUTPUT.PUT_LINE('デバッグ:開始');
    	DBMS_OUTPUT.PUT_LINE('デバッグ:引数:'||PM_STRING);
    
    	/* カーソルを開く */
    	OPEN cur_main;
    
    	-- 第一引数は、ディレクトリオブジェクトの名称( 但し文字列 )
    	FILEHANDLE := UTL_FILE.FOPEN( 'MYDIR', WK_FILENAME, 'w' );
    
    	/* ループ処理(ブロック) */
    	LOOP 
    		/* 定義したレコード変数に読み込み */
    		FETCH cur_main INTO WK_VALUE;
    		/* カーソルに対するシステム変数でデータ終わりを判断 */
    		if cur_main%NOTFOUND then 
    			/* ループ処理を脱出 */
    			EXIT; 
    		end if; 
    
    		-- 書き込み
    		UTL_FILE.PUT_LINE(FILEHANDLE,WK_VALUE);
    	 
    	END LOOP; 
    
    	-- ファイルを閉じる
    	UTL_FILE.FCLOSE( FILEHANDLE );
    
    	/* カーソルを閉じる */
    	CLOSE cur_main;
    
    /**********************************************************/
    /* 一番外側のブロックの例外処理 */
    /**********************************************************/
    $if 1=1 $then
    EXCEPTION
    	WHEN OTHERS THEN
    		DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
    $end
    END;
    
    
    
    
    
    
    posted by lightbox at 2024-08-06 00:18 | Oracle : PL/SQL | このブログの読者になる | 更新情報をチェックする

    2024年08月05日


    VBScript を『管理者として実行する』には、Shell の runas ( 右クリックメニューの実行と同等 ) で実現します / Jscript も追加

    VBScript を『管理者として実行する』には、以下の内容ををスクリプトの先頭に記述します
    
    

    🔻 VBScript

    Set obj = Wscript.CreateObject("Shell.Application")
    if Wscript.Arguments.Count = 0 then
    	obj.ShellExecute "wscript.exe", WScript.ScriptFullName & " runas", "", "runas", 1
    	Wscript.Quit
    end if
    
    Wscript.Echo "ここは管理者権限で実行されます"
    
    
    
    

    🔻 Jscript

    ※ Jscript は WScript 等、大文字小文字の区別があるので注意です。
    var obj = new ActiveXObject("Shell.Application");
    if ( WScript.Arguments.length == 0 ) {
    	obj.ShellExecute( "wscript.exe", WScript.ScriptFullName + " runas", "", "runas", 1 );
    	WScript.Quit();
    }
    
    WScript.Echo( "ここは管理者権限で実行されます" );
    
    
    Shell.ShellExecute method
    
    これは、VBScript から利用可能な Shell の機能を使って、右クリックメニューにある『管理者として実行』を実行する方法です。ここでは日本語では無く runas と言う文字列を使って管理者として実行させています。
    
    但し、引数がなかった場合の処理としては処理終了します。ですからこのスクリプトでは、引数をダミーで一つセットして( この場合一つめの runas がそうです )自分自身を再度呼び出しています。
    
    つまり、Windows からすれば二度目の実行が管理者としての実行になります。
    
    この場合は、スクリプトに引数を渡す事ができません。もし渡したい場合は、違ったトリックを使う必要があるのに注意して下さい。(その場合は、外部ファイルから入力するのがもっとも簡単で確実だと思います)
    
    
    
    
    
    
    
    posted by lightbox at 2024-08-05 12:10 | VBS + Shell | このブログの読者になる | 更新情報をチェックする

    fake sendmail for windows を使って、PHP でごく普通に( mb_send_mail で )メール送信

    fake sendmail は、XAMPP に同梱されています
    
    メールサーバは、フリーメールで可能で、簡単な設定で利用できます。以下のサンプルは、さくらインターネット で動作確認しました。
    
    ▼ 手順
    
    ダウンロード
    
    配布元より、sendmail.zip をダウンロードして、解凍します。
    ( XAMPP には sendmail フォルダがあります )
    
    sendmail.exe の動作テスト
    
    まず、sendmail.ini をエディタで開いて、四つのエントリを指定します
    ▼ さくらインターネットを使う場合の設定
    
    smtp_server=初期ドメイン
    smtp_port=587
    auth_username=ユーザ@初期ドメイン
    auth_password=パスワード
    
    ※ smtp_ssl=auto となっており、デフォルトで ssl で実行され、使え無い場合は TLS を使おうとします php.ini の設定
    sendmail_path = "C:\tools\sendmail\sendmail.exe"
    
    実際の sendmail.exe のパスを "" で囲んで指定します。 ※ この場合、エラーログは "C:\tools\sendmail\error.log" です( デフォルト ) PHP のコード ( UTF8 BOM なしで記述します ) HTML の input 要素で type="text" name="fld_to"、name="fld_subject"、name="fld_body"、を form 要素の中に記述し、form 要素に method="post" action="以下の PHP のファイルのパス" を指定し、form 要素の中に input 要素で type="submit" を指定したボタンを記述します。
    mb_language("Japanese");
    mb_internal_encoding("UTF-8");
    
    $from_header = "From: " . mb_encode_mimeheader( mb_convert_encoding("差出人","iso-2022-jp") );
    
    $from_header .= " <{$GLOBALS["mail"]}>";
    
    $result = mb_send_mail($_POST["fld_to"], $_POST["fld_subject"], $_POST["fld_body"], $from_header);
    if ( $result ) {
    	$error = "OK";
    }
    else {
    	$error = "ERROR";
    }
    
    print mb_language() . "
    "; print $error;
    $GLOBALS["mail"] は、メール形式であれば良いですが、通常ならば auth_username で指定したメールアドレスを記述します。
    
    PHP の mb_send_mail の使用方法の全体のサンプルは、こちらを参照して下さい。
    
    
    
    
    
    
    posted by lightbox at 2024-08-05 10:36 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする

    2024年08月04日


    TCPDF をダウンロードして、Windows の任意のフォルダで TCPDF 同梱のサンプルを実行する為の設定

    2024/08/04 時点で 6.7.5
    
    テスト環境
    
    ❶ Windows11 64ビット + XAMPP  8.2.12 + php ( 8.2.12 )
    ❷ TCPDF ( C:\app\TCPDF-main として解凍 )
    
    テスト内容
    
    TCPDF-main.zip を解凍すると、TCPDF-main\examples というフォルダがあり、そこにサンプルが沢山ありますが、それを他のフォルダでも同様に動作させます。
    
    手順 ❶ example フォルダを全て 任意のフォルダにコピー( アプリの実行環境になります ) ❷ そのフォルダを XAMPP で、PHP が動作するようにする ❸ tcpdf_include.php を以下のように書き換える ( set_include_path までを先頭に、require_once('tcpdf.php'); は追加、または全部以下に書き換え )
    <?php
    $path = "/app/TCPDF-main";
    set_include_path(get_include_path() . PATH_SEPARATOR . $path);
    require_once('config/tcpdf_config_alt.php');
    require_once('tcpdf.php');
    ?>
    
    
    barcodes は、tcpdf_barcodes_1d_include.php と tcpdf_barcodes_2d_include.php の
    中身の配列の参照パスの一つを realpath('/app/TCPDF-main/tcpdf_barcodes_1d.php')
    のように変更すれば動作します( tcpdf_barcodes_2d_include.php も同じ )
    
    // Include the TCPDF 1D barcode class (search the class on the following directories).
    $tcpdf_barcodes_1d_include_dirs = array(
        realpath(dirname(__FILE__) . '/../../tcpdf_barcodes_1d.php'),// True source file
    	realpath('/app/TCPDF-main/tcpdf_barcodes_1d.php'),// Relative from $PWD
    	'/usr/share/php/tcpdf/tcpdf_barcodes_1d.php',
    	'/usr/share/tcpdf/tcpdf_barcodes_1d.php',
    	'/usr/share/php-tcpdf/tcpdf_barcodes_1d.php',
    	'/var/www/tcpdf/tcpdf_barcodes_1d.php',
    	'/var/www/html/tcpdf/tcpdf_barcodes_1d.php',
    	'/usr/local/apache2/htdocs/tcpdf/tcpdf_barcodes_1d.php'
    );
    
    
    フォントの追加は、tcpdf_addfont.php で作成したフォントファイルを fonts フォルダにコピーします。
    
    
    
    
    
    タグ:PHP PDF TCPDF
    posted by lightbox at 2024-08-04 09:34 | PHP + PDF | このブログの読者になる | 更新情報をチェックする

    2024年07月24日


    JavaScript : window オブジェクトのプロパティとしてグローバル変数を定義する

    実際は、右辺にオブジェクトをセットして専用の名前空間で参照できるライブラリのインスタンスとして利用します。
    
    ルートで var で定義する変数と厳密には違うようですが、事実上同じと思っていいと思います。ですから、Fucntion 内でグルーバルな変数を利用したい場合は、window オブジェクトを使用すると良いでしょう
    
    window.変数名 = "lightbox"
    
    または
    
    window["変数名"] = "lightbox"
    
    
    例えば、ライブラリを簡単にまとめると以下のような定義のしかたになります。
    
    (function(){
    
        S = {
    
            // いろいろな定義
    
            },
    
        // いろいろな定義
        ;
    
        window['MyLIB'] = S;
    
    })();
    
    
    
    (function(){})(); は、関数を定義して呼び出すのを一度に行う書き方で、無名関数を定義して () で実行しています
    
    <script>
    
    window["MyLIB"] = "lightbox";
    
    
    (function(){
    
    	alert(MyLIB);
    
    })();
    
    </script>
    
    
    
    
    
    posted by lightbox at 2024-07-24 10:12 | JavaScript オブジェクト | このブログの読者になる | 更新情報をチェックする

    2024年05月12日


    TCPDF をダウンロードして、フリーフォントを埋め込み型で使用する方法

    
    2024/04/20 時点で 6.7.5
    2018/11/30 時点で 6.2.26
    2016/01/13 時点で 6_2_12
    2014/05/22 時点で 6_0_080
    さくらサーバでは、php.ini で memory_limit = 256M で動作しています(日本語フォントが大きくなっていました )
    2013/09/11 時点で 6_0_025TCPDF をダウンロードして、Windows の任意のフォルダで TCPDF 同梱のサンプルを実行する為の設定』の続きです。
    
    TCPDF 用の専用フォント(情報)ファイルは TCPDF そのもの( tcpdf_addfont.php )に作成させるようになっていて、コマンドプロンプトから php で処理できます。
    
    埋め込み : c:\php\php tcpdf_addfont.php -t TrueTypeUnicode -f 32 -i hc-poo5.ttf
    非埋め込み : c:\php\php tcpdf_addfont.php -t CID0JP -f 32 -i hc-poo5.ttf
    
    -t は省略すると フォントファイルをチェックして通常は TrueTypeUnicode になり、-f は省略すると 32 です。 ※ -b を指定すると、character bounding box の情報を php のフォントファイルに書き込みます( If true includes the character bounding box information on the php font file. )
    
    動的にフォントファイルを作成する addTTFfont メソッドの使い方 以下のようにして使用できますが、一度作成すると無駄なコードとなる上に ttf ファイルをサーバに置く管理になるので最初に TCPDF 用のフォントファイルを作成しておいて使用するのが現実的です。( TCPDF は サーバーに ttf ファイルを必要としません )
    // フォントを動的に作成して使用する方法( 作成するのは最初だけ )
    // ※ 32 はデフォルトですが、メソッドの都合上省略しない
    // ※ フォントフォルダのパスを / で終了させる
    $fontname = TCPDF_FONTS::addTTFfont("hc-poo5.ttf", "TrueTypeUnicode", "", 32, "C:\\httpd142p\\pdf_format\\tcpdf\\fonts/");
    
    
    フリーフォントは、通常システムに無いですから、『埋め込み』で処理する事になります。但しそのぶん PDF が大きくなってしまいますが、PC の環境に依存せず表示されます。
    
    フリーフォントによっては崩れて使え無いですが、現在デフォルトで『部分埋込($font_subsetting)』により使用している文字のみ埋め込むようになっています( 全て埋め込む場合は $pdf->setFontSubsetting(false); を実行)
    部分埋め込み : 84k
    全て埋め込み : 4224k
    
    🔴 フォントに依存しますが、フリーフォントを使用する場合、固定の文書ならば部分埋め込みで出力してから校正すればいいですが、動的な文書の場合は全て埋め込みにする必要があります。
    	/**
    	 * Boolean flag: if true enables font subsetting by default.
    	 * @protected
    	 * @since 5.3.002 (2010-06-07)
    	 */
    	protected $font_subsetting = true;
    
    
    非埋め込み型は、Windows(等) に最初からあるフォントを対象とし、PDF のサイズを小さくする事が主な目的となります。
    
    こちらから、実際に『HCP丸ゴシック(蓬莱和多流)』と言うフリーフォントを使ったPDF がご覧いただけます(部分埋め込み)。
    
    
    この PDF は、サンプルの38番を書き換えたもので、オリジナルよりさらにシンプルになっています。
    (部分埋め込み型です)
    
    <?php
    require_once('tcpdf_include.php');
    
    // create new PDF document
    $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
    
    $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
    $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
    
    // set auto page breaks
    $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
    
    $pdf->SetFont('hcpoo5', '', 20);
    $pdf->AddPage();
    
    $txt = 'example_038.pdfは非埋め込み型フォントのサンプルですが、hcpoo5はフリーフォントを埋め込み型で変換したものです
    
    ';
    $pdf->Write(0, $txt, '', 0, 'L', false, 0, false, false, 0);
    
    $pdf->SetFont('hcpoo5', '', 14);
    $txt = '埋め込み	: c:\php\php tcpdf_addfont.php -i hc-poo5.ttf
    非埋め込み	: c:\php\php tcpdf_addfont.php -t CID0JP -i hc-poo5.ttf
    
    ';
    $pdf->Write(0, $txt, '', 0, 'L', false, 0, false, false, 0);
    
    $pdf->SetFont('hcpoo5', '', 40);
    
    $txt = 'こんにちは世界あいうえお漢字表示';
    for( $i = 0; $i < 4; $i++ ) {
    	$txt .= $txt;
    }
    
    $pdf->Write(0, $txt, '', 0, 'L', false, 0, false, false, 0);
    
    // ---------------------------------------------------------
    
    //Close and output PDF document
    $pdf->Output('example_038.pdf', 'I');
    
    
    TCPDF 用フォントの作成
    
    作成されたフォントは、fonts フォルダにコピーされますが、再作成する場合はいったん削除します。埋め込み型では、3つ作成されますが、非埋め込み型だと1つです。
    
    >c:\php\php tcpdf_addfont.php -t CID0JP -i hc-poo5.ttf
    
    >>> Converting fonts for TCPDF:
    *** Output dir set to C:\httpd142p\lightbox\tcpdf_6_0_080\tcpdf/fonts/
    +++ OK   : C:\httpd142p\lightbox\tcpdf_6_0_080\tcpdf\tools\hc-poo5.ttf added as
    hcpoo5
    >>> Process successfully completed!
    
    
    >c:\php\php tcpdf_addfont.php -i hc-poo5.ttf
    
    >>> Converting fonts for TCPDF:
    *** Output dir set to C:\httpd142p\lightbox\tcpdf_6_0_080\tcpdf/fonts/
    +++ OK   : C:\httpd142p\lightbox\tcpdf_6_0_080\tcpdf\tools\hc-poo5.ttf added as
    hcpoo5
    >>> Process successfully completed!
    
    ( 上が非埋め込み、下が埋め込み )
    
    非埋め込み型フォント使用時の代替フォントについて
    
    TCPDF 内には cid0jp という非埋め込み型のフォントが用意されていますが、実際に PC にインストールされているフォントを内部では指定していません。なので、表示は代替フォントで表示されます。ただ、代替フォントについて詳細な情報はあまりありません。Adobe のドキュメントでのみ( 代替フォント )という言葉を見る事ができました。しかし、具体的にどのフォントを使うかまでは確認できていません。
    
    こちらの環境(Windows)では、非埋め込み型フォントを使ってそのフォントが無い場合は代替で MSゴシックまたはMS明朝(たぶん)が使われていました
    再度確認してみると、Chrome PDF Viewer で MS明朝(らしい)。Firefox 内臓ビュアーでMSゴシック
    Firefox は、ブラウザの規定のフォントが使われていたので変更可能でした
    Chrome は、pdf.dll の中に『Arial Unicode MS    MingLiU SimSun  MS Mincho』という文字列があったので、MS明朝が優先されているような気がします( 変更方法は不明 )
    
    cid0jp について補足
    
    $name='cid0jp'; 部分の cid0jp を日本語で置き換えて SHIFT_JIS で保存すると、英数字の文字ピッチは狂うと思いますが、インストールされているフォントであれば一応の表示が可能です。
    
    
    
    
    
    漢字等にはほぼ影響出ないとは思いますが、正しいピッチで表示するにはオリジナルのフォントから非埋め込み用フォントを作成して登録する必要があります
    
    
    ※ Office で使用可能なフォントに関しては英語名が使用できませんでした
    
    
    関連する記事
    

    タグ:PHP TCPDF PDF
    posted by lightbox at 2024-05-12 11:44 | PHP + PDF | このブログの読者になる | 更新情報をチェックする

    2024年04月29日


    汎用型 : JSON データより履歴書のフォームを出力するサンプル

    
    
    デモページ
    
    JSON データ
    
    ごく一般的なデータから罫線(含連続)・BOX・テキスト・画像を出力して単票のフォームを作成します。特別な内容ではありませんが、JSON を使うと結構汎用性も出るのでは無いかと思います。
    
    印字部分
    
    <?php
    // ************************************************
    // セッションとキャッシュなし
    // ************************************************
    session_cache_limiter('nocache');
    session_start();
    
    require_once("print.php");
    
    // ************************************************
    // フォーマットデータ
    // ************************************************
    $url = "ri.json";
    $file = @file_get_contents($url);
    if ( $file !== false ) {
    	// 連想配列形式で返す
    	$result = json_decode( $file, true );
    
    	if ( $result == null ) {
    		// テキストのサイズ変更
    		$pdf->SetFont('meiryo001', '', 20);
    		// テキストの色
    		$pdf->SetTextColor(255, 0, 0);
    		user_text( $pdf, 10, 10, 'データが存在しません' );
    		$pdf->Output("test_output.pdf", "I");
    		exit();
    	}
    
    }
    
    
    log_out(null);
    
    $pdf->SetFont('meiryo001', '', 14);
    
    $pdf->AddPage();
    
    // ************************************************
    // 印字コマンド実行
    // ************************************************
    foreach( $result['format'] as $obj ) {
    
    	if ( $obj['type'] == 'image' ) {
    		$pdf->Image($obj['f'], $obj['x'],$obj['y'],$obj['w'],$obj['h']);
    		continue;
    	}
    
    	if ( $obj['type'] == 'text' ) {
    		$pdf->SetFont('meiryo001', '', $obj['s']);
    		user_text( $pdf, $obj['x'],$obj['y'], $obj['t'] );
    		continue;
    	}
    
    	if ( $obj['type'] == 'rect' ) {
    		$pdf->Rect($obj['x'],$obj['y'],$obj['w'],$obj['h']);
    		continue;
    	}
    
    	if ( $obj['type'] == 'line' ) {
    		$pdf->Line($obj['x'],$obj['y'],$obj['x']+$obj['w'],$obj['y']);
    		continue;
    	}
    
    	if ( $obj['type'] == 'vline' ) {
    		$pdf->Line($obj['x'],$obj['y'],$obj['x'], $obj['y']+$obj['h']);
    		continue;
    	}
    
    	if ( $obj['type'] == 'lines' ) {
    
    		$row = $obj['y'];
    		
    		for( $i = 0; $i < $obj['n']; $i++ ) {
    			$pdf->Line($obj['x'], $row, $obj['x']+$obj['w'], $row);
    			$row += $obj['p'];
    		}
    
    		continue;
    	}
    
    }
    
    
    // ブラウザへ PDF を出力します
    $pdf->Output("test_output.pdf", "I");
    ?>
    
    
    
    TCPDF 依存部分(print.php)
    
    <?php
    define ('K_PATH_FONTS', "tcpdf/");
    require_once('tcpdf/tcpdf.php');
    
    // ************************************************
    //   P or PORTRAIT(縦:既定)
    //   L or LANDSCAPE(横))
    // ---------------------------
    //   pt: ポイント
    //   mm: mm(既定)
    //   cm: cm
    //   in: インチ
    // ---------------------------
    //   用紙サイズ
    // ---------------------------
    // boolean $unicode = true
    // ---------------------------
    // String $encoding = 'UTF-8'
    // ---------------------------
    // boolean $diskcache = false
    // ---------------------------
    // PDF/A モード
    // ---------------------------
    // 
    // 全てデフォルトなので $pdf = new TCPDF("L") でもOK
    // ************************************************
    $pdf = new TCPDF("P");
    /*
    $pdf = new TCPDF(
    	"L",
    	"mm",
    	"A4",
    	true,
    	"UTF-8",
    	false,
    	false
    );
    */
    
    // ************************************************
    // 設定
    // ************************************************
    $pdf->setFontSubsetting(false);
    $pdf->setPrintHeader(false);
    $pdf->setPrintFooter(false);
    $pdf->SetAutoPageBreak(false);
    
    
    function log_out( $text ) {
    
    	if ( $text == null ) {
    		file_put_contents("log.txt","");
    		return;
    	}
    
    	file_put_contents("log.txt", $text . "\n", FILE_APPEND );
    
    }
    
    # **********************************************************
    #  テキスト印字
    # **********************************************************
    function user_text( $pdf, $x, $y, $text, $w=1, $h=0, $p="L" ) {
    
    	text( $pdf, $x, $y, $text, $w, $h, $p );
    
    	return $y;
    
    }
    
    # **********************************************************
    # 位置指定印字
    # ※ 改行コードで自動改行
    # ※ ページあふれで自動改ページ
    # ※ 内部印字位置は保存( 元に戻す )
    # **********************************************************
    function text( $pdf, $x=0, &$y=0, $txt='', $w=1, $h=0, $p="L" ) {
    
    	$a = $pdf->GetX();
    	$b = $pdf->GetY();
    
    	$hm = $pdf->getPageHeight( );
    	$dm = $pdf->getPageDimensions();
    	$tm = $dm['tm'];
    	$bm = $dm['bm'];
    
    	$txt = str_replace( "\r","", $txt );
    	$data = explode("\n", $txt );
    	if ( count( $data ) > 1 ) {
    		for( $i = 0; $i < count($data); $i++ ) {
    			if ( $i == 0 ) {
    				$pdf->SetXY( $x, $y );
    			}
    			else {
    				$y += $pdf->getLastH();
    				if ( $y >= ( $hm - $tm - $bm ) ) {
    					$pdf->AddPage();
    					$y = $tm;
    				}
    				$pdf->SetXY( $x, $y );
    			}
    			$pdf->Cell($w, $h, $data[$i], 0, 0, $p);
    		}
    	}
    	else {
    		$pdf->SetXY( $x, $y );
    		$pdf->Cell($w, $h, $txt, 0, 0, $p);
    	}
    	$y += $pdf->getLastH();
    
    	$pdf->SetXY($a,$b);
    
    }
    
    
    ?>
    
    
    
    関連する記事
    
    1会話・IFRAME(TCPDF)テンプレート : jQuery + Bootstrap(css) + mmenu + Firebase + TCPDF + PHP
    
    
    
    
    
    タグ:PDF PHP TCPDF Firebase
    posted by lightbox at 2024-04-29 02:26 | PHP + PDF | このブログの読者になる | 更新情報をチェックする

    2024年02月15日


    ChatGPT で トップまでスクロールする ブックマークレット

    ブックマークバーにドラッグ & ドロップしてください。
    
    共有用のリンクページでも動作するようです
    
    
    CharGPT scroll TOP
    
    
    <a href="javascript:document.getElementsByClassName('text-base')[0].scrollIntoView(false);void(0);">CharGPT scroll TOP</a>
    
    
    
    
    posted by lightbox at 2024-02-15 15:07 | ChatGPT | このブログの読者になる | 更新情報をチェックする

    2023年08月04日

    container 終わり



    フリーフォントで簡単ロゴ作成
    フリーフォントでボタン素材作成
    フリーフォントで吹き出し画像作成
    フリーフォントではんこ画像作成
    ほぼ自由に利用できるフリーフォント
    フリーフォントの書体見本とサンプル
    画像を大きく見る為のウインドウを開くボタンの作成

    CSS ドロップシャドウの参考デモ
    イラストAC
    ぱくたそ
    写真素材 足成
    フリーフォント一覧
    utf8 文字ツール
    右サイド 終わり
    base 終わり