2014/11/19(水)postgresqlへの問い合わせが化けてた
データベース学習用のajaxを組んでいたのだけど、日本語が文字化けしてどうしようもなかったのだけど、ようやく解決策が判明
データベースへの問い合わせ結果も、外部入力と同様にdecodeすべきだった模様
すべてUFT8で統一していたので気づかなかった
メモ
use Encode 'encode'; $sth = $dbh->prepare($q); $row = $sth->execute(); #適当にフェッチ $value = decode('UTF-8', $value); # 結果の値をデコード #最後にエンコードして返す return encode('UTF-8', $result);
2011/03/27(日)insideなページ構築中 (pdfの作成)
注意
最終的にroot権限がないとこにインスコする必要があるため、PREFIX付けてます
ライブラリの更新だけはrootでやってますが(汗
PDF::API2のインスコ
準備
ExtUtils::MakeMakerの6.31以上が必要らしいので
rootでcpan使ってinstall ExtUtils::MakeMakerしておく
あと、Font::TTFも必要っぽいので落として入れておく
$ tar xvzf Font-TTF-0.48.tar.gz $ cd Font-TTF-0.48 $ perl Makefile PREFIX=~/lib $ make; make test; $ make install
PDF::API2
$ tar xvzf PDF-API2-2.019.tar.gz $ perl Makefile.PL PREFIX=~/public_html/inside/lib $ make; make test $ make install
make testでFont::TTFが無いと怒られるけど、標準パスに置いてないので当然
気にしないでinstall
使う
use PDF::API2;を忘れずに
基本
# 1. PDFを作る or 開く $pdf = PDF::API2->new(); #$pdf = PDF::API2->open('my.pdf'); # 2. ページを開く or 作る #$page = $pdf->openpage(1); # 1ページ目 #$page = $pdf->openpage(-1); # 最後のページ $page = $pdf->page(); # 新期ページ # 3. いろいろする # サンプル参考に # 4. 保存する or 名前を付けて保存する or 更新する or textではき出す #$pdf->save(); $pdf->saveas('new.pdf'); #$pdf->update(); #$pdf->stringify(); # 5. pdfを閉じる $pdf->end();
サンプル
文字を書く
use PDF::API2; my $pdf; my $page; my $font; my $text; $pdf = PDF::API2->new(); $page = $pdf->page(); $page->mediabox('A4'); $font = $pdf->corefont('Times-Roman'); $text = $page->text(); $text->font($font, 16); $text->translate(10,300); # 左下が基準っぽい $text->text("sample pdf"); $font = $pdf->cjkfont('KozMin'); $text = $page->text(); $text->font($font, 16); $text->translate(10,275); $text->text("サンプル②"); # ttf使うと、fontが埋め込まれます # その分ファイルサイズが大きくなるので注意 $font = $pdf->ttfont('./font/ipaexg.ttf', -encode=>'euc-jp'); $text = $page->text(); $text->font($font, 16); $text->translate(10,250); $text->text("サンプルⅢ"); $pdf->safeas('test.pdf'); $pdf->end(); exit();
他
座標 1
ポイント単位なので
sub mm2pt(){ return $_[0] / 25.4 * 72; }
とか用意しておくと、幸せになれるかもしれない
座標 2
用紙のサイズ(ポイント)は$page->get_mediaboxで取得できるので、
(undef, undef, $x, $y) = $page->get_mediabox;
でとれるので上からの10mmの座標は
($page->get_mediabox)[4] - &mm2pt(10)
になる
参考サイト
- 元
- http://search.cpan.org/~ssimms/PDF-API2/
- 基本的な使い方
- http://pdfapi2.sourceforge.net/pdfapi2_for_fun_and_profit_APW2005.pdf
- http://search.cpan.org/~ssimms/PDF-API2/lib/PDF/API2.pm
- http://d.hatena.ne.jp/end0tknr/20090531/1243757247
- $textとかコンテンツ回り
- http://search.cpan.org/~ssimms/PDF-API2/lib/PDF/API2/Content.pm
- corefont
- http://search.cpan.org/~ssimms/PDF-API2/lib/PDF/API2/Resource/Font/CoreFont.pm
2011/03/07(月)insideなページ構築中 その2
ユーザ情報取得が必要で、結局LDAPの問い合わせが入るので、ケルベロス認証はやめました
ajaxでid, pw送って、それでLDAPに問い合わせてbindできればOKで、そのまま個人情報の取得
bindできなければそのままエラーで済ませることにした
Net::LDAPのインスコ
適当にググったサイトを参考にインスコ
手元の環境はネットにまともにつながらないのでCPANからインスコできなかった
というか、FTPくらい通して欲しい
なので、perl-ldap-0.4001.tar.gzを落としてperl Makefile.PL; make; make install
依存関係の都合で、これの前にConvert-ASN1も落として入れておく
途中ladpsとか入れるか聞かれるけど、optionalなので、全部 n
LDAPサーバを調べる
というか、直感で
server: xxx.xxx.xxx.xxx
domain: sample.ac.jp
かな
domainからbaseを作る
dc=sample,dc=ac,dc=jp
になる
スクリプト書く
use Net::LDAP; my $user = 'serika'; my $pass = 'password'; my $domain = '@sample.ac.jp'; my $base = 'dc=sample,dc=ac,dc=jp'; my $ldap; my $res; # サーバに接続 $ldap = Net::LDAP->new('xxx.xxx.xxx.xxx'); $res = $ldap->bind($user.$domain, password=>$pass); if($res->code){ # 認証失敗 exit(); } # 問い合わせ $res = Net::LDAP->search(base=>$base, filter=>"(sAMAccountName=$user)"); if($res->code){ # 問い合わせ失敗 $ldap->unbind; exit(); } # 必要なデータの取得 # 今回は表示名の取得 # foreachのまま使ってるけど、AccountNameが重複してない限り2回回らないので、[0]もあり my $info; foreach my $entry ($res->entries){ $info = $entry->get_value('displayName'); } # 解放 $ldap->unbind;
最後、解放忘れるとinternal server errorでるので注意
検索用
[Linux][Windows Server][Active Directory][LDAP][perl][認証]