※ Ubuntu 22.04 에서 gvm-cli 로 pdf 레포트를 생성하고 이를 세 가지 방법을 이용하여 html 파일로 변환합니다.
gvm-cli 무료 버전에서는 더이상 html을 지원하지 않습니다. 유료 버전에서만 지원합니다.
#!/bin/bash
name=$1
format_name="PDF"
pass="abcdefg"
# reportID_GET
report_id=$(sudo -u gvm gvm-cli --gmp-username admin --gmp-password "$pass" socket --socketpath /run/gvmd/gvmd.sock --xml "<get_tasks filter='name=${name}'/>" | grep -oP '<report id="\K[^"]+')
# report_format_ID_GET
format_id=$(sudo -u gvm gvm-cli --gmp-username admin --gmp-password "$pass" socket --socketpath /run/gvmd/gvmd.sock --xml "<get_report_formats filter='name=${format_name}'/>" | xmlstarlet sel -t -m "//report_format" -v "@id")
# make REPORT
sudo -u gvm gvm-cli --gmp-username admin --gmp-password "$pass" socket --socketpath /run/gvmd/gvmd.sock --xml "<get_reports report_id=\"${report_id}\" format_id=\"${format_id}\" details='True' filter='apply_overrides=0 levels=hml rows=100 min_qod=70 first=1 sort-reverse=severity' />" | grep -oP '(?<=</report_format>)[^<]+' | base64 -d > /www/report/${name}.pdf
if [ -s "/www/report/${name}.pdf" ]; then
# 둘 중 하나만 사용하고 나머지는 삭제 혹은 주석처리
① pdftohtml 패키지 이용 시 사용
pdftohtml -s -dataurls "/www/report/${name}.pdf" "/www/report/${name}.html"
mv "/www/report/${name}-html.html" "/www/report/${name}.html"
② python 스크립트 호출 시 사용
/usr/bin/python3 pdftohtml.py "/www/report/${name}.pdf" "/www/report/${name}.html"
else
logger "파일 생성 실패: ${name}"
fi
apt install -y pdftohtml
# 별다른 이미지, 프레임 없이 단순하게만 출력
pdftohtml -noframes name.pdf (name.html)
# html과 png 파일만 생성
pdftohtml -s -dataurls name.pdf (name.html)
결론적으로 Spire.PDF 사용하여 변환 시 img 화 되어 변환되기 때문에 text/html을 추출하여 사용하지 못해 개발 중에 사용이 어려웠습니다. 단순 출력만을 위한 거라면 권유드리지만 output data를 활용해야 한다면 권유드리지 않습니다.
python3 -m pip install Spire.PDF
import sys
from spire.pdf.common import *
from spire.pdf import *
pdf_file = sys.argv[1]
html_file = sys.argv[2]
# PDF class
doc = PdfDocument()
# Load pdf file
doc.LoadFromFile(pdf_file)
# convert
doc.SaveToFile(html_file, FileFormat.HTML)
doc.Close()
※ URL: https://www.e-iceblue.com/ko/pdf/pdf-to-html-python.html
gvm-cli 에서 사용되는 python package 와 충돌이 발생하오니 에러가 발생한다면 조치 내역을 따라 해보시길 바랍니다.
python3 -m pip install pdfminer.six
import sys
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import HTMLConverter
# from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO
pdf_file = sys.argv[1]
html_file = sys.argv[2]
def convert_pdf_to_html(pdf_file, html_file):
rsrcmgr = PDFResourceManager()
retstr = StringIO()
codec = 'utf-8'
laparams = LAParams()
with open(html_file, 'wb') as f:
device = HTMLConverter(rsrcmgr, f, codec=codec, laparams=laparams)
with open(pdf_file, 'rb') as fp:
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0 # is for all
caching = True
pagenos = set()
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password, caching=caching, check_extractable=True):
interpreter.process_page(page)
device.close()
if __name__ == "__main__":
if len(sys.argv) != 3:
#print("Usage: python script.py <pdf_file> <html_file>")
sys.exit(1)
pdf_file = sys.argv[1]
html_file = sys.argv[2]
convert_pdf_to_html(pdf_file, html_file)
#print(f"PDF converted to HTML and saved to {html_file}")
URL: https://best-mother-seonnyeo.tistory.com/55
둘 다 인자 값을 받기 때문에 아래와 같이 호출합니다.
python3 스크립트_명.py /path/to/PDF_name.pdf /path/to/HTML_name.html
멀쩡히 잘 되던 gvm-cli인데 pdfminer.six 설치 후 갑자기 안된다면 아래 조치를 따라해보시길 바랍니다.
# pip show pdfminer.six
===
Name: pdfminer.six
Version: 20231228
Summary: PDF parser and analyzer
Home-page: https://github.com/pdfminer/pdfminer.six
Author: Yusuke Shinyama + Philippe Guglielmetti
Author-email: pdfminer@goulu.net
License: MIT/X
Location: /usr/local/lib/python3.10/dist-packages
Requires: charset-normalizer, cryptography
Required-by:
cryptography 패키지가 재설치 된 것이 아닌가 의심이 됩니다.
# python3 -m pip show cryptography
===
Name: cryptography
Version: 42.0.7
Summary: cryptography is a package which provides cryptographic recipes and primitives to Python developers.
Home-page: https://github.com/pyca/cryptography
Author: The Python Cryptographic Authority and individual contributors
Author-email: cryptography-dev@python.org
License: BSD or Apache License, Version 2.0
Location: /usr/local/lib/python3.10/dist-packages
Requires: cffi
Required-by: pdfminer.six
# ls -d /usr/local/lib/python3.10/dist-packages/* | grep cryptography
===
/usr/local/lib/python3.10/dist-packages/cryptography
/usr/local/lib/python3.10/dist-packages/cryptography-42.0.7.dist-info
36 버전대로 다운그레이드하기 위해 재설치를 합니다.
python3 -m pip uninstall -y cryptography
python3 -m pip install cryptography==36.0.2