PowerShell과 LibreOffice Draw에서 Christmascard

LibreOffice AdventCalendar 2018



일본에서는 연하장입니다만, 구미에서는 크리스마스 카드를 준다고 합니다.
이번에는
  • PowerShell
  • LibreOffice Draw
  • csv 파일

  • 이들을 사용하여 크리스마스 카드의 주소를 양산합니다.
    생성 된 코드는 GitHub에 나열되어 있습니다.

    christmascard - github

    환경


  • Windows10 Pro
  • PowerShell v5.1

  • LibreOffice Draw
  • Flat Open Document Graphic(.fodg)

  • csv 파일
  • utf8


  • 만드는 방법



    Template



    Flat Open Documents 사용.
    LibreOffice의 Open Documents Fomat에서 사용할 수 있는 방법입니다.
    ODF는 xml과 css 등을 모아 zip으로 굳힌 것입니다.
    Flat ODF로 하면 XML이나 css의 구조가 1개가 되어 sed등의 Text 조작을 할 수 있게 됩니다.

    이번에는 LibreOffice Draw에서 엽서 크기의 크리스마스 카드를 만들었습니다.
    거기에 {postcode} {address} {name} 등의 Text를 배치하고 있습니다.

    LibreOffice에서는 아래 그림과 같이 보입니다.



    아래는이 템플릿의 내용입니다.
    {address1} {postcode} {name} 등을 볼 수 있습니다.

    TextEditor에서 Flat_OpenDocument 표시 (일부 발췌)
    <draw:frame draw:style-name="gr1" draw:text-style-name="P1" draw:layer="layout" svg:width="2.8cm" svg:height="0.763cm" svg:x="1cm" svg:y="1.037cm">
         <draw:text-box>
          <text:p><text:span text:style-name="T1">From</text:span></text:p>
         </draw:text-box>
        </draw:frame>
        <draw:frame draw:style-name="gr2" draw:text-style-name="P2" draw:layer="layout" svg:width="5.1cm" svg:height="0.7cm" svg:x="5.2cm" svg:y="7.5cm">
         <draw:text-box>
          <text:p><text:span text:style-name="T2">{address1}</text:span></text:p>
         </draw:text-box>
        </draw:frame>
        <draw:frame draw:style-name="gr2" draw:text-style-name="P4" draw:layer="layout" svg:width="8.8cm" svg:height="0.7cm" svg:x="5.2cm" svg:y="8.3cm">
         <draw:text-box>
          <text:p text:style-name="P3"><text:span text:style-name="T2">{address2} <text:s/>{postcode}</text:span></text:p>
         </draw:text-box>
        </draw:frame>
        <draw:frame draw:style-name="gr3" draw:text-style-name="P5" draw:layer="layout" svg:width="7.8cm" svg:height="0.962cm" svg:x="5.1cm" svg:y="6.5cm">
         <draw:text-box>
          <text:p>{name} </text:p>
         </draw:text-box>
        </draw:frame>
    

    csv 파일



    아래와 같은 데이터로 되어 있다.
    uft8에서 쉼표로 구분하여 저장됩니다.


    postcode
    address1
    address2
    이름


    6040925
    488 Honojimae-cho Nakagyo-Ward
    Kyoto City Kyoto Pref.
    Kyoto City Hall

    6008799
    849-12 Higashiumekoji-cho shimogyo-Ward
    Kyoto City Kyoto Pref.
    Kyoto Central Post Office


    PowerShell



    template에 csv 파일의 데이터를 꽂는데 사용한다.
    이 경우 주소록의 데이터를 꽂습니다.

    데이터 삽입
    # load data
    $data=Import-Csv -Path .\addresslist.csv -Encoding UTF8
    
    foreach($d in $data){
        # load template
        $temp=Get-Content .\card.fodg -Encoding UTF8
    
        # merge template
        $temp=$temp -replace '{postcode}',$d.postcode
        $temp=$temp -replace '{address1}',$d.address1
        $temp=$temp -replace '{address2}',$d.address2
        $temp=$temp -replace '{name}',$d.name
    
        $file="cards\"+$d.name
    
        # output newfile
        $temp | out-file -FilePath $file'.fodg' -Encoding utf8
    }
    

    한층 더 대량으로 생긴 크리스마스 카드를 일괄로 인쇄할 수 있도록 print.ps1도 만들었다.

    일괄 인쇄
    $cards=(Get-ChildItem cards\*.fodg)
    
    foreach($card in $cards){
    
        Start-Process $card -Verb Print | Stop-Process
    
    }
    

    이 명령은 기존 프린터 (표준에서 사용하는 프린터)에 "표준 설정"으로 인쇄합니다.

    잘 인쇄하려면,
    표준 프린터에 "엽서"를 넣고 표준 설정 용지 설정을 "엽서""가로"로 설정합니다.

    감사의 말



    Flat ODT를 가르쳤다 @ 노가 준
    Powershell을 사용하면 Flat ODT에 데이터를 꽂을 수 있습니까? 라고 말했다 @Anubis_369

    좋은 웹페이지 즐겨찾기