尝试使用 KivyMD 和 Python 显示 PDF 文件

Try to display PDF File with KivyMD and Python

我正在尝试构建一个非常简单的应用程序 Python/KivyMD 来整理一些文档。 有没有显示PDF文档的解决方案?我在很多地方都在寻找,但在这个阶段,没有发现任何令人信服的东西...... 有没有人有想法(肯定比我的好?) 非常感谢

是的,有一些,但大多数时候真正的答案不在同一个地方,而是在不同的地方,我会给你一些关于如何做到这一点的细节: jbsidis

  1. 将 Pyjnius 添加到您的规范要求中,这有助于访问 java 类:

requirements = kivy==2.0.0,kivymd==0.104.1,python3,pyjnius,plyer,requests,urllib3,chardet,idna,pip,Image,PIL

  1. https://pdfbox.apache.org/download.html 下载 .jar 插件,这将使您轻松访问有助于您的功能:

Extract Text Extract Unicode text from PDF files. Split & Merge Split a single PDF into many files or merge multiple PDF files. Fill Forms Extract data from PDF forms or fill a PDF form. Preflight Validate PDF files against the PDF/A-1b standard. Print Print a PDF file using the standard Java printing API. Save as Image Save PDFs as image files, such as PNG or JPEG. Create PDFs Create a PDF from scratch, with embedded fonts and images. Signing Digitally sign PDF files.

  1. 您必须将该插件添加到您的应用包中。

  2. 如果一切设置正确,最简单的部分现在来了(除了 Apache 插件,您还可以使用设备的 NDK 中的原生 类,您将编译应用程序用于: android、ios、等等)

  3. 从插件中学习API,如果要使用Apache插件,阅读:https://pdfbox.apache.org/docs/2.0.13/javadocs/

  4. 使用 KivyMD 和 Python3 编写图形用户界面,也使用 pyjnius:https://pyjnius.readthedocs.io/en/stable/

  5. 我对组织PDF的建议是使用GridLayout,比如有图片但放MDCards加文本标签:


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使其可操作,从来都不是不可能的,我们需要的是创造力: