Files
pdfplumber/tests/test_convert.py
T
Jeremy Singer-Vine a5e7d7fa52 Remove pandas from dev requirements and tests
Results in needing one more # pragma: nocover statement, but on a
simple line of code. See PR #253 for details and motivation.
2020-08-15 12:03:34 -04:00

78 lines
2.1 KiB
Python

#!/usr/bin/env python
import unittest
import pytest
import pdfplumber
from subprocess import Popen, PIPE
from io import StringIO
import json
import sys
import os
import logging
logging.disable(logging.ERROR)
HERE = os.path.abspath(os.path.dirname(__file__))
def run(cmd):
return Popen(cmd, stdout = PIPE).communicate()[0]
class Test(unittest.TestCase):
@classmethod
def setup_class(self):
self.path = os.path.join(HERE, "pdfs/pdffill-demo.pdf")
self.pdf = pdfplumber.open(self.path, pages = [ 1, 2, 5 ])
@classmethod
def teardown_class(self):
self.pdf.close()
def test_json(self):
c = json.loads(self.pdf.to_json())
assert c["pages"][0]["rects"][0]["bottom"] == float(self.pdf.pages[0].rects[0]["bottom"])
def test_single_pages(self):
c = json.loads(self.pdf.pages[0].to_json())
assert c["rects"][0]["bottom"] == float(self.pdf.pages[0].rects[0]["bottom"])
def test_additional_attr_types(self):
path = os.path.join(HERE, "pdfs/issue-67-example.pdf")
with pdfplumber.open(path, pages = [ 1 ]) as pdf:
c = json.loads(pdf.to_json())
assert len(c["pages"][0]["images"])
def test_csv(self):
c = self.pdf.to_csv()
assert c.split("\r\n")[1] == (
'char,1,45.83,58.826,656.82,674.82,117.18,117.18,135.18,12.996,'
'18.0,12.996,,,,,,TimesNewRomanPSMT,,,,"(0, 0, 0)",,,18.0,,,,,Y,,1,'
)
io = StringIO()
self.pdf.to_csv(io)
io.seek(0)
c_from_io = io.read()
assert c == c_from_io
def test_cli(self):
res = run([
sys.executable,
"-m",
"pdfplumber.cli",
self.path,
"--format",
"json",
"--pages",
"1-2",
"5",
"--indent",
"2",
])
c = json.loads(res)
assert c["pages"][0]["page_number"] == 1
assert c["pages"][1]["page_number"] == 2
assert c["pages"][2]["page_number"] == 5
assert c["pages"][0]["rects"][0]["bottom"] == float(self.pdf.pages[0].rects[0]["bottom"])