2015년 12월 30일 수요일

ghostscript, postscript, pdf printer

1. 포스트 스크립트

미국 어도비 시스템스사에서 개발한 페이지 기술 언어(PDL). 매끄럽고 섬세한 고품질 폰트와 도형의 이미지를 인쇄기에 인쇄하거나 화면에 표시할 수 있게 한다. 1984년에 이 언어의 명세가 공표되고, 1985년에 이 언어의 인터프리터를 내장한 레이저 인쇄기애플 컴퓨터 회사에서 발매되어 큰 호평을 받았으며, 그 후에 많은 인쇄기에 탑재되어 포스트스크립트는 업계 표준이 되었다. 한글이나 일본어 등의 텍스트도 기술할 수 있도록 언어 명세의 확장이 이루어졌다. 포스트스크립트의 특징은 출력 장치해상도에 의존하지 않고 영어와 비슷한 명령어를 사용하여 페이지의 배열을 제어하고, 아우트라인 폰트를 불러내어 그 크기를 조절할 수 있다는 점이다. 당초에는 페이지 인쇄기용으로 개발되었으나 인쇄기와 모니터 양쪽에서 사용할 수 있도록 기능이 확장된 디스플레이 포스트스크립트(Display PostScript)도 발매되었다. 또 MS-DOS매킨토시 등의 환경에서 가동하는 응용 소프트웨어 간의 파일 전송 형식으로서 밀봉형 포스트스크립트(ESP)가 널리 이용되고 있다.
[네이버 지식백과] 포스트스크립트 [PostScript] (IT용어사전, 한국정보통신기술협회)

>> PDF는 포스트 스크립트로 되어 있는 것으로 보임.. 포스트 스크립트 인터프리터가 탑재된 프린터가 보편화된 것으로 봐서, PDF파일을 포스트 스크립트로 변환하면 될것으로 예상된다.

2. PDF를 포스트 스크립트 언어로 변환하기?
>> 인쇄기에서 지원하는 언어?는 RTF/PCL/Postscript가 있는 걸로 되어있다.

3. PCL은 뭐지?
PCL 이란 Printer Command Language의 약자로, 휴렛 패커드사가 주축이 된
프린터 기술의 일종으로 PCL은 휴렛 팩커드사가 1984년 레이저 프린터와 PC
본체간 통신을 제어하기 위한 특수언어로 개발한 것이 시초입니다. 1996년
확정된 PCL6는 객체지향형 프로그래밍 기법을 적용, 모듈식 아키텍쳐 설
계와 글꼴 합성기술 등이 추가되어 복잡한 그래픽을 신속하게 인쇄하며 네
트워크 성능을 향상시킨 것이 특징입니다.

4. GhostScript ( http://pages.cs.wisc.edu/~ghost/doc/intro.htm )
Ghostscript is an interpreter for the PostScript (TM) language. A PostScript interpreter usually takes as input a set of graphics commands. The output is usually a page bitmap which is then sent to an output device such as a printer or display. PostScript is embedded in many printers.
Ghostscript has several main uses:
  1. Display a PostScript file (avoid killing trees).
  2. Display a PostScript file to decide if you really need to print it (reduce the number of trees killed).
  3. Print a PostScript file to a non-PostScript printer (kill more trees).
An example of a very simple PostScript file is:


 

2015년 12월 16일 수요일

[Android] 네트워크 상태 가져오기.


네트워크 상태를 가져오려면, broadcastreceiver를 사용하는 것이 좋다.
네트워크 연결/ 연결 아닌 상태를 감지해서 자동으로 상태변경이 필요하다.
* 코드에서 registerreceiver를 등록하는 경우, Manifest에 등록할 필요는 없다.

Broadcast ACTION : ConnectivityManager.CONNECTIVITY_ACTION


  // 레지스터 등록.
  private void registerReceiver() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        getApplicationContext().registerReceiver(mSystemSettingsChangeReceiver, filter);
  }
   private BroadcastReceiver mSystemSettingsChangeReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
                updateConnectionInformation();
            }
        }
    };

 // UI Update
 private void updateConnectionInformation() {
 }


2015년 12월 8일 화요일

[Android] 언어 설정 변경하기.

안드로이드 언어 설정을 변경하기 위한 방법


1. system 권한이 있는 경우.


https://gist.github.com/xalexchen/4274535

private void updateLanguage(Locale locale) {
  Log.d("ANDROID_LAB", locale.toString());
try {
Object objIActMag, objActMagNative;
Class clzIActMag = Class.forName("android.app.IActivityManager");
Class clzActMagNative = Class.forName("android.app.ActivityManagerNative");
Method getDefault = clzActMagNative.getDeclaredMethod("getDefault");
// IActivityManager iActMag = ActivityManagerNative.getDefault();
objIActMag = getDefault.invoke(clzActMagNative);
// Configuration config = iActMag.getConfiguration();
Method getConfiguration = clzIActMag.getDeclaredMethod("getConfiguration");
Configuration config = (Configuration) getConfiguration.invoke(objIActMag);
config.locale = locale;
Class[] clzParams = { Configuration.class };
Method updateConfiguration = clzIActMag.getDeclaredMethod(
"updateConfiguration", clzParams);
updateConfiguration.invoke(objIActMag, config);
} catch (Exception e) {
e.printStackTrace();
}
}

android.app.IActivityManager와 android.app.ActivityManagerNative를 사용하는 방법으로,
앱에서 세팅설정 자체를 변경할 수 있다.


2. system 권한이 없는 경우.


시스템 권한이 없는 경우에는 설정의 언어설정과 별도의 설정으로 구성할 수 있는데
Acitivty가 생성될 때마다 언어설정을 해주면 해당 언어의 XML로 UI 가 구성된다.

http://stackoverflow.com/questions/10751571/android-setting-language-in-app


String languageToLoad = "en"; 
  Locale locale = new Locale(languageToLoad); 
  Locale.setDefault(locale); 
  Configuration config = new Configuration(); 
  config.locale = locale; 
  getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());