Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

VB 2008 - PDF-Seitenanzahl in ein log-file schreiben

Frage Entwicklung VB for Applications

Mitglied: listigerTeppich

listigerTeppich (Level 1) - Jetzt verbinden

01.12.2009 um 16:16 Uhr, 6849 Aufrufe, 9 Kommentare

Hallo beisammen !

Ich schreibe an einem Programm, dass von mehreren PDF-Files die Seitenzahl auslesen und diese in ein log-File schreiben soll. Hat einer von euch evtl. ne schlaue Idee wie das in VB 2008 umzusetzen ist?

mfg,

Listiger
Mitglied: Biber
01.12.2009 um 18:51 Uhr
Moin listigerTeppich,

Zitat von listigerTeppich:
Ich schreibe an einem Programm, dass von mehreren PDF-Files die Seitenzahl auslesen und diese in ein log-File schreiben soll.
Hat einer von euch evtl. ne schlaue Idee wie das in VB 2008 umzusetzen ist?

mfg,

Listiger
Hmmm, ist das denn wirklich alles, was du zum heutigen Zeitpunkt über die genaue Aufgabenstellung bereit bist preiszugeben?

Würde es dir oder deinen Cheffes eventuell die ängstlich durchwachten Nächte verkürzen, wenn wir MitleserInnen alle gemeinsam eine Verschwiegenheitserklärung bezüglich eurer betrieblichen Abläufe blanko unterzeichen?

Oder wenn einer der gelangweilten Moderatoren eventuell versehentlich im Klartext eingetippte Verzeichnis- oder Programmnamen anonymisiert oder mit "###" unkenntlich macht?

Oder hat dir eine viel zu früh verschiedene Patentante beigebracht, dass durch ein kokettes Zurückhalten von Details erst richtig das Interesse, die Neugier und oft auch die Leidenschaft entfacht wird und sicherlich ganz ganz schnell viele viele Nachfragen kommen werden?

Ich frag mal anders:
  • wodurch genau sind diese PDF-Dateien beschreibbar? Liegen die an einem bestimmten Ort, wurden die gedruckt, sind die nur einen Tag alt?
  • wer oder was soll denn wann sagen: "Hey, zähl mir alle PDF-Seiten für meine Vorratsdatenspeicherung!"
  • WTHF ist denn das übergeordnete Ziel dieser " "Hey, zähl mir alle PDF-Seiten"-Aktion?
  • WTHBF ist denn an diesen Details so schützenswert???

Grüße
Biber,
Moderator und eigentlich einer der In-sich-Ruhenden hier
Bitte warten ..
Mitglied: listigerTeppich
02.12.2009 um 08:56 Uhr
ehehe, 1A Humor Biber, sehr zum schmunzeln - besonders der Patentanten-Abschnitt.

Also das übergeordnete Ziel der ganzen Action ist das mitprotokolieren der Seitenzahlen von PDF-Dateien. Wir versenden unser gesamtes Druckgut an ein großes externes Druckzentrum und wolln den groben Überblick behalten wie viele Seiten die denn wirklich zu drucken hatten. Könnt ja durchaus sein, dass ein spitzfindiger Zeitgaynosse, mit nicht zu unterschätzender krimineller Energie, mal versuchen sollte 2-3 Blätter mehr abzurechnen.

Kurz zurück zu den Fakten:

Alle PDF-Dateien liegen im selben Ordner und sollen mittels ButtonClick des VB2008-Programmes an dem ich sitze, an das Druckzentrum übertragen werden. Als zusätzliches Feature wäre das Mitloggen der (PDF-)Dateinamen (was kein Problem ist) und eben auch der jeweiligen Seitenanzahl dieser (größeres Problem) durchaus wünschenswert.

Aja, bei Bedarf häng ich hier auch gern noch meinen aktuellen Programmstand rein.. weiss nur nich ob das zum jetztigen Zeitpunkt nich overpowered wär oder ob die Informationen schon soweit ausreichend sind?
Bitte warten ..
Mitglied: Biber
02.12.2009 um 09:09 Uhr
Moin listigerTeppich,

danke für die Erläuterung.

Aus deiner Antwort würde ich schliessen, dass der (geplante) Ablauf so aussieht:
  • in einem Verzeichnis XY laufen den ganzen Tag PDF-Dateien ein von euren druckenden BenutzerInnen
  • bis dann alle 4, 8 oder alle 24 Stunden der ganze Klump zusammengezippt wird und per Fahrradbote oder wie auch immer an dieses Druckzentrum geht
  • --------hier bzw. vor dem nächsten Schritt soll sich dein Seitenzähl-Schnipsel einklinken ----
  • dann werden alle *.pdfs gelöscht/gemoved/als versendet gekennzeichnet

Ist das halbwegs so korrekt (ich kenne den Ablauf mit einem Druckzentrum nicht aus eigener Erfahrung) ?

Und gibt es einen bestimmten Grund, das in VB 200x zusammenzubraten?
Ich meine, es gibt ja solche out-of-the-Box-Tools wie pdftk, die auch hier im Forum durchdekliniert worden sind...

Grüße
Biber
Bitte warten ..
Mitglied: listigerTeppich
02.12.2009 um 11:01 Uhr
Jawollja, der Ablauf is im groben so wie du ihn beschrieben hast...

der Grund warum ich VB benutzen möchte ist, dass das Übermittlungs-Programm schon in VB 2008 geschrieben ist. Zudem ist es leider in unserer Umgebung sehr aufwändig bis unmöglich neue Software installiert/genehmigt zu bekommen, gerade dann wenn es Freeware ist (bei der Support nicht immer greifbar ist)

Hab auch schon nach VB-Lösungen geforstet und den Schnipsel hier gefunden:

Sub PDFCounter()
Dim buf As String, fil As String, i As Integer
Dim fso, pdf, pos As Integer, p2 As Integer
a = FreeFile
fil = InputBox("Pfad zur PDF")
Set fso = CreateObject("Scripting.FileSystemObject")
Set pdf = fso.OpenTextFile(fil)
Do While Not pdf.AtEndOfStream
buf = pdf.ReadLine
pos = InStr(1, buf, "/Count")
If pos > 0 Then
buf = Mid(buf, pos + 7)
p2 = InStr(1, buf, Chr(13))
If p2 <> 0 Then
buf = Left(buf, p2 - 1)
End If
i = CLng(buf)
Exit Do
End If
Loop
Range("a3") = i
End Sub

allerdings kann mein compiler (bzw. ich) damit zurzeit noch wenig anfangen. Kannst du mir evtl. sagen ob das hier ein Ansatz ist den es zu verfolgen lohnt, oder ob ne andere Umsetzung mehr verspricht.
Bitte warten ..
Mitglied: Biber
02.12.2009 um 11:43 Uhr
Moin listigerTeppich,

im Prinzip lässt sich die Mimik von diesem VBA-Schnipsel doch übernehmen... ein PDF lässt sich durchaus als Textdatei öffnen, ein FileSystemObject gibt es natürlich auch in VB und ebenso ein TextStream-Object....

Aber
Wenn denn nu' wirklich, wie dem Schnipsel-Algorithmus vorgekaspert, das ganze streng behütete Geheimnis des PDF-Seitenzählens darin besteht, in allen vorhandenen PDF-Dateien nach einem Vorkommnis des Strings "/Count" am Zeilenanfang zu suchen, dann kann das auch ein FindStr-Aufruf
01.
findstr /B /C:"/Count" X:\Deinpfad\*.pdf
Grüße
Biber
Bitte warten ..
Mitglied: listigerTeppich
02.12.2009 um 17:29 Uhr
Hi Biber,

mhww, gute Frage ob der Algorhitmus das nur vorkaspert oder ob an der Count-Sache was dran ist. In dem Forum aus dem ich den Schnipsel hab, wurd geschrieben dasses so nur geht wenn die PDFs keine Kapitel haben (was bei uns def. der Fall ist).
Ich bin ja generell immer für einfache Lösungen und deine Umsetzung klingt auch sehr verlockend, aber iwie auch fast schon zu einfach :D
Der Schnipsel fragt ja in der Schleife den "Count "-String pro Datei so lange ab, bis die PDF-Datei einmal ganz durchgerasselt is..zumindest versteh ichs so... könnte man das noch in deine Variante einbaun? Würd die dann nämlich doch gern mal testen

Gruß,

Listiger
Bitte warten ..
Mitglied: Biber
02.12.2009 um 19:01 Uhr
Moin listigerTeppich,

sagen wir so...
ich kann von hier aus nicht hundertprozentig erkennen, was diese eine CMD-Findstr-Zeile rausschreibt, wenn sie gegen deine PDFs abgefeuert wird.
Das wäre ein POC, den du machen müsstest.

Bei "meinen" PDFs kommt raus, dass zwar die meisten PDFs
  • genau einmal ein Vorkommnis des Strings "/Count" am Zeilenanfang haben
  • und das auch dahinter lesbar eine Zahlenangabe im Klartext steht (siehe gleich).
01.
>findstr /B /C:"/Count" *.pdf 
02.
it_training-biber_faq.pdf:/Count 1005 
03.
Oracle_SQL_Tuning_Tools.pdf:/Count 13 
04.
db2cert7015-a4.pdf:/Count 30 
05.
VeranstaltungskalenderNeuwülferode2009.pdf:/Count 2 
06.
db2_trigger.pdf:/Count 6
....soweit die gute Nachricht

Aber andere PDFs haben eben
  • irgendwo zwar nur eine Fundstelle "/Count", aber NICHT am Anfang einer Zeile
  • oder zwar MEHRERE "/Count"-Fundstellen mit Werten dahinter, von denen aber nur einziger positiv ist (der ist gleich der Gesamtzahl Seiten) und x mal "/Count -nn" (negativer Wert) ,was wohl vielleicht eine Seitenzahl pro Kapitel sein könnte...(?)


Anyhow... der optimistische Algorithmus aus dem gefundenen Schnipsel oben wird nur mit Glück bei dir passen...
...andererseits...
ein Abfeuern der "Findstr"-Zeile kostet ja nix. wenn eure PDFs so simpel gestrickt sind, dann klappt es ja vielleicht.

---> wenn nicht (also der realistisch zu erwartende Fall), dann solltest du VOR jeglicher Programmierung erstmal eine Suchmaschine deines Vertrauens nach den Details des PDF-Formats befragen ... und/oder nach der Ermittlung der Seiten/Pages in einem PDF-Dokument.

Da wollte ich dir nicht vorgreifen.

Grüße
Biber
Bitte warten ..
Mitglied: listigerTeppich
04.12.2009 um 11:21 Uhr
Hi Biber,


jo, bei einfachen PDFs geht die findstr-Methode wunderbar. Leider werden diese einfachen PDFs noch vor dem Versenden zu einer bzw. mehreren großen PDF mit durchaus bis zu 500MB gemerged. Die Software haut beim mergen auch gleich alle Count Variablen weg...sehr ärgerlich...auch die komplette Seitenzahl is nicht wirklich aufzufinden.

Bei einer Seitenzahl von 4845 sind im Editor lediglich folgende Zeilen zu finden:

.endsteam.endobj.14845
.endsteam.endobj.34845
.endsteam.endobj.124845
.endsteam.endobj.148454

aber auch Werte wie:

.endsteam.endobj.48447

sind vorhanden...ein automatisiertes Auslesen ist also wohl sehr schwierig bis unmöglich... Wenn du noch eine Idee hättest wäre ich dir dankbar, ansonsten muss ich wohl versuchen auf externe Tools (pdftk sieht ja sehr vielversprechend aus) auszuweichen oder die Seitenzahlen vor dem mergen abzugreifen.

Gruß,

Listiger
Bitte warten ..
Mitglied: Biber
04.12.2009 um 17:55 Uhr
Moin ListigerTeppich,

meine Strategie habe ich oben erläutert .
  • Entweder du stellst dich auf den Standpunkt, du hast das passende Werkzeug (VB2008) und die fehlt nur die Dokumentation des PDF-Formates -->dann musst du die suchen
  • oder du sagst "Da frag ich einen, der was davon versteht" bzw. einen der dieses Rad schon erfunden hat -->z.B pdftk

Rein handwerklich wird es ja wohl kein Hexenwerk werden, wenn eine PDF-Format-Dokumentation vorläge.
Aber der Aufwand, da ohne Doku mit Hex-editor und geschärften Sinnen durch ein 500 GByte-PDF zu scrollen auf der Suche nach einem möglicherweise "passenden" Seitenzahlwert..... würde mich abschrecken.

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(3)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Kl. Frage: Log-File schreiben per Batch (3)

Frage von Yauhun zum Thema Batch & Shell ...

Windows Server
gelöst AD-User einer AD-Gruppe auslesen und in ein File schreiben (15)

Frage von Estefania zum Thema Windows Server ...

Ubuntu
gelöst Status Kopiervorgang mit dd in log schreiben (3)

Frage von caspi-pirna zum Thema Ubuntu ...

VB for Applications
gelöst PDF Datei auslesen und per VBA in Excel schreiben (3)

Frage von Julian8990 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...