반응형

File Writing 부분은 작성하지 않았음...

 

여러모로 문제가 있음

 

참고용...


import java.net.URLEncoder;
 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.*;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList; 
 
public class getMsrstnAcctoRltmMesureDnsty {
 

    // tag값의 정보를 가져오는 메소드
private static String getTagValue(String tag, Element eElement) {
    NodeList nlList = eElement.getElementsByTagName(tag).item(0).getChildNodes();
    Node nValue = (Node) nlList.item(0);
    if(nValue == null) 
        return null;
    return nValue.getNodeValue();
}

public static void main(String[] args) {
int page = 1; // 페이지 초기값 
     int totalCount = 0; // 전체 건수
    
     int nowCnt = 0; // 현재 페이지의 건수
    
     // JSON Object 
     JSONArray jitem = new JSONArray(); 
    
    
    
try{
while(true){

 // 서비스 인증키입니다. 공공데이터포털에서 제공해준 인증키를 넣어주시면 됩니다.         
            String serviceKey = "키입력";
             
             
            // 한페이지에서 읽어올 개수
            String numOfRows   = "5";         
            
            // 한글은 encoding 수행합니다.
         String stationName = URLEncoder.encode("종로구", "UTF-8");
         String ver         = "1.0";
         String dataTerm    = "DAILY";
         String RtnType     = "XML";
    
     StringBuffer jsonSb = null;
        
        
            String urlStr = "http://openapi.airkorea.or.kr/"
                    + "openapi/services/rest/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty"
                    + "?"
                    + "ServiceKey="  + serviceKey
                    + "&stationName=" + stationName
                    + "&dataTerm="  + dataTerm 
                    + "&pageNo=" + page
                    + "&numOfRows=" + numOfRows                    
                    + "&ver=" + ver 
                    + "&_retrunType=" + RtnType
                    ;
            
DocumentBuilderFactory dbFactoty = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactoty.newDocumentBuilder(); 
Document doc = dBuilder.parse(urlStr);



if ( page == 1 ) { 
// 파싱할 tag
NodeList nListT = doc.getElementsByTagName("body");

Node nNodeT = nListT.item(0);
if(nNodeT.getNodeType() == Node.ELEMENT_NODE){

Element eElementT = (Element) nNodeT; 

totalCount = Integer.parseInt(getTagValue("totalCount", eElementT));
} // for end

}

// root tag 
doc.getDocumentElement().normalize();  

// 파싱할 tag
NodeList nList = doc.getElementsByTagName("item");


//JSONObject
for(int temp = 0; temp < nList.getLength(); temp++){
Node nNode = nList.item(temp);
if(nNode.getNodeType() == Node.ELEMENT_NODE){

Element eElement = (Element) nNode;

JSONObject jobj = new JSONObject();


jobj.put("dataTime",  getTagValue("dataTime", eElement).toString());
// jobj.put("so2Value",  Float.parseFloat(getTagValue("so2Value", eElement).toString()));
// jobj.put("coValue",   Float.parseFloat(getTagValue("coValue", eElement).toString()));
// jobj.put("o3Value",   Float.parseFloat(getTagValue("o3Value", eElement).toString()));
// jobj.put("pm10Value", Float.parseFloat(getTagValue("pm10Value", eElement).toString()));
// jobj.put("pm25Value", Float.parseFloat(getTagValue("pm25Value", eElement).toString()));
// jobj.put("khaiValue", Float.parseFloat(getTagValue("khaiValue", eElement).toString()));
// jobj.put("khaiGrade", Float.parseFloat(getTagValue("khaiGrade", eElement).toString()));
// jobj.put("so2Grade",  Float.parseFloat(getTagValue("so2Grade", eElement).toString()));
// jobj.put("coGrade",   Float.parseFloat(getTagValue("coGrade", eElement).toString()));
// jobj.put("o3Grade",   Float.parseFloat(getTagValue("o3Grade", eElement).toString()));
// jobj.put("no2Grade",  Float.parseFloat(getTagValue("no2Grade", eElement).toString()));
// jobj.put("pm10Grade", Float.parseFloat(getTagValue("pm10Grade", eElement).toString()));
// jobj.put("pm25Grade", Float.parseFloat(getTagValue("pm25Grade", eElement).toString()));

jobj.put("so2Value",  getTagValue("so2Value", eElement).toString());
jobj.put("coValue",   getTagValue("coValue", eElement).toString());
jobj.put("o3Value",   getTagValue("o3Value", eElement).toString());
jobj.put("pm10Value", getTagValue("pm10Value", eElement).toString());
jobj.put("pm25Value", getTagValue("pm25Value", eElement).toString());
jobj.put("khaiValue", getTagValue("khaiValue", eElement).toString());
jobj.put("khaiGrade", getTagValue("khaiGrade", eElement).toString());
jobj.put("so2Grade",  getTagValue("so2Grade", eElement).toString());
jobj.put("coGrade",   getTagValue("coGrade", eElement).toString());
jobj.put("o3Grade",   getTagValue("o3Grade", eElement).toString());
jobj.put("no2Grade",  getTagValue("no2Grade", eElement).toString());
jobj.put("pm10Grade", getTagValue("pm10Grade", eElement).toString());
jobj.put("pm25Grade", getTagValue("pm25Grade", eElement).toString());

  JSONParser jsonParser = new JSONParser();
jitem.add(jsonParser.parse(jobj.toJSONString()));

    
} // for end
} // if end



nowCnt = page * Integer.parseInt(numOfRows);

page += 1;

 
if(nowCnt > totalCount){
break;
}
} // while end

} catch (Exception e){
e.printStackTrace();
} // try~catch end

System.out.println("[message]:" + jitem.toJSONString());
System.out.println("End of Main");
} // main end 
   
  }
   


반응형

'4차 산업 > ELK 관련' 카테고리의 다른 글

Logstash 대기 오염 관련 Json 처리 예제  (0) 2019.03.21
반응형

하나의 포트로 여러 리스너 설정하기...


listener.ora


일부 서버들에서 되고 안되고 문제는 SID_LIST_LISTENER 설정에서 SID_DESC 설정 정보가 없을 때 발생함... (랜덤 -_-ㅋ)


 # listener.ora Network Configuration File: /oracle/product/10g/network/admin/listener.ora

# Generated by Oracle configuration tools.


SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME = /oracle/product/10g)

      (PROGRAM = extproc)

    )

    (SID_DESC =

      (SID_NAME = SEVSEDEV)

      (ORACLE_HOME = /oracle/product/10g)

    )

    (SID_DESC =

      (SID_NAME = SEVPTDEV)

      (ORACLE_HOME = /oracle/product/10g)

    )

  )


LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.86)(PORT = 1521))

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

    )

  )


SID_LIST_LISTENER_SEVPTDEV =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = SEVPTDEV)

      (ORACLE_HOME = /oracle/product/10g)

    )

  )


LISTENER_SEVPTDEV =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.86)(PORT = 1521))

    )

  )


SID_LIST_LISTENER_SEVSEDEV =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = SEVSEDEV)

      (ORACLE_HOME = /oracle/product/10g)

    )

  )


LISTENER_SEVSEDEV =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.86)(PORT = 1521))

    )

  )


 sqlnet.ora


# sqlnet.ora Network Configuration File: /oracle/product/10g/network/admin/sqlnet.ora

# Generated by Oracle configuration tools.

SQLNET.INBOUND_CONNECT_TIMEOUT=0 





반응형
반응형

Multifile storage with Zip

The library that supports the Zip format is much more extensive. With it you can easily store multiple files, and there’s even a separate class to make the process of reading a Zip file easy. The library uses the standard Zip format so that it works seamlessly with all the tools currently downloadable on the Internet. The following example has the same form as the previous example, but it handles as many command-line arguments as you want. In addition, it shows the use of the Checksum classes to calculate and verify the checksum for the file. There are two Checksum types: Adler32 (which is faster) and CRC32 (which is slower but slightly more accurate).

//: c12:ZipCompress.java
// Uses Zip compression to compress any
// number of files given on the command line.
// {Args: ZipCompress.java}
// {Clean: test.zip}
import com.bruceeckel.simpletest.*;
import java.io.*;
import java.util.*;
import java.util.zip.*;

public class ZipCompress {
  private static Test monitor = new Test();
  // Throw exceptions to console:
  public static void main(String[] args)
  throws IOException {
    FileOutputStream f = new FileOutputStream("test.zip");
    CheckedOutputStream csum =
      new CheckedOutputStream(f, new Adler32());
     ZipOutputStream zos = new ZipOutputStream(csum);
     BufferedOutputStream out =
      new BufferedOutputStream(zos);
    zos.setComment("A test of Java Zipping");
    // No corresponding getComment(), though.
    for(int i = 0; i < args.length; i++) {
      System.out.println("Writing file " + args[i]);
      BufferedReader in =
        new BufferedReader(new FileReader(args[i]));
      zos.putNextEntry(new ZipEntry(args[i]));
      int c;
      while((c = in.read()) != -1)
        out.write(c);
      in.close();
    }
    out.close();
    // Checksum valid only after the file has been closed!
    System.out.println("Checksum: " +
      csum.getChecksum().getValue());
    // Now extract the files:
    System.out.println("Reading file");
    FileInputStream fi = new FileInputStream("test.zip");
    CheckedInputStream csumi =
      new CheckedInputStream(fi, new Adler32());
    ZipInputStream in2 = new ZipInputStream(csumi);
    BufferedInputStream bis = new BufferedInputStream(in2);
    ZipEntry ze;
    while((ze = in2.getNextEntry()) != null) {
      System.out.println("Reading file " + ze);
      int x;
      while((x = bis.read()) != -1)
        System.out.write(x);
    }
    if(args.length == 1)
      monitor.expect(new String[] {
        "Writing file " + args[0],
        "%% Checksum: \\d+",
        "Reading file",
        "Reading file " + args[0]}, args[0]);
    System.out.println("Checksum: " +
      csumi.getChecksum().getValue());
    bis.close();
    // Alternative way to open and read zip files:
    ZipFile zf = new ZipFile("test.zip");
    Enumeration e = zf.entries();
    while(e.hasMoreElements()) {
      ZipEntry ze2 = (ZipEntry)e.nextElement();
      System.out.println("File: " + ze2);
      // ... and extract the data as before
    }
    if(args.length == 1)
      monitor.expect(new String[] {
        "%% Checksum: \\d+",
        "File: " + args[0]
      });
  }
} ///:~


For each file to add to the archive, you must call putNextEntry( ) and pass it a ZipEntry object. The ZipEntry object contains an extensive interface that allows you to get and set all the data available on that particular entry in your Zip file: name, compressed and uncompressed sizes, date, CRC checksum, extra field data, comment, compression method, and whether it’s a directory entry. However, even though the Zip format has a way to set a password, this is not supported in Java’s Zip library. And although CheckedInputStream and CheckedOutputStream support both Adler32 and CRC32 checksums, the ZipEntry class supports only an interface for CRC. This is a restriction of the underlying Zip format, but it might limit you from using the faster Adler32.

To extract files, ZipInputStream has a getNextEntry( ) method that returns the next ZipEntry if there is one. As a more succinct alternative, you can read the file using a ZipFile object, which has a method entries( ) to return an Enumeration to the ZipEntries.

In order to read the checksum, you must somehow have access to the associated Checksum object. Here, a reference to the CheckedOutputStream and CheckedInputStream objects is retained, but you could also just hold onto a reference to the Checksum object.

A baffling method in Zip streams is setComment( ). As shown in ZipCompress.java, you can set a comment when you’re writing a file, but there’s no way to recover the comment in the ZipInputStream. Comments appear to be supported fully on an entry-by-entry basis only via ZipEntry.

Of course, you are not limited to files when using the GZIP or Zip libraries—you can compress anything, including data to be sent through a network connection.

출처 : http://www.linuxtopia.org/online_books/programming_books/thinking_in_java/TIJ314_033.htm

반응형

'Language > JAVA' 카테고리의 다른 글

Heap Dump 분석을 통한 Perm Area Memory Leak 원인 진단  (0) 2010.12.14
Java ARchives (JAR)  (0) 2010.11.17
자바 간단한 GZIP 압축 예제  (0) 2010.11.17
자바 파일 압축  (0) 2010.11.17
JAVA File Locking(자바 파일 잠금)  (0) 2010.11.17
반응형

금일 우연히 인터넷 검색을 하던중...

사실 생각지도 못했지만,

한 PC에서 IE를 재설치하지 않고 여러 버젼으로 구동이 가능하는 프로그램이 있는것을 알았다...

물론 테스트 용이긴하지만,

나와 같이 웹 개발을 하는 사람은 필요로 할것이라 느껴지기에

소개한다.

프로그램 사이트 : http://utilu.com/IECollection/

2010.11.09일 기준으로 1.7.0.4 버젼까지 나왔다.

간략하게 사이트에서 소개하는 내용을 보면...

1. IE(Internet Explorer)는 MS(마이크로소프트)사에서 개발된 브라우져이다.
2. 윈도우 IE는 Trident 렌더 엔진 기반으로 되어있다.
3. Utilu IE Collection 은 각각 독립적으로 실행될 수 있는 여러 IE 버젼을 포함하고 있다. 이것은 웹 개발자에게 유용하다.
4. Utilu IE Collection 은 Microsoft Windows 98, 98 SE, ME, NT 4.0, 2000, XP, 2003, Vista, 2008 and 7 의 32bit 와 64비트(운영체제 지원가능한..)를 지원한다.
5. 아래의 IE 버젼을 지원함
  • Internet Explorer 1.0 (4.40.308)
  • Internet Explorer 1.5 (0.1.0.10)
  • Internet Explorer 2.01 (2.01.046)
  • Internet Explorer 3.0 (3.0.1152)
  • Internet Explorer 3.01 (3.01.2723)
  • Internet Explorer 3.03 (3.03.2925)
  • Internet Explorer 4.01 (4.72.3110.0)
  • Internet Explorer 5.01 (5.00.3314.2100)
  • Internet Explorer 5.5 (5.51.4807.2300)
  • Internet Explorer 6.0 (6.00.2800.1106)
  • Internet Explorer 6.0 (6.00.2900.2180)
  • Internet Explorer 7.0 (7.00.5730.13)
  • Internet Explorer 8.0 (8.00.6001.18702)
  • 6. 호환성 표

    Windows versions
    Internet Explorer versions
    95 98 98
    SE
    ME NT 2000 XP XP
    x64
    2003 2003
    x64
    Vista Vista
    x64
    2008 2008
    x64
    7 7
    x64
    IE 1.0 (4.40.308) Yes No No No Yes No No No No No No No No No No No
    IE 1.5 (0.1.0.10) Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
    IE 2.01 (2.01.046) Yes Yes Yes Yes Yes Yes Yes No Yes No Yes No Yes No Yes No
    IE 3.0 (3.0.1152) Yes Yes Yes Yes Yes Yes Yes No Yes No Yes No Yes No Yes No
    IE 3.01 (3.01.2723) Yes Yes Yes Yes Yes Yes Yes No Yes No Yes No Yes No Yes No
    IE 3.03 (3.03.2925) Yes Yes Yes Yes Yes Yes Yes No Yes No Yes No Yes No Yes No
    IE 4.01 (4.72.3110.0) Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
    IE 5.01 (5.00.3314.2100) Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
    IE 5.5 (5.51.4807.2300) Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
    IE 6.0 (6.00.2800.1106) No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
    IE 6.0 (6.00.2900.2180) No No No No No No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
    IE 7.0 (7.00.5730.13) No No No No No No Yes Yes Yes Yes No No No No No No
    IE 7.0 (7.00.6000.16681) No No No No No No No No No No Yes Yes Yes Yes No No
    IE 8.0 (8.00.6001.18702) No No No No No No Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes
    To activate the IE 7.0 render engine in IE 8.0: go to “Tools”, “Developer Tools” (or press F12)
    and then click on the “Browser Mode” menu item and select “Internet Explorer 7”
    to let the Trident render engine of IE 7.0 render the website.
    IE 6.0 (6.00.2900.5512) contains a bug which results in pages opening in the default browser instead of in
    IE 6.0 (6.00.2900.5512). In IE 6.0 (6.00.2800.1106) and IE 6.0 (6.00.2900.2180) this problem does not occur.
    Therefore use these versions of IE 6.0 from Utilu IE Collection instead of IE 6.0 (6.00.2900.5512).


    * 설치할때 IE8 복사 오류가 나는경우가 있다... 별도로 다운받아서 실행하는듯 한데..

    없으면 IE8...-ENU.exe 파일을 찾아서 다운로드뒤 해당폴더에 넣어주고 무시를 실행하면 정상적으로 설치가 된다.



    반응형
    반응형







    반응형
    반응형







    반응형
    반응형



    PDF 패키지 인증하기

    모든 파일이 서명에 맞게 의도된 대로 사용되었는지를 검사하는 기본 설정을 바꾼 결과로, PDF 패키지에 대한 문서 메시지 막대가 애크로뱃에서 열린다. 에린은 첫 번째 서명을 PDF 패키지에 적용했으므로 그 문서를 인증할 계획이다. 서명 인증이란 문서 내용을 보증한다는 뜻이다.
    문서를 인증하는 방법은 다음과 같다.

    1. 문서 메시지 막대에서‘문서 서명( )’을 클릭하면 <인증된 문서로 저장> 대화상자가 열린다. 대화상자는 제3자가 발행한 디지털 ID를 사용할 것을 제안한다. 이 디지털 ID를 사용하면 문서에 대한 권한을 부여받는 사용자들은 검토와 보안 과정(문서의 온라인 배포 등) 등의 분야에서 서명을 관리할 수 있다. 제3의 기관은 사용자와 수령자가 각각 개인 키과 공개 키를 갖게 하는 것보다는 디지털 ID에 대한 키들을 관리하는 방법을 사용한다.


    <그림 12-34> 에린이 원하기만 하면 대화상자의 지시에 따라 외부의 디지털 ID를 사용할 수 있다.

    2. “다시 표시 안 함”을 선택해서 다시 이 대화상자가 나타나지 않도록 하고, [확인]을 클릭해서 <인증된 문서로 저장> 대화상자를 닫는다. <문서 인증> 대화상자가 열린다.

    3. <문서 인증> 대화상자에서 서명의 특성을 지정한다. 에린은 다음과 같이 선택했다.
    • 디지털 ID의 드롭다운 메뉴에서 그녀의 디지털 ID를 선택했다.

    • 암호 필드에“password”라고 입력했다.

    • 드롭다운 메뉴에서“문서의 정확성과 완전함을 보장함”을 선택했다. 서명 후 허용된 변경 사항의 드롭다운 메뉴에서“주석, 양식 채우기 및 디지털 서명”을 선택했다. 이에 따라 에린은 다른 사람들이 문서에 서명할 수 있도록 허용하고, 그들에 게 주석을 추가할 수 있는 옵션을 주어야 한다.
    4. [검토]를 클릭해서 <그림 12-32>와 같지만 한 가지가 더 추가된 를 연다<그림 12-36>. 수령자는 또한 다음 경고 문구를 보게 될 것이다.



    <그림 12-35> 대화상자에서 디지털 ID의 특성을 지정한다.



    <그림 12-36> 수령자에게 이 경고가 위험한 것이 아니라는 공지를 보여주는 것은 참신한 발상이다.

    “대화형 문서를 만들기 위해 다음 내용들을 포함시켰습니다”라는 주석이 파일에 따라다니므로 에린의 수령자는 파일과 대화하며 작업할 수 있다. [확인]을 클릭하고 <문서 인증> 대화상자로 돌아간다.
    이제“문서 경고를 확인했습니다”라는 정보 메시지가 보인다.

    5. [서명]을 클릭한다. <문서 인증> 대화상자가 닫히고 <다른 이름으로 저장> 대화상자가 열린다. 파일 이름을 입력하고 저장 위치를 지정한다. 에린은 BBrouting0906S.pdf라고 입력했다. [저장]을 클릭해서 파일을 저장하고 대화상자를 닫는다.
    에린은 문서에 서명한 후에, ‘인증서 아이콘( )’이 문서 메시지 막대 왼쪽에 나타났다. 그녀의 서명이 보이는 유일한 곳은 서명 패널이다<그림 12-37>. 서명 패널에서는 에린이 인증 대화상자에서 작업한 허용 동작 및 서명 이유 등의 선택사항이 보인다.

    DOWNLOAD : http://www.donnabaker.ca/downloads.html
    인증에 대한 자세한 사항은 베이커의 웹사이트 12장 보너스 파일을 다운로
    드해서,“ Extracting Certificates”를 읽기 바란다. 인증서의 내용에 대해서는“Customizing the Signature Appearance”를 참고한다.

    <그림 12-37> 인증 내용은 문서 메시지 막대에 표시되고, 에린의 서명에 대한 정보는 서명 패널에 보인다.


    에린이 패키지에 서명하는 이유
    에린이 경로를 만들기 전에 문서에 서명한 이유는 다음과 같다.
    • 수령자가 문서에 서명할 때 어떤 문제가 있는지를 알아보기 위해 파일을 미리보기로
      보고 싶었다.
    • 문서에 첫 번째로 서명하는 사람은 서명이나 문서 인증을 선택할 수 있다. 에린은 애크로뱃에 대한 이해가 매우 넓었고, 그녀는 동료들이 서명과 인증 중에서 어떤 것을 선택할 것인지 혼동하리라고 생각했다.
    • 그녀는 문서가 완성되는 시점에 서명 문서가 어떻게 보이는지를 확인하고 싶었다. 그리고 다른 사람이 서명하면 일어날 수도 있는 변경사항을 확인하고 싶었다.
      이제 원래의 프로젝트로 돌아가 보자.



    문서 경로와 서명

    에린은 문서를 완성하기 위해 많은 일을 수행했다. 두 분야의 관리자들에게 PDF 보고서를 만들고 서명을 적용하라고 지시했으며, 콘텐트를 결합해서 검토하고 서명 작업이 매끄럽게 이뤄지도록 PDF 패키지의 경로 표지를 만들었다. 이제 그녀의 인증 서명을 추가했으므로 이를 발송할 차례이다. 발송 과정은 다음과 같다.

    1. 에린은 PDF 패키지를 영업 담당 부사장인 자니 미탈에게 PDF 패키지를 전자 메일로 보낸다.

    2. 자니는 문서에 지정된 필드를 클릭한 다음 앞쪽“서명 추가하기”에서 설명한 대로 그녀의 서명을 문서에 추가한다.

    3. 자니는“Forward to Mr.Barver”링크를 클릭해서 전자 메일 창을 연다. 그녀는 BBroting0906S_mittal.pdf로 저장 문서를 첨부하고 메시지를 추가해야 한다.

    4. 바버는 전자 메일을 받은 다음 PDF 패키지를 열고 서명을 추가한다. 파일을 BBrouting0906_barver.pdf로 저장한 다음 그 파일을 에린에게 반환해야 한다.

    5. 마지막으로, 에린은 파일을 열어서 최종 결과를 확인한다. 서명 패널에서 두 명의 관리자가 추가한 서명이 유효한 것인지를 확인한다<그림 12-38>.

    <그림 12-38> 서명 패널에 두 개의 새로운 서명이 포함되어 있다.

    6. PDF 패키지의 내용을 열면, 영업 보고서에 여전히 매니저의 유효한 서명이 포함되어 있는 것을 알 수 있다<그림12-39>.
    에린은 오랫동안 문서 승인 절차를 만들어서 수령자들이 파일을 다음에 어디로 보내야 하는지를 알아보기 쉽게 만들었다. 에린의 승인 시스템은 두 사람이 관련되어 있기 때문에 훌륭하게 작동할 것이다.

    <그림 12-39> 원래의 서명은 전송 및 서명 과정 중에 영향을 받지 않는다.



    그 밖에 할 수 있는 일들


    에린은 간단한 서명 절차가 아니라 검토 작업에 관여했다면 애크로뱃의 주석 및 검토 기능을 충분히 이해하고 사용했을 것이다. 참가자가 회사나 기관의 규정 및 조건에 맞춰 공유 검토나 전자 메일 검토를 활용할 수 있도록 만들 수도 있다. 전자 메일 검토에 대해서는 3장“주석으로 커뮤니케이션하기”를, 공유 검토에 대해서는 4장“공유 검토로 공동 작업하기”를 참고하기 바란다.
    상황에 따라서 복제한 필드를 각각의 페이지에 복사하고 검토에 필요한 조건으로 이니셜을 입력하게 만들 수도 있겠다. 필드 복제에 대해서는 11장“강력한 대화형 문서 만들기”를 참 고한다.
    전자 메일에 보안을 적용하기 위해서는 6장에 설명한 보안 편지 봉투를 적용할 수도 있다.
    보안에 관련해서는 서명이나 편지 봉투 보안가 아닌, 문서 정보의 일부인 서명을 가진 사람 들만 파일에 접근하도록 암호화 인증서를 이용할 수도 있다.

    반응형

    + Recent posts