Portál AbcLinuxu, 8. listopadu 2025 08:00
Ř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 exe
V 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.