Portál AbcLinuxu, 13. května 2025 17:31
Řešení dotazu:
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys from cx_Freeze import setup, Executable # Dependencies are automatically detected, but it might need fine tuning. #build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]} includefiles = [("src/pdftk.exe", "pdftk.exe"), ("src/libiconv2.dll", "libiconv2.dll")] build_exe_options = {"packages": ["os"], "excludes": [""], "include_files": includefiles} #build_exe_options = {} # GUI applications require a different base on Windows (the default is for a # console application). base = None #if sys.platform == "win32": # base = "Win32GUI" setup( name = "pdftkexample", version = "1.0", description = "PdfTk example", options = {"build_exe": build_exe_options}, executables = [Executable("src/pdftkexample.py", base=base)])Předpokládaná struktura adresáře je například: C:\MojeAplikace\src - tam bude pdftkexample.py a pdftk.exe+libiconv2.dll C:\MojeAplikace\setup-cxfreeze.py kde bude to co je napsané nahoře. Po zmrazení bude pdftk.exe i s knihovnou libiconv2.dll přibaleno k výslednému exe progámku. Ovšem, aby ho bylo možno volat, je potřeba zjistit kde je umístěn, to se ve vlastním skriptu, který bude volat pdftk.exe udělá takto:
import sys import os import os.path def getModulePath(): if (hasattr(sys, "frozen")): return os.path.dirname(sys.executable) return os.path.dirname(__file__) def getPdftkExe(exe_name="pdftk.exe"): path = os.path.join(getModulePath(), exe_name) return path if __name__ == "__main__": exe = getPdftkExe() print exeV proměné exe je celá cesta k pdftk.exe, která se dá použít pro volání pomocí popen() atd.
pdftk_command='pdftk form.pdf fill_form form.fdf output form_from_script.pdf' os.system(pdftk_command)Zmrazeny exe skript prislusne pdf soubory nevytvari, cili stale jeste nevola pdftk. Tim se dostavam k tvemu druhemu skriptu, ktery vyhleda cestu k pdftk a vrati ji v promenne exe. Kdyz je pdftk ve stejne slozce se skriptem ktery ho vola, nemelo by stacit volat s cestou .\ , tedy takto?:
pdftk_command='.\pdftk form.pdf fill_form form.fdf output form_from_script.pdf' os.system(pdftk_command)
import logging from decimal import * import os import glob import sys import os.path def getModulePath(): if (hasattr(sys, "frozen")): return os.path.dirname(sys.executable) return os.path.dirname(__file__) def getPdftkExe(exe_name="pdftk.exe"): path = os.path.join(getModulePath(), exe_name) return path if __name__ == "__main__": cesta_k_pdftk_exe = getPdftkExe() #print(cesta k_pdftk_exe) pdftk_command=cesta_k_pdftk_exe+' form.pdf fill_form form.fdf output form_from_script.pdf' os.system(pdftk_command)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.