검은 천사의 블로그

PDF문서합치기

파이썬2024. 1. 25. 11:45

* 참고: https://pikepdf.readthedocs.io/en/latest/topics/pages.html

# pdf 문서 합치기 
# 제작: 2024-01-25
# 마지막 개정: 2024-01-25
# 필요 라이브러리 : pikepdf, glob
# pip install pikepdf로 설치할 수 있다.

from pikepdf import Pdf
from glob import glob

print("여러 PDF문서를 하나로 합치기 위한 프로그램입니다.")
print("암호가 걸려 있는 pdf문서는 암호를 먼저 해제한 후 진행해야 합니다.")
print("현재 폴더내 동일한 이름을 가진 pdf가 있을 경우 해당 문서를 덮어쓰며, 이전 pdf문서는 삭제됩니다.")


pdf = Pdf.new()
version = pdf.pdf_version
merged_file_name = input("저장할 파일명을 입력하시오.(확장자 제외):")
merged_file_name = merged_file_name + ".pdf"
target_file = []

for file in glob("*.pdf"):
    src = Pdf.open(file)
    target_file.append(file)
    version = max(version, src.pdf_version)
    pdf.pages.extend(src.pages)

print("\n대상 pdf문서 및 합칠 순서는 아래와 같습니다.")
for l in target_file:
    print(l)

pdf.remove_unreferenced_resources()
pdf.save(merged_file_name, min_version=version)

print("\n")
print("{0}개의 문서를 {1}으(로) 저장했습니다.".format(len(target_file), merged_file_name))
# print("{0}으(로) 저장 성공했습니다." .format(merged_file_name))
# print("총 {0}개의 문서를 합쳤습니다." .format(len(target_file)))

import turtle
import colorsys

turtle.bgcolor('black')

squary = turtle.Turtle()
squary.speed(20)
h = 0

# squary.pencolor('red')

for i in range(400):
    squary.pencolor(colorsys.hsv_to_rgb(h, 1, 1))
    squary.left(102)
    squary.forward(i)
   
    h += 0.005

turtle.done()

설치 전 준비 작업 

- 무선 네트워크 환경, SSD 2개, Windows11과 듀얼 부팅 환경이다.
- 아치리눅스 설치 전 파티션 작업 및 무선 네트워크 접속까지 마칠 것이다.

현제 내 시스템이 UEFI 부팅 환경인지 알아보기. (구형 PC가 아니라면 별 문제가 없을 것이다.)

$ ls /sys/firmware/efi

출력 결과에서 'efivars' 디렉토리가 보인다면 현재 UEFI 부팅 환경인 것이다.

현재 시스템에 설치되어 있는 SSD를 확인하기 위해 lsblk 명령어로 확인한다.

$ lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda           8:0    0 238.5G  0 disk 
├─sda1        8:1    0     5G  0 part 
├─sda2        8:2    0    16G  0 part [SWAP]
└─sda3        8:3    0 217.5G  0 part /
nvme0n1     259:0    0 465.8G  0 disk 
├─nvme0n1p1 259:1    0   100M  0 part /boot/efi
├─nvme0n1p2 259:2    0    16M  0 part 
├─nvme0n1p3 259:3    0   465G  0 part 
└─nvme0n1p4 259:4    0   644M  0 part

아치리눅스를 sda에 설치할 것이며, 파티션 작업 및 마운트가 되어 있기 때문에 같이 나오는 것이다. cfdisk 명령어로 파티션 분할 작업을 진행하면 된다.  (sda에 아치리눅스를 설치할 것이고 nvme0n1에는 윈도우11이 설치되어 있다.)
cfdisk로 원하는 파티션 크기를 설정하면 된다.

$ cfdisk /dev/sda

분할한 파티션을 포맷한다.

$ mkfs.ext4 -j /dev/sda3  // 파티션 ext4로 포맷한다.
$ mkswap /dev/sda2        // 스왑파티션 생성

무선네트워크 연결하기

$ icwctl
[iwd]#
[iwd]# device list                               // 무선랜카드 이름을 확인한다.
[iwd]# station {랜카드 이름} scan                // 연결 가능한 네트워크를 검색. 
                                                 // 검색 결과값이 없을 수도 있다.
[iwd]# station {랜카드 이름} get-networks        // 연결 가능한 SSID를 검색한다.
[iwd]# station {랜카드 이름} connect {SSID}      // 원하는  SSID로 연결한다.
                                                 // 암호가 필요한 경우 암호 입력 메세지가 출력된다.
[iwd]# exit
$ ping -c 3 www.google.com                       // 네트워크 연결 유무룰 확인한다.

아치리눅스 기본 시스템 설치하기

'/etc/pacman.d/mirrorlist'를 수정해 패키지 미러사이트를 추가 또는 삭제할 수 있다. 설치 진행에 있어서 큰  체감을 느낄 수 없기 때문에 수정없이 진행할 것이다. 

아치리눅스를 설치할 파티션을 마운트하고 base 패키지 설치

$ mount /dev/sda3 /mnt    // 아치리눅스를 설치할 파티션을 /mnt로 마운트한다.
$ swapon /dev/sda2        // 생성한 스왑파티션을 사용하기 위한 명령어이다.
$
$ pacstrap -K /mnt base base-devel linux linux-firmware vim nano networkmanager
                         // networkmanager은 리눅스에서 인터넷 연결에 필요한 패키지이다.

UEFI 부팅을 위해 EFI 파티션 마운트하고 fstab 파일 만들기

# mkdir /mnt/boot/efi               
# mount /dev/nvme0n1p1 /mnt/boot/efi     // nvme0m1p1은 사용자마다 다르게 표시 될 수 있다.
#                                        // lsblk 명령어를 통해 자신의 efi 파티션을 파악해두는 것이 좋다.
# genfstab -U /mnt >> /mnt/etc/fstab     // 각 파티션을 UUID로 마운트하겠다는 의미이다.
                                         // 참고: UUID vs partuuid로 검색

아치리눅스 내부 시스템으로 진입(변경)하기

# arch-chroot /mnt
# passwd                    // root 비밀번호 설정

아치리눅스 언어 환경 설정하기

# nano /etc/locale.gen      // nano 대신 vim으로 대체 가능하다.

* locale.gen 파일에서 아래의 문장을 찾아 주석(#)을 찾아 제거한다.

#en_US.UTF-8
#ko_KR.UTF-8

변경사항 적용하기 위해 아래의 명령어를 입력한다.

# locale-gen
# echo LANG=en_US.UTF-8 > /etc/locale.conf
# export LANG=en_US.UTF-8

호스트네임(PC이름) 설정 및 시간 동기화

# echo arch > /etc/hostname
# ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localetime    // 참고: 'TAB'키를 누르면 자동완성해준다.
# hwclock --systohc

일반 사용자를 추가하고 비밀번호 설정하기

# useradd -m -g users -G wheel -s /bin/bash {username}
# passwd {username}

root 또는 추가한 사용자 비밀번호를 만들지 않고 재부팅했다면, 아래와 같은 순서대로 하면 비밀번호를 재설정할 수 있다.

아치리눅스 설치 매체로 부팅 > 설치한 파티션 마운트 > 시스템 내부로 진입(arch-chroot) > passwd 명령어로 비밀번호 생성


 * 참고: 비밀번호를 생성하지 않고 재부팅하면, 비밀번호가 임의로 설정되기 때문에 정상적인 방법으로는 이 비밀번호를 알 방법이 없다.

sudo 설치 및 셋팅

# pacman -S sudo
# EDITOR=nano visudo // 또는 EDITOR=vim visudo
#
// 아래의 문장을 찾아 주석(#)을 제거
# %wheel ALL=(ALL): ALL

Grub 설치

# pacman -S intel-ucode
# pacman -S grub efibootmgr os-prober intel-ucode
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch --recheck
     // grub-install 명령은 EFI 파티션에 부팅 파일을 저장하기 위한 명령어이다.
     // --bootloader-id={적당한 이름} 으로 하면 된다.
     // 이후 /boot/efi/EFI을 보면 {적당한 이름} 디렉토리가 보일 것이다.

멀티 부팅 메뉴 적용

# nano /etc/default/grub          // Windows와 듀얼부팅을 위해 Grub 설정 수정
//
// -------------------------
// #GRUB_DISABLE_OS_PROBER=false  // 이 문장을 찾아 주석을 제거, 주석 해제를 하지 않으면 듀얼 부팅이 불가능하다.
// -------------------------
//
# grub-mkconfig -o /boot/grub/grub.cfg

마무리하고 재부팅하기

# systemctl enabel NetworkManager.service // 부팅후 네트워크 매니져가 실행될 수 있게 하기
# 
# exit
# umount -lR /mnt
# reboot

지금까지의 과정 정리

$ ls /sys/firmware/efi     // UEFI 부팅 여부 확인
                           // efivars 디렉토리가 보인다면 UEFI 부팅 상태이다.
$ lsblk                    // 아치리눅스를 설치할 장치명 확인
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda           8:0    0 238.5G  0 disk 
├─sda1        8:1    0     5G  0 part 
├─sda2        8:2    0    16G  0 part [SWAP]
└─sda3        8:3    0 217.5G  0 part /
nvme0n1     259:0    0 465.8G  0 disk 
├─nvme0n1p1 259:1    0   100M  0 part /boot/efi
├─nvme0n1p2 259:2    0    16M  0 part 
├─nvme0n1p3 259:3    0   465G  0 part 
└─nvme0n1p4 259:4    0   644M  0 part
$ cfdisk /dev/sda          // 파티션 크기 및 갯수 설정
$ mkfs.ext4 -j /dev/sda3   // 파티션 ext4로 포맷한다.
$ mkswap /dev/sda2         // 스왑파티션 생성
$ icwctl

[iwd]#
[iwd]# device list                               // 무선랜카드 이름을 확인한다.
[iwd]# station {랜카드 이름} scan                // 연결 가능한 네트워크를 검색. 
                                                 // 검색 결과값이 없을 수도 있다.
[iwd]# station {랜카드 이름} get-networks        // 연결 가능한 SSID를 검색한다.
[iwd]# station {랜카드 이름} connect {SSID}      // 원하는  SSID로 연결한다.
                                                 // 암호가 필요한 경우 암호 입력 메세지가 출력된다.
[iwd]# exit

$ ping -c 3 www.google.com                       // 네트워크 연결 유무 확인
                       
$ mount /dev/sda3 /mnt    // 아치리눅스를 설치할 파티션을 /mnt로 마운트한다.
$ swapon /dev/sda2        // 생성한 스왑파티션을 사용하기 위한 명령어이다.
$
$ pacstrap -K /mnt base base-devel linux linux-firmware vim nano networkmanager
                         // networkmanager은 리눅스에서 인터넷 연결에 필요한 패키지이다.
# mkdir /mnt/boot/efi                   
# mount /dev/nvme0n1p1 /mnt/boot/efi     // nvme0m1p1은 사용자마다 다르게 표시 될 수 있다.
#                                        // lsblk 명령어를 통해 자신의 efi 파티션을 파악해두는 것이 좋다.
# genfstab -U /mnt >> /mnt/etc/fstab     // 각 파티션을 UUID로 마운트하겠다는 의미이다.
                                         // 참고: UUID vs partuuid로 검색
# arch-chroot /mnt
# passwd                                 // root 비밀번호 설정

# nano /etc/locale.gen      // nano 대신 vim으로 대체 가능하다.
                            // en_US.UTF-8, ko_KR.UTF-8을 찾아 주석을 제거
# locale-gen
# echo LANG=en_US.UTF-8 > /etc/locale.conf
# export LANG=en_US.UTF-8
# echo {사용할 이름} > /etc/hostname                       // 피씨 이름 설정
# ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localetime    // 참고: 'TAB'키를 누르면 자동완성해준다.
# hwclock --systohc

# useradd -m -g users -G wheel -s /bin/bash {username}
# passwd {username}
# pacman -S sudo
# EDITOR=nano visudo // 또는 EDITOR=vim visudo
                     // %wheel ALL=(ALL): ALL을 찾아 주석(#)을 제거
# pacman -S intel-ucode
# pacman -S grub efibootmgr os-prober intel-ucode
# grub-install --target=x86_64-efi --bootloader-id=arch --recheck
     // grub-install 명령은 EFI 파티션에 부팅 파일을 저장하기 위한 명령어이다.
     // --bootloader-id={적당한 이름} 으로 하면 된다.
     // 이후 /boot/efi/EFI을 보면 {적당한 이름} 디렉토리가 보일 것이다.
# pacman -S grub efibootmgr os-prober intel-ucode
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch --recheck
# nano /etc/default/grub          // Windows와 듀얼부팅을 위해 Grub 설정 수정
                                  // #GRUB_DISABLE_OS_PROBER=false을 찾아 주석을 제거
                                  // 주석 해제를 하지 않으면 듀얼 부팅이 불가능하다.
# grub-mkconfig -o /boot/grub/grub.cfg

# systemctl enabel NetworkManager.service // 부팅후 네트워크 매니져가 실행될 수 있게 하기
# 
# exit
# umount -lR /mnt
# reboot

연신내 누릉지탕

맛집2018. 6. 13. 16:24


- 연신내 누릉지탕.
뜨거운 석쇠냄비에 사진과 같이 누릉지탕을 부어 줍니다.
사진에는 없지만, 짬뽕국물이 매콤한 것이 아주 좋습니다. 일반 중국집의 짬뽕국물보다는 더 맛있습니다. 누릉지탕과 짬뽕을 같이 먹는 것을 추천합니다. 짬뽕면발이 길기 때문에 여럿이 같이 먹기 위해서는 가위로 잘라 막는 것이 좋습니다.


시청역 근처(역에서 5분정도 거리) 중앙일보 앞 장호왕곱창


이가게에서 곱창을 먹어 본적이 없습니다. 이가게에 갈땬 항상! 무조건 김치찌게! 곱창보다 김치찌게가 맛있는 집으로 유명합니다. 다른 식당과 달리 김치를 직잡 담그기 때문에 이집만의 김치의 맛이 있습니다.

2호점도 있기는 하지만 본점인 중앙일보 앞에있는 가게로 가는 것을 추천합니다.

단점은 위생상태가........ ㅠㅠ

용두동 대성집

맛집2018. 6. 4. 22:07



용두동 대성집
소고기수육은 와사비간장보다 젓갈과 함께 먹으면 더 좋습니다. 젓갈과 함께 먹으면 와사비간장에 찍어 먹을깨 보다 더욱 진한 맛을 느낄수 있습니다.

해장국은 맑은 국물이며, 선지와 함께 나오기 때문에 선지를 싫어 하는 사람은 선지를 걷어 내거나 빼달라고 하는 것이 좋습니다. 육수의 맛은 소고기무우국과 비슷합니다. 해장국에 김칫국을 넣으면 곰탕을 먹는듯한 느낌이 납니다.

기본 메뉴가30,000원정도로 비싼편입니다. 그러므로 수육과 인당 해장국 하나씩 먹는것이 좋습니다.

진양소곱창

맛집2018. 5. 19. 20:01


수유역 근처
값싸고 맛있음. 그리고 역을 찰지게 잘하시는 어르신.
- 욕을 하시지만, 절대 기분은 나쁘지 않음. -
수유역에서 버스 한거장 정도 거리에 있는 것이 단점.
메뉴중 벌집은 대창과 함께 먹을 것을 추천함.

고대 형제집

맛집2018. 4. 27. 14:19


고대 형제집
싸고 맛있음. 단지 시끄럽다는 것이 단점