尝试使用 KivyMD 和 Python 显示 PDF 文件
Posted
技术标签:
【中文标题】尝试使用 KivyMD 和 Python 显示 PDF 文件【英文标题】:Try to display PDF File with KivyMD and Python 【发布时间】:2021-08-26 21:13:51 【问题描述】:我正在尝试构建一个非常简单的应用程序 Python/KivyMD 来组织一些文档。 有什么办法可以显示 PDF 文件吗?我正在寻找很多地方,但在这个阶段,没有找到任何令人信服的东西...... 有没有人有想法(肯定比我的好?) 非常感谢
【问题讨论】:
【参考方案1】:是的,有一些,但大多数时候真正的答案不在同一个地方,而是在不同的地方,我将给你一些关于如何做到这一点的细节: jbsidis
-
将 Pyjnius 添加到您的规范要求中,这有助于访问 java 类:
要求 = kivy==2.0.0,kivymd==0.104.1,python3,pyjnius,plyer,requests,urllib3,chardet,idna,pip,Image,PIL
-
从https://pdfbox.apache.org/download.html 下载 .jar 插件,您可以轻松访问以下功能:
提取文本 从 PDF 文件中提取 Unicode 文本。 拆分和合并 将单个 PDF 拆分为多个文件或合并多个 PDF 文件。 填写表格 从 PDF 表单中提取数据或填写 PDF 表单。 预检 根据 PDF/A-1b 标准验证 PDF 文件。 打印 使用标准 Java 打印 API 打印 PDF 文件。 另存为图像 将 PDF 保存为图像文件,例如 PNG 或 JPEG。 创建 PDF 从头开始创建带有嵌入字体和图像的 PDF。 签约 对 PDF 文件进行数字签名。
您必须将该插件添加到您的应用程序包中。
如果一切设置正确,现在最简单的部分就来了(除了 Apache 插件,您还可以使用要编译应用程序的设备的 NDK 中的本机类:android、ios 等)
从插件中学习 API,如果您将使用 Apache 插件,请阅读:https://pdfbox.apache.org/docs/2.0.13/javadocs/
使用 KivyMD 和 Python3 编程图形用户界面,也使用 pyjnius:https://pyjnius.readthedocs.io/en/stable/
我对组织 PDF 的建议是使用 GridLayout,就像有图片但放置 MDCard 和文本标签:
from kivymd.app import MDApp
from kivy.lang.builder import Builder
from kivy.core.window import Window
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
Window.size = (330, 500)
kv = '''
#:import MDTextField kivymd.uix.textfield.MDTextField
<MyTile@SmartTileWithLabel>
size_hint_y: None
height: "240dp"
<S>:
MDTextFieldRound:
pos_hint: "center_x": .5, "center_y": .95
normal_color : [1,1,1,.1]
color_active : [1,1,1,1]
size_hint: .8, .07
hint_text : 'Search a product...'
icon_left : 'magnify'
Screen:
FloatLayout:
BoxLayout:
id: m5
pos_hint: "center_x": .5, "center_y": .371 #this will change if you change this Window.size = (330, 500)
orientation: "vertical"
ScrollView:
GridLayout:
cols: 2
adaptive_height: True
padding: dp(4), dp(4)
spacing: dp(4)
MDCard:
size: "150dp","200dp"
MDLabel:
text: " PDF Book"
MDIconButton:
icon: "file"
MDCard:
size: "150dp","200dp"
MDLabel:
text: " PDF Book"
MDIconButton:
icon: "file"
MDCard:
size: "150dp","200dp"
MDLabel:
text: " PDF Book"
MDIconButton:
icon: "file"
MDCard:
size: "150dp","200dp"
MDLabel:
text: " PDF Book"
MDIconButton:
icon: "file"
MDCard:
size: "150dp","200dp"
MDLabel:
text: ""
MDIconButton:
icon: "file"
## MyTile:
## source: "Photos/pro.jpg"
## text: "[size=26]jbsidis[/size]\\n[size=14]cat-1.jpg[/size]"
##
## MyTile:
## source: "Photos/pro.jpg"
## text: "[size=26]jbsidis[/size]\\n[size=14]cat-2.jpg[/size]"
## tile_text_color: app.theme_cls.accent_color
##
## MyTile:
## source: "Photos/pro.jpg"
## text: "[size=26][color=#ffffff]jbsidis[/color][/size]\\n[size=14]cat-3.jpg[/size]"
## tile_text_color: app.theme_cls.accent_color
MyTile:
source: "a11.png"
text: ""
tile_text_color: [0,0,0,0]
FloatLayout:
AnchorLayout:
pos_hint: "center_x": .5, "center_y": .9
MDTextButton:
halign: "center"
text: "\\n\\n\\n\\n\\n\\n\\nLoading more...\\n\\n"
MDSpinner:
size_hint: .1,.1
MDToolbar:
id: success_screen_toolbar
title: "jbsidis"
pos_hint: "top": 1
right_action_items: [["progress-check", lambda: print(6)]]
MDBottomAppBar:
MDToolbar:
id: success_screen_bottomappbar
icon: "magnify"
on_action_button: root.add_widget(app.sbar())
type: 'bottom'
mode: 'center'
#elevation: '8dp'
left_action_items: [["calendar-text", lambda: print(6)], ["account-group", lambda: print(6)]]
right_action_items: [["magnify", lambda: print(6)], ["menu", lambda: print(6)]]
'''
class blanks1(BoxLayout):
pass
class S(FloatLayout):
pass
class Main(MDApp):
def build(self):
return Builder.load_string(kv)
def sbar(self):
self.root.ids.success_screen_toolbar.md_bg_color=[1,1,1,1]
return S()
Main().run()
然后,在 python 代码中,我们应该使用 pyjnius 定义函数,这些函数将使 java 插件类对 PDF 文件进行操作,我们必须将其与 KivyMD GUI 结合以使其可操作,这绝不是不可能的,我们需要的是创造力:
【讨论】:
以上是关于尝试使用 KivyMD 和 Python 显示 PDF 文件的主要内容,如果未能解决你的问题,请参考以下文章
尝试在 MDTextField (KivyMD) 中访问后未显示用户文本