Dies ist wahrscheinlich nicht die Lösung, die Sie suchen:
Sie können z. B. LaTeX verwenden, um dies zu erreichen. Sie müssen die TeX-Datei auf andere Weise erzeugen, z. B. in Ihrer bevorzugten Programmiersprache. Dazu müssen Sie wissen, wie Sie programmieren, LaTeX verwenden und natürlich die erforderlichen Tools installieren.
Wenn Sie interessiert sind, kann ich dies näher erläutern und Beispielskripte hinzufügen.
Bearbeiten:
Ich habe ein kleines FreeBASIC-Programm erstellt (etwas schmutzig, aber erledigt die Aufgabe), um die .tex-Datei zu erzeugen. Diese kann dann zur Erstellung der endgültigen PDF-Datei verwendet werden, z. B. mit Miktex und TexnicCenter.
- Laden Sie den FreeBASIC-Compiler von http://www.freebasic.net/ herunter und extrahieren Sie ihn (ich habe ihn verwendet
FreeBASIC-1.05.0-win64.zip
). - Speichern Sie den folgenden Code als Beispiel
code.bas
und kompilieren Sie ihn mitfbc.exe code.bas
. - Ziehen Sie die Ordner "Report 1", "Report 2" usw. auf die neue ausführbare Datei
code.exe
. Dadurch werden die Dateien "Report 1.tex", "Report 2.tex" im jeweiligen Ordner generiert. - Laden Sie Miktex von http://www.miktex.org/ (aktivieren Sie die sofortige Installation von Paketen während des Setups) und TexnicCenter von http://www.texniccenter.org/download/ herunter, und installieren Sie die Berichtsdateien in TexnicCenter . Ich bin nicht sicher, ob Sie Änderungen an den Standardeinstellungen vornehmen müssen, aber das Internet ist voll von Ressourcen. Beim Kompilieren
LaTeX -> PDF
sollten die fehlenden Pakete installiert werden.
Quellcode: Verarbeitet explizit die erwähnte Ordnerstruktur und Dateinamen und nichts weiter.
' Drag and drop folders onto the executable in order to generate a .tex-file ' which can be used to merge the pdfs in each passed folder using LaTeX. ' #include "vbcompat.bi" sub expandEnviron__isFileOrFolder ( byref strPath as string ) dim iLetter as integer if left(strPath,1)="%" then for iLetter=2 to len(strPath) if mid(strPath,iLetter,1)="%" then strPath=environ(mid(strPath,2,iLetter-2))+right(strPath,len(strPath)-iLetter) exit for end if next iLetter end if end sub function isFileOrFolder ( byref strPath as string, byval expPath as string ptr = 0 ) as integer ' return value: ' 0: path doesn't exist ' 1: file ' 2: folder ' dim strDir as string = curdir dim as string strPathCopy dim as string ptr pPath if expPath then *expPath = strPath expandEnviron__isFileOrFolder(*expPath) pPath = expPath else strPathCopy = strPath expandEnviron__isFileOrFolder(strPathCopy) pPath = @strPathCopy end if if fileExists(*pPath) then return 1 elseif ( chdir(*pPath) = 0 ) then chdir(strDir) return 2 else return 0 end if end function color(1,15) cls if command(1) = "" then print "Drag and drop folders onto the executable." sleep end end if dim as string basedir dim as string strPath = "" dim as integer i = 1 ' Process all command line arguments i.e process all folders. while command(i) <> "" basedir = command(i) dim as string basedirName ' Make sure the argument is indeed a folder. if isFileOrFolder(basedir,@strPath) = 2 then if right(strPath,1) = "\" then basedir = left(strPath,len(strPath)-1) basedirName = right(basedir,len(basedir)-instrrev(basedir,"\")) print "" print baseDirName ' ' Print some LaTeX commands. open basedir+"\"+baseDirName+".tex" for output as #1 print #1, $"\documentclass" print #1, $"\usepackage" print #1, $"\usepackage" print #1, $"\usepackage" print #1, $"\hypersetup" print #1, $"\begin" print #1, $"\pagestyle" print #1, $"\pagenumbering" print #1, "%" ' ' Process contents.pdf. dim as string tmp = basedir+"\contents.pdf" if isFileOrFolder(tmp) = 1 then print #1, $"\includepdf[pages=-]" else color(12,15):print chr(9);"missing contents.pdf":color(1,15) end if ' ' Process execsummary.pdf. tmp = basedir+$"\execsummary.pdf" if isFileOrFolder(tmp) = 1 then print #1, $"\includepdf[pages=-]" else color(12,15):print chr(9);"missing execsummary.pdf":color(1,15) end if ' ' Process all subfolders named "chapter 1", "chapter 2" etc. ' If "chapter 4" exists but "chapter 3" does not, then "chapter 4" and ' all after that will be ignored. dim as integer chapter_link_cnt = 0 dim as integer j = 1 dim as string nextChapterDir = basedir+$"\chapter "+str(j) while isFileOrFolder(nextChapterDir) = 2 print #1, "%" dim as integer k = 1 ' ' Process all files named "page 1", "page 2" etc. dim as string nextPage = nextChapterDir + $"\page "+str(k)+".pdf" while isFileOrFolder(nextPage) = 1 if k = 1 then chapter_link_cnt += 1 print #1, $"\includepdf[link,linkname=l";str(chapter_link_cnt); _ ",pages=-]" print #1, $"\bookmark[dest=l";str(chapter_link_cnt); _ ".1]" else print #1, $"\includepdf[pages=-]" end if k += 1 nextPage = nextChapterDir + $"\page "+str(k)+".pdf" wend j += 1 nextChapterDir = basedir+$"\chapter "+str(j) wend ' print #1, $"\end" close #1 else print "" color(12,15):print "Error (not a folder): ";command(i):color(1,15) end if i += 1 wend print "" print "" print "Done." sleep
Falls Sie eine andere Sprache verwenden möchten (vielleicht kann dies mit einem Powershell-Skript gemacht werden), finden Sie hier eine Beispieltextdatei:
\documentclass \usepackage \usepackage \usepackage \hypersetup \begin \pagestyle \pagenumbering % \includepdf[pages=-] \includepdf[pages=-] % \includepdf[link,linkname=l1,pages=-] \bookmark[dest=l1.1] \includepdf[pages=-] % \includepdf[link,linkname=l2,pages=-] \bookmark[dest=l2.1] \includepdf[pages=-] % \includepdf[link,linkname=l3,pages=-] \bookmark[dest=l3.1] \includepdf[pages=-] \includepdf[pages=-] \includepdf[pages=-] \end