有人說需要為發明之母,我深深的認同

總是覺得人類的生活上有些方式或說邏輯總是一再的重覆,只是方式或是媒介有所改變

最近忽然感覺到 blog 的重要性了,以前沒寫日記或筆記的習慣經常重覆要找類似的資料或是邏輯,就以最近要用 java 套表時,那種深深的痛苦,唉喲,真是讓我感觸良多 :-)

研究了二天的 javax.print, java.awt.print 又不能征服它,又做了重覆的苦工,呵呵, Orz

它有一堆的 attribute 但...,網路上可用的資料實在太少了,IPS 從二年前 (2005) Draft 0.1 到現在(2007.3) 我再去找,它仍舊是那一份 Alpha Draft,呵呵

不過也因為這樣才發現自己中 google 毒很深,因為一但在 google 上找不到太多相關資料時,你就知道這件事很不樂觀了,呵呵 (不過仍舊有可能是我不夠會用 google 大神)

by the way 它實際上的做為是

  • implements java.awt.print.Printable
  • 實做 public int print(Graphics g, PageFormat pf, int pageIndex)
  • 我是在 construct 中呼叫 print()

 

設定紙張的方式有二

  • java.awt.print.PageFormat
  • javax.print.attribute.HashPrintRequestAttributeSet

這些基本上都相當的清楚明白,不過不幸的是我要用的是一般的 132 columns 的紙張,事情怪異的就在於二年前寫的程式在之前的 NB (xp) 上 run 的很好,也可正常的套表;但我將程式移到開發用的 pc 上就有辦法正常的工作了,唉...


import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;

import javax.print.PrintService;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.JobName;
import javax.print.attribute.standard.MediaSizeName;
import javax.print.attribute.standard.OrientationRequested;

import org.apache.log4j.Logger;

public class SizebyName implements Printable {

private static final Logger log = Logger.getLogger(SizebyName.class);

    public SizebyName() {
        PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
        aset.add(MediaSizeName.JIS_B4);
        aset.add(OrientationRequested.LANDSCAPE);
        aset.add(new JobName("JobName", null));

        PrinterJob pj = PrinterJob.getPrinterJob();

        PrintService[] services = PrinterJob.lookupPrintServices();
        if (services.length > 0) {
            try {
                pj.setPrintService(services[1]);
                pj.setPrintable(this);
                pj.print(aset);
            } catch (PrinterException e) {
                log.error(e);
            }
        }
    }

    public int print(Graphics g, PageFormat pf, int pageIndex)
                throws PrinterException {

        if (pageIndex == 0) {
            Graphics2D g2d = (Graphics2D) g;
            g2d.translate(pf.getImageableX(), pf.getImageableY());
            g2d.setColor(Color.black);
            g2d.drawString("中文字", 250, 600);
            g2d.drawString("地址地址地址地址地址", 250, 700);

            return Printable.PAGE_EXISTS;
        } else {
            return Printable.NO_SUCH_PAGE;
        }
    }
}

依我用 vb 的經驗紙張應該用 us std Fanfold 的大小就可以了,但 javax.print 似乎沒有這樣的尺寸,也有一位朋友在 sun 的 forum 上問過但沒人回覆 (不過,這有時是思考的方向錯了) ,我記得 2005 年時我是用 java.awt.print.PageFormat + java.awt.print.Paper ,將 Paper.setImageableArea() 設成 us std Fanfold (約為14"*11" 的大小) 再去印表即可,but not this time.

identical 發表在 痞客邦 留言(0) 人氣()

雙網卡的 route
幾個月前因為需要, 必須連接二個網段
只好努力的找方法, 也終於有機會玩一下 iptable
但是實在是太複雜了, 只好將 opensuse 9 預設的 fireware 關了
因為只是內網我想影響不大 ~~ (天知道 ^^)
記錄語法以防又忘了

以下為 shell script:

echo "1" > /proc/sys/net/ipv4/ip_forward
modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp
iptables -t nat -A POSTROUTING -o eth0 -s 10.2.2.0/24 -d 10.1.1.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -s 10.2.2.0/24 -d 10.2.1.0/24 -j MASQUERADE
iptables -t nat -L



DestinationGatewayGenmaskFlagsMetricRefUseIface
10.2.1.010.10.14.60255.255.255.0UG000eth0
10.2.2.0*255.255.255.0U000eth1
10.10.14.0*255.255.255.0U000eth0
10.1.1.010.10.14.60255.255.255.0UG000eth0
link-local*255.255.0.0U000eth0
loopback*255.0.0.0U000lo
default10.2.2.2540.0.0.0UG000eth1


實在很喜歡 linux , 也試過各個版本, 可惜始終學不好
了解的總是片段 Orz
感覺 open suse 蠻好用的, 雖然好像台灣用的人不多
slackware 大概是我安裝最多台機器的發行版, 但用的人更少,
ubuntu 好像口碑很好, 但一直沒機會用

參考資料:
已忘記了, 但有一本是 suse enterprice 9 應考的書, 紅皮

identical 發表在 痞客邦 留言(0) 人氣()

沒想到 2007-01-01 就要 coding 呵呵
因為朋友要出個媒體給主管機關, 沒想到他們到現在還規定
中文英數字要全型空白也要全型, 想到最簡單的方式是用 access

input : excel file
output : fixed text file
用 access 的 import 轉入 excel file
執行 vba 後再用 export 成 text file

Option Compare Database

Public Sub test()
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
Dim str As String

Set con = CurrentProject.Connection --> 老是忘記這個語法
i = 0
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
sql = "select * from address"
rs.Open sql, con

Do
If IsNull(rs(2)) Then
str = ""
Else
str = rs(2)
End If
str = "insert into t1 values('" + fill(str) + "','" + Format(rs(1), "0000000") + "')"
Debug.Print str
DoCmd.RunSQL str
rs.MoveNext --> 沒想到 office 到 2003 了, 忘了這句還是會死當 Orz
DoEvents
Loop While Not (rs.EOF)
End Sub

Public Function fill(str) As String
Dim s As String
Dim i As Integer
Dim l As Integer

s = Replace(str, " ", "")
l = Len(s)

For i = l To 60
s = s + " " --> 這是全型空白
Next

fill = s
End Function

identical 發表在 痞客邦 留言(0) 人氣()

用 java 也三年了, 結果 microsoft 用戶端的程式,
還是習慣用 microsoft 的東西, 呵呵 Orz
不過 database 當然還是要用我習慣的 PostgreSQL,
只是沒想到 C# 與 PostgreSQL 不太馬吉, 還好有高人的指點
(ps. 高人 = google + 不知名的好心人)
順手將之記下, 以免日後又給他忘記了


postgreSql
1. 自 PostgreSQL download Npgsql (有分 mono, ms1, ms2) ^^
2. 當 Server Side 是用 utf-8 (Unicode) 時要在程式中 show 正確的中文(zh-TW)
要依以下的方式 :
參考 : http://archives.postgresql.org/pgsql-bugs/2004-04/msg00041.php
String connectionString = "Server=127.0.0.1;Port=5432;User Id=xxx;Password=xxx;Database=DBName;";
NpgsqlConnection conn = new NpgsqlConnection(connectionString);
NpgsqlCommand cmd = new NpgsqlCommand("set client_encoding TO big5", conn);
conn.Open(); --> 就是這段, 要先告訴 server client 是 big5
cmd.ExecuteNonQuery();
NpgsqlCommand command = new NpgsqlCommand(sqlCommand, conn);
NpgsqlDataAdapter adapter = new NpgsqlDataAdapter();
adapter.SelectCommand = command;
DataTable table = new DataTable();
table.Locale = System.Globalization.CultureInfo.InvariantCulture;
adapter.Fill(table);
3. .Net 中有關國際化的 namespace : System.Globalization
參考 : http://msdn2.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx

identical 發表在 痞客邦 留言(0) 人氣()

«12