HTML-like PDF-Erzeugung

Mit dem Python Modul PDFDocument im Zusammenhang mit Reportlab lassen sich spielend leicht PDF-Dokumente mit Python generieren. Es werden dabei zwei verschiedene Templates (für Reports oder im Letter-Style) verwendet, mit denen sich anhand einer HTML-ähnlichen Syntax PDF-Dateien erzeugen lassen.

Hier die unterstützten Typen:

  • pdf.style.normal
  • pdf.style.heading1
  • pdf.style.heading2
  • pdf.style.heading3
  • pdf.style.small
  • pdf.style.bold
  • pdf.style.right
  • pdf.style.indented
  • pdf.style.paragraph
  • pdf.style.table

CATIA V6 automatisieren mit Python unter Windows

CATIA V6 im Blue LayerDas neue CAD- und PLM-System CATIA V6 von Dassault Systemes kann mit Python unter Windows genauso einfach automatisiert werden, wie das gerade in Ablösung befindliche CATIA V5. Da das neue System aber nicht mehr auf das Dateisystem des Benutzers zurückgreift, sondern mit einer Datenbank gegen einen PLM-Server arbeitet, muss man hierbei den Zugriff auf die CAD-Daten natürlich komplett anders gestalten. Dieser Artikel zeigt, wie man automatisiert CAD-Daten identifiziert und diese für einen Vergleich in die Turntable View des Silver Layer lädt.

COM-Anwendungen lassen sich mit Python z.B. mit comtypes oder mit dem Pywin32 Modul, welches in der ActivePython Distribution enthalten ist automatisieren. Meine Beispiele hier verwenden Pywin32.

Wenn Sie die folgenden Beispiele laufen lassen, sorgen Sie bitte dafür, dass CATIA V6 bereits gestartet ist und eine PLM-Verbindung existiert.

Das erste Beispiel gibt einfach die Namen (PLMExternalID) der selektierten CAD-Daten aus einer Trefferliste (im Silver Layer) in die Konsole aus:

import win32com.client  
catiaObj=win32com.client.GetActiveObject('CATIA.Application') 
for i in range(catiaObj.ActiveEditor.Selection.Count):
     print 'Selected Item %s: %s'%(i, catiaObj.ActiveEditor.Selection.Item(i + 1).Value.Name)

Das nächste Beispiel setzt eine Recherche mit der Zeichenfolge „Weld0815*“ an die VPM-Datenank ab und lädt alle gefundenen Daten in die Turntable View im Silver Layer. Dies ist hilfreich, wenn man eben schnell eine bestimmte Menge an CAD-Daten miteinander vergleichen möchte:

import win32com.client  
# Search for every Product with name Weld0815*
catiaObj=win32com.client.GetActiveObject('CATIA.Application') 
oSearchService = catiaObj.GetSessionService("PLMSearch") 
oPLMSearches = oSearchService.Searches 
oPLMSearch = oPLMSearches.Add() 
oPLMSearch.Type = "PLMProductDS" 
oPLMSearch.AddAttributeCriteria("PLM_ExternalID",  "Weld0815*") 
oPLMSearch.search()  
# Iterate over all found objects and put them into the turntable view 
o3DShapeAsPLMEntities = oPLMSearch.EditedContent 
print 'Found %s entries.'%o3DShapeAsPLMEntities.Count 
for foundobj in o3DShapeAsPLMEntities:
     print 'Putting %s onto the table'%foundobj.Name
     oSelection = catiaObj.ActiveEditor.Selection
     oSelection.Add(foundobj)
     catiaObj.StartCommand("Turntable")

Einfacher SMTP-Server in einer Zeile Python

Pythons SMTP-Server in KommandozeileEs gibt unzählige Beispiele, wozu ein SMTP-Server bei der Webentwicklung nützlich ist. Sei es, dass man den Versand von Formulardaten testen will, oder Registrierungsinformationen aus dem Content Management System versand werden sollen. In solchen und ähnlichen Fällen benötigt die Applikation für den Versand der E-Mails einen SMTP-Server.

Da der im Serverbetriebssystem vorinstallierte SMTP-Server und Fremdprodukte oftmals nicht auf die Schnelle konfiguriert werden können, kann man sich sehr einfach mit einer Zeile Python helfen:

python -m smtpd -n -c DebuggingServer localhost:25

Dies bewirkt, dass die versendete Mail bei Ankunft einfachin der Konsole ausgegeben wird. Nicht wundern vorher wird gar nichts angezeigt.

Inhalte aus Webseiten speichern per Web Scraping

Dieser Frage sind zwei Tutorials auf http://sig.levillage.org/ gewidmet. Diese demonstrieren, wie die Thematik Web Scraping mit Python umgesetzt werden kann. Das detailliert beschriebene Beispiel recherchiert auf dvspot.com nach bestimmten DV Kameras und „pumpt“ die technischen Daten in eine von Excel lesbare CSV Datei.

Merlin zum denken bewegen per MS Agent Automation

 
import win32com.client 
import time   
ag=win32com.client.Dispatch("Agent.Control") 
ag.Connected=1 
ag.Characters.Load("Merlin") 
ag.Characters("Merlin").Show() 
text = raw_input("Bitte etwas eingeben...") 
ag.Characters("Merlin").Think(text) 
ag.Hide() time.sleep(5)

Django – skaliert von der Microsite bis zum Enterprise CMS

Django ist eigentlich kein Content Management System, sondern ein extrem skalierbares Web Framework mit Unterstützung für viele Datenbank-Systeme und Webserver. Mit Django werden ganze Content Management Systeme entwickelt.

Django ist ein äußerst flexibles und vielseitiges auf Python basierendes Framework, mit dessen Hilfe in sehr kurzer Zeit Blogs, Content Management Systeme und sehr große Websites entwickelt werden können. Django bringt von sich aus einen auf Python basierenden Webserver für Entwicklungszwecke mit und benötigt zunächst auch keinen Datenbankserver. Es lassen sich entweder ganz ohne Datenbank dynamische Webseiten entwickeln, oder man verwendet die Datei-basierte Datenbank SQLite (welches in Python 2.5 schon integriert ist). Ansonsten verwendet man einfach MySQL, PostgreSQL, Oracle oder SQLite – In Zukunft auch DB2.

Wenn man sich im Netz nach Django-basierenden Content Management Systemen umschaut, findet man fast ausschließlich Systeme, die für jede Website neu entwickelt worden sind. Dies ist auch das Ziel von Django: Ein System, welches in kürzester Zeit ganze Websites auf die Beine Stellt. Django skaliert extrem gut und bringt natürlich jede Menge Features für sehr große Sites mit (Skalierung auf mehreren Maschinen, Caching-Server usw.).

Ein besonderes Feature möchte ich hier nicht unterschlagen: Die vollautomatisch zu jeder Site dynamisch generierte Administrations-Oberfläche. Wenn man in etwa 20 bis 40 Zeilen Code das Modell eines kleinen Webprojekts geschrieben hat, wird automatisch das Administration-Interface erzeugt, mit dessen Hilfe die Artikel/Daten im system angelegt werden können. Noch während der Entwicklung des Designs des Backends für die User können Autoren schon das System mit Daten füttern. Nicht umsonst nennt sich Django (ins Deutsche übersetzt) >>Das Webframework für Perfektionisten mit Deadlines<<

PDF zu Text mit PyPDF

Ein PyPDF-Python-Script zum Export des Inhalts einer PDF-Datei im Textformat.

import pyPdf  
def getPDFContent(path):
     content = ""
     pdf = pyPdf.PdfFileReader(file(path, "rb"))
     for i in range(0, pdf.getNumPages()):
         content += pdf.getPage(i).extractText() + "\n"     # Loesche Leerzeichen
     content = " ".join(content.replace("\xa0", " ").strip().split())
     return content
print getPDFContent("test.pdf")