Verfasst am: 05.11.2011, 04:41
Titel: Daten in Form von Tabellen und Plots als PDF exportieren
Hey Matlab-Freunde,
ich habe des öfteren im Forum gelesen, dass sich so ein mancher mit dem exportieren von Daten bzw. Figures mit den entsprechenden Daten in ein gängiges Format wie pdf schwer tut. Durchaus ist mir keine gängige Methode, wie z.B. in Java bekannt, soetwas in gescheiter Qualität mit den uicontrols bzw. uitables etc. zu verwirklichen (vll kennt ja der ein oder andere doch eine Möglichkeit?!). Meist sieht das Ergebnis unscharf aus und dabei möchte man es ja nicht belassen.
Im Prinzip kann man mit ein bißchen Aufwand mittels axes-, line - und text - Objekten viel verwirklichen. Voraussetzung dafür ist, dass man diese mühsam positioniert. Der Vorteil ist aber, dass man alles wie man möchte Mischen kann und dadurch recht flexibel ist. Soll heißen Plots, Textpassagen, Tabellen etc. sind so in gescheiter Qualität erstellbar. Auch die Erstellung von mehrseitigen pdfs ist möglich. Allerdings nicht ohne vorher eine bereits nützliche Funktion (ps2pdf) vom MFE herunterzuladen (darauf gehe ich jetzt aber nicht näher ein, denn das ist recht gut in der Funktion vom MFE erklärt).
Der im Folgenden aufgeführte Quellcode führt jetzt nicht zu einem Designpreis, allerdings ist zu erkennen, dass eine übersichtliche Gestaltung mit relativ wenig Aufwand möglich ist.
Was ich nicht mit reingenommen habe, da dies ja nur ein Beispiel ist, sind Kopf- Und Fußzeilen, die man auch einfach mit den oben genannten Objekten erstellen und platzieren kann. Beispielsweise kann man als Kopfzeile ein Firmenlogo (z.B. jpg) oder what ever in eine dafür vorgesehene axes im oberen figure Bereich einfügen.
Auf jeden Fall sollte man während der Erstellung einer zu exportierenden figure das Property Visible auf on stellen, damit man auch sieht wo die ganzen Objekte landen, die man mittels Koordinaten platziert. Wenn man dann fertig ist kann man diese auf off stellen damit der User nicht sieht was da passiert.
% Namen der Messungen
x = zeros(1,10);% x-Koordinaten
y= [9:-1:0]*.09;% y-Koordinaten text(x,y,data_names,'Color','k','Parent',TableAxes,'FontName',font_art,'FontSize',font_size2,'FontWeight','bold');
% Messdaten
x = bsxfun(@times,ones(10,9),[2:10].*.1);% x-Koordinaten
y = bsxfun(@times,ones(10,9),[9:-1:0]'.*.09);% y-Koordinaten for n=1:10 text(x(n,:),y(n,:),data_table1(n,:),'Color','k','Parent',TableAxes,'FontName',font_art,'FontSize',font_size2,'HorizontalAlignment','right');
end
% Linien einzeichnen
x = [zeros(9,1)ones(9,1)];% x-Koordinaten
y = [[1:9]'*.09-.05[1:9]'*.09-.05];% y-Koordinaten for n=1:9 line(x(n,:),y(n,:),'Parent',TableAxes,'Color','k') end
try% wenn Acrobat installiert ist print(h1, '-dpdf', '-r300', 'test.pdf');
winopen('test.pdf') catch %#ok sonst wird der matlab printpreview geöffnet (der alles andere als komfortabel ist)
uiwait(printpreview(h1)) end delete(h1) end
Auch eine Art row stripping bei der Tabelle ist möglich indem man einfach die Textobjekte von geraden und ungeraden Zeilen in unterschiedlichen Farben erstellt.
Wenn man sich ein bißchen mehr mühe bei der Gestaltung gibt wie ich in diesem Fall, kann man ganz ansehnliche Dokumente erstellen.
Ich hoffe dies hilft dem einen oder anderen weiter...
so etwas habe ich schon lange gesucht, nachdem ich mir mit dem MatLab Report Generator die Zähne ausgebissen hatte.
Nun brauche ich schnell nochmal Deine Hilfe (denn ich bin ein amateurhafter Anfänger).
Dieses mitgelieferte Programm werde ich nun als function in mein GUI-Programm hineinkopieren.
Frage 1:
Wie kriege ich nun den Inhalt meines GUI-Axes "ax_Bild" mit samt allen Kurven und Formatierungen in Deine PDF-Function?
Frage 2:
Wie bekomme ich eine zweidimensionale Matrix "mat_result" (10 Zeilen, 3 Spalten) aus meinem GUI-Programm in Deine PDF-Function ?
Vielen Dank und Lob
EB
_________________
Ich habe mich nicht mit Ruhm bekleckert, dafür aber andere.
Meine Hobbies,
bunt zuschauen und rhytmisch zuhören!
mittels copyobj kannst du dann deine axes 1 zu 1 in die Figure kopieren, aus der eine pdf werden soll (in meinem Fall h1). Natürlich müsstest du dann schauen wie du diese am besten auf die figute platzierst d.h. die Position müsstest du natürlich noch anpassen und ggf auch die Units damit es einheitlich wird und du besser beurteilen kannst wie groß der Seitenrand o.ä. sein soll.
Verfasst am: 21.11.2011, 15:47
Titel: den A4-Ausdruck im Querformat
Hallo Marco H,
habe Deinen Code ausprobiert, nicht schlecht, aber ich bin auf ein paar Probleme gestoßen
Mein Hauptproblem:
Wie kann ich ein A4 ... im Querformat erzeugen und ausdrucken?
Mein zweites Problem:
Wie weiß Matlab, dass
mit der 1. Zeile ..bsxfun(..) eine OneMatrix spaltenweise und
mit der 2. Zeile ..bsxfun(..) eine OneMatrix zeilenweise multipliziert werden soll?
Mein drittes Problem:
Was ist uin Deinem Code jeweils der Index für Tabellenspalte und Tabellenzeile?
Ich komme aus der Delphiecke, dort sind Zeilen- und Spaltenindes umgedreht deshalb komme ich bei Matlab immer total durcheinander.
Vielen Dank
EB
_________________
Ich habe mich nicht mit Ruhm bekleckert, dafür aber andere.
Meine Hobbies,
bunt zuschauen und rhytmisch zuhören!
zu 1.: siehe doc figure (Position anpassen und PaperOrientation auf landscape)
zu 2.: siehe doc bsxfun (Matrix A und Matrix B müssen entweder gleiche Dimensionen haben bzw. Spalte oder Zeilenanzahl muss 1 sein)
zu 3.: n ist der Zeilenindex. d(row,column). Auch dies ist in der Hilfe beschrieben...
Setz doch einfach mal die figure auf visible on und debugge eine for schleife, dann siehst du genau was da vor sich geht.
Du musst für jede zu erstellende Seite eine figure erstellen, wie du es ja jetzt mit deiner einen Seite gemacht hast (also z.B. mit einer Schleife). Dann kannst du diese mittels print als postscript Datei speichern. Hierbei gibt es den Befehl append (doc print) z.B.
Wenn du alle figures "geprintet" hast kannst du mittels ps2pdf die ps Datei in eine pdf- Datei umwandeln. Dabei musst du allerdings darauf achten was für eine Matlab Version du hast (32, 64 Bit oder soll es kompiliert werden) (ist aber auch in der ps2pdf Datei beschrieben, denn du müsstest ggf. ghostscript installieren).
Greetings
Marco
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.