Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion supernotelib/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.

__version__ = '0.5.0'
__version__ = '0.5.1'

from . import color
from . import converter
Expand Down
6 changes: 4 additions & 2 deletions supernotelib/cmds/supernote_tool.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ def save(svg, file_name):
def convert_to_pdf(args, notebook, palette):
vectorize = args.pdf_type == 'vector'
use_link = not args.no_link
use_keyword = args.add_keyword
converter = PdfConverter(notebook, palette=palette)
def save(data, file_name):
if data is not None:
Expand All @@ -85,10 +86,10 @@ def save(data, file_name):
else:
print('no data')
if args.all:
data = converter.convert(-1, vectorize, enable_link=use_link) # minus value means converting all pages
data = converter.convert(-1, vectorize, enable_link=use_link, enable_keyword=use_keyword) # minus value means converting all pages
save(data, args.output)
else:
data = converter.convert(args.number, vectorize, enable_link=use_link)
data = converter.convert(args.number, vectorize, enable_link=use_link, enable_keyword=use_keyword)
save(data, args.output)

def convert_to_txt(args, notebook, palette):
Expand Down Expand Up @@ -183,6 +184,7 @@ def main():
parser_convert.add_argument('--exclude-background', action='store_true', default=False, help='exclude background and make it transparent (PNG and SVG are supported)')
parser_convert.add_argument('--pdf-type', choices=['original', 'vector'], default='original', help='select PDF conversion type')
parser_convert.add_argument('--no-link', action='store_true', default=False, help='disable links in PDF')
parser_convert.add_argument('--add-keyword', action='store_true', default=False, help='enable keywords in PDF')
parser_convert.add_argument('--policy', choices=['strict', 'loose'], default='strict', help='select parser policy')
parser_convert.set_defaults(handler=subcommand_convert)

Expand Down
23 changes: 20 additions & 3 deletions supernotelib/converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@ def __init__(self, notebook, palette=None):
self.palette = palette
self.pagesize = A4

def convert(self, page_number, vectorize=False, enable_link=False):
def convert(self, page_number, vectorize=False, enable_link=False, enable_keyword=False):
"""Returns PDF data of the given page.

Parameters
Expand All @@ -318,6 +318,8 @@ def convert(self, page_number, vectorize=False, enable_link=False):
convert handwriting to vector
enable_link : bool
enable page links and web links
enable_keyword : bool
enable page link where keyword has been identified

Returns
-------
Expand All @@ -332,7 +334,7 @@ def convert(self, page_number, vectorize=False, enable_link=False):
renderer_class = PdfConverter.ImgPageRenderer
imglist = self._create_image_list(converter, page_number)
pdf_data = BytesIO()
self._create_pdf(pdf_data, imglist, renderer_class, enable_link)
self._create_pdf(pdf_data, imglist, renderer_class, enable_link, enable_keyword)
return pdf_data.getvalue()

def _create_image_list(self, converter, page_number):
Expand All @@ -348,15 +350,29 @@ def _create_image_list(self, converter, page_number):
imglist.append(img)
return imglist

def _create_pdf(self, buf, imglist, renderer_class, enable_link):
def _create_pdf(self, buf, imglist, renderer_class, enable_link, enable_keyword):
c = canvas.Canvas(buf, pagesize=self.pagesize)
keywords = self.note.get_keywords()
for n, img in enumerate(imglist):
page = self.note.get_page(n)
pageid = page.get_pageid()
horizontal = page.get_orientation() == fileformat.Page.ORIENTATION_HORIZONTAL
pagesize = landscape(self.pagesize) if horizontal else portrait(self.pagesize)
c.setPageSize(pagesize)
renderer = renderer_class(img, pagesize)
renderer.draw(c)
if enable_keyword:
found = []
for keyword in keywords:
if keyword.get_page_number() == n:
found.append(keyword)
for i in found:
try:
c.bookmarkPage(pageid)
scaled_rect = self._calc_link_rect(i.get_rect(), renderer.get_scale())
c.textAnnotation(i.get_keyword(),scaled_rect)
except:
continue
if enable_link:
pageid = page.get_pageid()
if pageid is not None:
Expand Down Expand Up @@ -449,3 +465,4 @@ def convert(self, page_number):
if text_list is None:
return None
return ' '.join(text_list)

7 changes: 7 additions & 0 deletions supernotelib/fileformat.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,13 @@ def get_page_number(self):

def get_position(self):
return self.position

def get_keyword(self):
return None if self.metadata['KEYWORD'] is None else str(self.metadata['KEYWORD'])

def get_rect(self):
(left, top, width, height) = self.metadata['KEYWORDRECT'].split(',')
return (int(left), int(top), int(left) + int(width), int(top) + int(height))

class Title:
def __init__(self, title_info):
Expand Down