尝试使用 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 中的本机类:androidios 等)

    从插件中学习 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 文件的主要内容,如果未能解决你的问题,请参考以下文章

下拉菜单 KivyMD 未打开

尝试在 MDTextField (KivyMD) 中访问后未显示用户文本

如何修复 Kivymd MDDataTable python3 的“内联错误”

在 KivyMD 中动态隐藏和显示小部件

Python透明KivyMD导航抽屉

KivyMD 窗口未显示应用程序的图标。在其他类似问题上尝试了所有其他方式