Browse Source

Neue Icons hinzugefügt, Anleitung weiter geschrieben

main
Stephan Richter 10 months ago
parent
commit
72b8cc562f
  1. 1
      BelegScanner.iml
  2. 135
      doc/manual-de.md
  3. 66
      src/main/java/de/srsoftware/belegscanner/gui/DocTable.java
  4. 374
      src/main/resources/img/trash.dia
  5. BIN
      src/main/resources/img/trash.png
  6. 3
      src/main/resources/translations/Application.de.translation

1
BelegScanner.iml

@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />

135
doc/manual-de.md

@ -7,7 +7,7 @@ Diese Anwendung soll helfen @@ -7,7 +7,7 @@ Diese Anwendung soll helfen
* sich wiederholende Scan-Vorgänge zu erleichtern
* mehrseitige PDFs mit aus gescannten Einzelseiten zu erstellen
### Beispiel 1
### Beispiel 1: wiederkehrendes Dokument mit wechselndem Datum
#### Aufgabenstellung
Die die regelmäig per Brief kommende Lohnsteuerbescheinigung soll als PDF eingescannt
@ -59,13 +59,134 @@ Sofort wird das Speicher-_Schema_ sowie die weiteren Einstellungen geladen. Man @@ -59,13 +59,134 @@ Sofort wird das Speicher-_Schema_ sowie die weiteren Einstellungen geladen. Man
## Platzhalter
Wie schon erwähnt dienen Profile dazu, gleichartige oder ähnliche Dokumente an einem _gleich aufgebauten_ Pfad abzulegen.
_Gleich aufgebaut_ meint dabei, dass zum Beispiel der Pfad zum Ablageodner immer gleich ist, und sich die Dateinamen nur im Datum, dem Betreff oder einer sonstigen Eigenschaft unterscheiden.
Damit aber nicht jedes mal, wenn ein Dokument erfasst werden soll, der Pfad angepasst werden muss gibt es Platzhalter:
Wird in einem Pfad ein Dollarzeichen, gefolgt von einem Wort eingegeben, so wird ein entsprechender Platzhalter mit einem separaten Eingabefeld erzeugt.
### Beispiel 2: Belege mit benutzerdefinierten Platzhaltern
Quittungen von wichtigen Einkäufen sollen archiviert werden.
Die Ablage soll im Ordner „Belege“, nach Jahr und Monat gruppiert abgelegt werden.
Innerhalb des Monats-Ordners sollen die Belege dem folgenden Namen-Schema folgen:
<Tag>-<Monat>-<Jahr> - <Produkt> von <Händler>.
Wenn also am 1.2.2023 ein Gummihuhn im Obi gekaut wurde, soll der Pfad zum Dokument am Ende sein:
`<Benutzerordner>/Belege/2023/02/01.02.2023 - Gummihuhn von Obi.pdf`
Und der Beleg zum Kontinummtransfunktiniator, den man zu Weihnachten von Oma bekommt, soll unter
`<Benutzerordner>/Belege/1987/12/24.12.1987 - Kontinuumtransfunktionator von Oma.pdf` abgelegt werden.
Um das zu erreichen kann man ein neues Profil _Belege_ anlegen und dazu folgenden Pfad eingeben:
`$HOME/$PROFIL/$JAHR/$MONAT/$TAG.$MONAT.$JAHR - $Produkt von $Händler`
Dieser Pfad ist voll mit Platzhaltern:
* das schon bekannte `$HOME` steht für den Benutzerordner
* `$PROFIL` wird durch den Profil-Namen, in diesem Fall _Belege_ ersetzt.
* `$JAHR`, `$MONAT` sind schon von oben bekannt, `$TAG` wird entsprechend durch den Tag des Monats, der im Kalender gewählt ist, ersetzt.
* `$Produkt` und `$Händler` sind sogenannte nutzerdefinierte Platzhalter.
Dadurch muss beim nächsten mal, wenn ein Beleg gescannt wird nur das entsprechende Datum und Profil ausgewählt werden und Produkt und Händler eingetragen werden.
### nutzerdefinierte Platzhalter
Immer wenn im Pfad ein Dollarzeichen ($), gefolgt von einem Wort, verwendet wird, handelt es sich dabei um einen Platzhalter.
Steht das wort nicht für einen → _vordefinierten Platzhalter_, wird automatisch ein _nutzerdefinierter Platzhalter_ erzeugt.
D.h. für das Wort wird ein neues Eingabefeld erzeugt und der Platzhalter wird letztlich durch den Wert des Eingabefeldes ersetzt.
Im letzten Beispiel würden also zwei Eingabefelder erzeugt: eines für _Produkt_ und eines für _Händler_.
Die Platzhalter im Pfad werden dann durch die Werte der Eingabefelder ersetzt.
### vordefinierte Platzhalter
Neben der Möglichkeit neue Platzhalter zu erzeugen können auch folgende vordefinierte Platzhalter benutzt werden:
| Platzhalter | wir ersetzt durch | Beispiel |
|-------------|-----------------------------------------------------------|--------------------------|
| $HOME | Heimatverzeichnis des Benutzers | `/home/christiane_meise` |
| $PROFIL | Name des Profils | `Rechnungen` |
| $SEITE | aktuelle Seitennummer im Projekt | `5` |
| $JAHR | Jahr des im Kalender gewählten Datums | `2023` |
| $MONTH | Monat des im Kalender gewählten Datums (2-stellig) | `08` |
| $Month | Name des im Kalender gewählten Monats | `August` |
| $month | Name des im Kalender gewählten Monats (kleingeschrieben) | `august` |
| $Mon | Kürzel des im Kalender gewählten Monats | `Aug` |
| $mon | Kürzel des im Kalender gewählten Monats (kleingeschrieben) | `aug` |
| $DAY | Tag des im Kalender gewählten Monats (2-stellig) | `27` |
## mehrseitige Dokumente
Alle bisherigen Beispiele gingen davon aus, dass ein Projekt nur aus einer einzelnen Seite besteht.
Oft ist es aber notwendig, mehrere Einzel-Seiten als Bilder abzulegen oder gar ein PDF daraus zu binden.
### Beispiel 3: mehrere Einzel-Seiten
Ein Freund auf Reisen schickt regelmäßig Postkarten, deren Vorder- und Rückseite digitalisiert werden sollen.
Für jede Postkarte soll im Ordner `Post` ein Unterordner für den Monat (ausgeschrieben) und darin für das Datum erzeugt werden.
Darin sollen die Vorder- und Rückseite als `Seite 1.jpg` bzw. `Seite 2.jpg` abgelegt werden.
Hierzu empfiehlt sich folgendes Schema:
`$HOME/Post/$Monat/$TAG.$MONAT/Seite $SEITE`
Wird dann der 18.9. im Kalender und `jpeg` als Format gewählt, so würde die erste gescannte Seite als
`<Benutzerordner>/Post/September/18.9./Seite 1.jpg` und die zweite als `<Benutzerordner>/Post/September/18.9./Seite 2.jpg` gespeichert.
### Beispiel 4: mehrseitiges PDF
Eine Bank schickt monatlich Kontoauszüge, die mehrere Seiten lang sein können.
Diese sollen unter `Kontoauszüge/<Jahr>/<Jahr>-<Monat> Kontoauszug.pdf` abgelegt werden.
Hier empfielt es sich, ein Profil `Kontoauszug` anzulegen und folgenden _Pfad_ zu setzen:
`$HOME/Kontoauszuüge/$JAHR/$JAHR-$MONAT - $PROFIL $SEITE`.
Das `$PROFIL` im Pfad wird durch den Profil-Namen `Kontoauszug` ersetzt werden.
Der Platzhalter `$SEITE` ist notwendig, da das Einscannen Seite für Seite erfolgt und die einzelnen Seiten erstmal unter verschiedenen Namen abgelegt werden – diese Seitennummer kann beim nachfolgenden Binden des PDFs entfernt werden, dazu gleich mehr.
Um den mehrseitigen Kontoauszug für März 2023 zu scannen muss man also einen Tag im März 2023 im Kalender und
das Profil `Kontoauszug` und als Typ `pdf` oder `pdf+ocr` auswählen.
Beim ersten Klick auf _Scannen_ wird dann im oberen Bereich der Anwendung
ein Projekt `<Benutzerordner>/Kontoauszuüge/2023/2023-03 - Kontoauszug [Seite]` angelegt
und nach dem Scannen eine Datei `2023-03 - Kontoauszug 1.pdf` erzeugt.
Beim nächsten Klick dann die Datei `2023-03 - Kontoauszug 2.pdf` und so weiter.
<img src="../src/main/resources/img/join.png" style="height: 50px; float: right;" />
Nachdem alle Seiten des Projektes gescannt wurden, kann in der Projektzeile am oberen Rand der Anwendung der Button _PDFs binden_ derükt werden.
Dies wird alle PDF-Dateien des Projekts (nicht aber die _jpg_-Dateien) zu einem mehrseitigen PDF vereinen.
Wenn der Kontoauszug vorher fünf seiten hatte, die alle gescannt wurden, so wird das gebundene PDF wie folgt benannt:
`2023-03 - Kontoauszug 1…5.pdf`.
Falls die Seitenangabe `1…5` nicht erwünscht ist, kann vor dem Binden die Option `[Seite] beim Zusammenfügen entfernen` gewählt werden.
Dann wäre der Seitenname des gebundenen PDFs `2023-03 - Kontoauszug.pdf`.
### Löschen von einzelnen Seiten beim Scannen
Manchmal passiert es, das man versehentlich eine Seite doppelt scannt oder die aktuelle gescannte Seite nicht richtig ausgerichtet war.
Da jede gescannte Seite im Vorschaufenster angezeigt wird, sollte dies schnell auffallen.
<img src="../src/main/resources/img/trash.png" style="height: 50px; float: right" />
In so einem Fall kann man die letzte Seite des aktuellen Projekts einfach löschen, indem man auf den entsprechenden Button klickt:
## TODOs
* Zusatzfelder zum aktuellen Profile mit speichern
* diese Anleitung vervollständigen
* vordefinierte Platzhalter
* nutzerdefinierte Platzhalter
* Löschen von Profilen
* Beispiele für Profile
* Funktion der Projekt-Knöpfe
* diese Anleitung vervollständigen
* Löschen von Profilen
* Funktion der Projekt-Knöpfe
* Buttons deaktivieren, die von der Logik keinen Sinn ergeben

66
src/main/java/de/srsoftware/belegscanner/gui/DocTable.java

@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory; @@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.MatteBorder;
import java.awt.*;
import java.awt.event.ActionListener;
@ -21,6 +22,11 @@ import java.util.List; @@ -21,6 +22,11 @@ import java.util.List;
import java.util.Optional;
import static de.srsoftware.belegscanner.Application.t;
import static java.awt.Color.black;
import static javax.swing.BorderFactory.createCompoundBorder;
import static javax.swing.BorderFactory.createEmptyBorder;
import static javax.swing.BorderFactory.createLineBorder;
import static javax.swing.BorderFactory.createMatteBorder;
/**
*
@ -29,13 +35,15 @@ import static de.srsoftware.belegscanner.Application.t; @@ -29,13 +35,15 @@ import static de.srsoftware.belegscanner.Application.t;
*
*/
public class DocTable extends JPanel{
private static final Border BOTTOM_LINE = createMatteBorder(0, 0, 1, 0, black);
private static final Border IMAGE_BUTTON = createCompoundBorder(createLineBorder(black),createEmptyBorder(5,5,5,5));
private static final Logger LOG = LoggerFactory.getLogger(DocTable.class);
private static final int IMAGE_HEIGHT = 32;
private static FilenameFilter PAGES = (dir,name) -> name.toLowerCase().endsWith("pdf") && name.toLowerCase().contains("page");
private static int rowCounter = 0;
private static Font btnFont = new Font("Arial", Font.PLAIN, 28);
private final Worker worker;
private Image openDir, joinFiles,preview;
private Image openDir, joinFiles,preview,finish,trash;
private List<Project> projects = new ArrayList<>();
@ -69,8 +77,8 @@ public class DocTable extends JPanel{ @@ -69,8 +77,8 @@ public class DocTable extends JPanel{
buttons.add(button(openDir,t("open folder"),ev -> project.openDir()));
buttons.add(joinButton = button(joinFiles,t("join PDFs"),ev -> worker.join(project)));
buttons.add(button(preview,t("display preview"),ev -> worker.preview(project.lastPage())));
buttons.add(button("✓",t("done"),ev -> drop(this)));
buttons.add(button("❌",t("drop last page"),ev -> worker.preview(project.dropLastPage().lastPage())));
buttons.add(button(trash,t("drop last page"),ev -> worker.preview(project.dropLastPage().lastPage())));
buttons.add(button(finish,t("done"),ev -> drop(this)));
constraints.gridx = 2;
add(buttons,constraints);
@ -122,58 +130,44 @@ public class DocTable extends JPanel{ @@ -122,58 +130,44 @@ public class DocTable extends JPanel{
constraints.insets = new Insets(3, 10, 3, 10);
constraints.gridy = 0;
constraints.gridx = 0;
MatteBorder border = BorderFactory.createMatteBorder(0, 0, 1, 0, Color.black);
JLabel ordner = new JLabel(t("Directory"),SwingConstants.CENTER);
ordner.setBorder(border);
ordner.setBorder(BOTTOM_LINE);
add(ordner,constraints);
constraints.gridx = 1;
JLabel status = new JLabel(t("State"),SwingConstants.CENTER);
status.setBorder(border);
status.setBorder(BOTTOM_LINE);
add(status,constraints);
constraints.gridx = 2;
JLabel actions = new JLabel(t("Actions"),SwingConstants.CENTER);
actions.setBorder(border);
actions.setBorder(BOTTOM_LINE);
add(actions,constraints);
openDir = load("open-dir.png").orElse(null);
joinFiles = load("join.png").orElse(null);
preview = load("preview.png").orElse(null);
finish = load("finish.png").orElse(null);
trash = load("trash.png").orElse(null);
}
private static Optional<Image> load(String name){
try {
openDir = ImageIO.read(getClass().getResource("/img/open-dir.png")).getScaledInstance(41,32,Image.SCALE_SMOOTH);
} catch (IOException e) {
openDir = null;
}
try {
joinFiles = ImageIO.read(getClass().getResource("/img/join.png")).getScaledInstance(32,32,Image.SCALE_SMOOTH);
} catch (IOException e) {
joinFiles = null;
}
try {
preview = ImageIO.read(getClass().getResource("/img/preview.png")).getScaledInstance(32,32,Image.SCALE_SMOOTH);
var path = String.join("/","","img",name);
BufferedImage large = ImageIO.read(DocTable.class.getResource(path));
double height = large.getHeight();
var width = large.getWidth();
double factor = IMAGE_HEIGHT / height;
return Optional.of(large.getScaledInstance((int)(width*factor),IMAGE_HEIGHT,Image.SCALE_SMOOTH));
} catch (IOException e) {
preview = null;
return Optional.empty();
}
}
/**
* helper method to create a button with given label, tooltip and action listener
* @param label
* @param tooltip
* @param listener
* @return
*/
private static JButton button(String label, String tooltip, ActionListener listener) {
JButton btn = new JButton(label);
btn.setFont(btnFont);
btn.setToolTipText(tooltip);
btn.addActionListener(listener);
return btn;
}
private static JButton button(Image image, String tooltip, ActionListener listener) {
JButton btn = new JButton();
if (image != null) btn.setIcon(new ImageIcon(image));
btn.setToolTipText(tooltip);
btn.addActionListener(listener);
btn.setBorder(IMAGE_BUTTON);
return btn;
}

374
src/main/resources/img/trash.dia

@ -0,0 +1,374 @@ @@ -0,0 +1,374 @@
<?xml version="1.0" encoding="UTF-8"?>
<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
<dia:diagramdata>
<dia:attribute name="background">
<dia:color val="#ffffffff"/>
</dia:attribute>
<dia:attribute name="pagebreak">
<dia:color val="#000099ff"/>
</dia:attribute>
<dia:attribute name="paper">
<dia:composite type="paper">
<dia:attribute name="name">
<dia:string>#A4#</dia:string>
</dia:attribute>
<dia:attribute name="tmargin">
<dia:real val="2.8222000598907471"/>
</dia:attribute>
<dia:attribute name="bmargin">
<dia:real val="2.8222000598907471"/>
</dia:attribute>
<dia:attribute name="lmargin">
<dia:real val="2.8222000598907471"/>
</dia:attribute>
<dia:attribute name="rmargin">
<dia:real val="2.8222000598907471"/>
</dia:attribute>
<dia:attribute name="is_portrait">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="scaling">
<dia:real val="1"/>
</dia:attribute>
<dia:attribute name="fitto">
<dia:boolean val="false"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
<dia:attribute name="grid">
<dia:composite type="grid">
<dia:attribute name="dynamic">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="width_x">
<dia:real val="1"/>
</dia:attribute>
<dia:attribute name="width_y">
<dia:real val="1"/>
</dia:attribute>
<dia:attribute name="visible_x">
<dia:int val="1"/>
</dia:attribute>
<dia:attribute name="visible_y">
<dia:int val="1"/>
</dia:attribute>
<dia:composite type="color"/>
</dia:composite>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#d8e5e5ff"/>
</dia:attribute>
<dia:attribute name="guides">
<dia:composite type="guides">
<dia:attribute name="hguides"/>
<dia:attribute name="vguides"/>
</dia:composite>
</dia:attribute>
<dia:attribute name="display">
<dia:composite type="display">
<dia:attribute name="antialiased">
<dia:boolean val="false"/>
</dia:attribute>
<dia:attribute name="snap-to-grid">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="snap-to-object">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="show-grid">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="show-connection-points">
<dia:boolean val="true"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
</dia:diagramdata>
<dia:layer name="Hintergrund" visible="true" connectable="true" active="true">
<dia:object type="Flowchart - Ellipse" version="0" id="O0">
<dia:attribute name="obj_pos">
<dia:point val="15,26"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="14.9,25.9;25.1,30.1"/>
</dia:attribute>
<dia:attribute name="elem_corner">
<dia:point val="15,26"/>
</dia:attribute>
<dia:attribute name="elem_width">
<dia:real val="9.9999999999999982"/>
</dia:attribute>
<dia:attribute name="elem_height">
<dia:real val="4"/>
</dia:attribute>
<dia:attribute name="border_width">
<dia:real val="0.20000000298023224"/>
</dia:attribute>
<dia:attribute name="inner_color">
<dia:color val="#e5e5e5ff"/>
</dia:attribute>
<dia:attribute name="show_background">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="padding">
<dia:real val="0.35355339059327379"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>##</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="20,28.1941"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#ff0000ff"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="1"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
</dia:object>
<dia:object type="Flowchart - Box" version="0" id="O1">
<dia:attribute name="obj_pos">
<dia:point val="15,23"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="14.9,22.9;25.1,28.1"/>
</dia:attribute>
<dia:attribute name="elem_corner">
<dia:point val="15,23"/>
</dia:attribute>
<dia:attribute name="elem_width">
<dia:real val="10"/>
</dia:attribute>
<dia:attribute name="elem_height">
<dia:real val="5"/>
</dia:attribute>
<dia:attribute name="border_width">
<dia:real val="0.20000000298023224"/>
</dia:attribute>
<dia:attribute name="border_color">
<dia:color val="#e5e5e5ff"/>
</dia:attribute>
<dia:attribute name="inner_color">
<dia:color val="#e5e5e5ff"/>
</dia:attribute>
<dia:attribute name="show_background">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="padding">
<dia:real val="0.5"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>##</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="20,25.6941"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000ff"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="1"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
</dia:object>
<dia:object type="Flowchart - Ellipse" version="0" id="O2">
<dia:attribute name="obj_pos">
<dia:point val="15,21"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="14.9,20.9;25.1,25.1"/>
</dia:attribute>
<dia:attribute name="elem_corner">
<dia:point val="15,21"/>
</dia:attribute>
<dia:attribute name="elem_width">
<dia:real val="9.9999999999999982"/>
</dia:attribute>
<dia:attribute name="elem_height">
<dia:real val="4"/>
</dia:attribute>
<dia:attribute name="border_width">
<dia:real val="0.20000000298023224"/>
</dia:attribute>
<dia:attribute name="inner_color">
<dia:color val="#cbd0deff"/>
</dia:attribute>
<dia:attribute name="show_background">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="padding">
<dia:real val="0.35355339059327379"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>##</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="20,23.1941"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#ff0000ff"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="1"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
</dia:object>
<dia:object type="Flowchart - Parallelogram" version="0" id="O3">
<dia:attribute name="obj_pos">
<dia:point val="17,19"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="16.9,18.9;23.1,24.1"/>
</dia:attribute>
<dia:attribute name="elem_corner">
<dia:point val="17,19"/>
</dia:attribute>
<dia:attribute name="elem_width">
<dia:real val="6"/>
</dia:attribute>
<dia:attribute name="elem_height">
<dia:real val="5"/>
</dia:attribute>
<dia:attribute name="border_width">
<dia:real val="0.20000000298023224"/>
</dia:attribute>
<dia:attribute name="inner_color">
<dia:color val="#800080ff"/>
</dia:attribute>
<dia:attribute name="show_background">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="shear_angle">
<dia:real val="70"/>
</dia:attribute>
<dia:attribute name="padding">
<dia:real val="0.5"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string>##</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="20,21.6941"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000ff"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="1"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
</dia:object>
<dia:object type="Standard - Line" version="0" id="O4">
<dia:attribute name="obj_pos">
<dia:point val="15,23"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="14.9,22.9;15.1,28.1"/>
</dia:attribute>
<dia:attribute name="conn_endpoints">
<dia:point val="15,23"/>
<dia:point val="15,28"/>
</dia:attribute>
<dia:attribute name="numcp">
<dia:int val="1"/>
</dia:attribute>
<dia:attribute name="line_width">
<dia:real val="0.20000000298023224"/>
</dia:attribute>
<dia:connections>
<dia:connection handle="0" to="O1" connection="0"/>
<dia:connection handle="1" to="O0" connection="8"/>
</dia:connections>
</dia:object>
<dia:object type="Standard - Line" version="0" id="O5">
<dia:attribute name="obj_pos">
<dia:point val="25,23"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="24.9,22.9;25.1,28.1"/>
</dia:attribute>
<dia:attribute name="conn_endpoints">
<dia:point val="25,23"/>
<dia:point val="25,28"/>
</dia:attribute>
<dia:attribute name="numcp">
<dia:int val="1"/>
</dia:attribute>
<dia:attribute name="line_width">
<dia:real val="0.20000000298023224"/>
</dia:attribute>
<dia:connections>
<dia:connection handle="0" to="O1" connection="4"/>
<dia:connection handle="1" to="O0" connection="0"/>
</dia:connections>
</dia:object>
<dia:object type="Standard - Polygon" version="0" id="O6">
<dia:attribute name="obj_pos">
<dia:point val="19,25.495"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="17.9293,25.4243;22.0707,29.5657"/>
</dia:attribute>
<dia:attribute name="poly_points">
<dia:point val="19,25.495"/>
<dia:point val="20,26.495"/>
<dia:point val="21,25.495"/>
<dia:point val="22,26.495"/>
<dia:point val="21,27.495"/>
<dia:point val="22,28.495"/>
<dia:point val="21,29.495"/>
<dia:point val="20,28.495"/>
<dia:point val="19,29.495"/>
<dia:point val="18,28.495"/>
<dia:point val="19,27.495"/>
<dia:point val="18,26.495"/>
</dia:attribute>
<dia:attribute name="line_color">
<dia:color val="#ff0000ff"/>
</dia:attribute>
<dia:attribute name="inner_color">
<dia:color val="#ff0000ff"/>
</dia:attribute>
<dia:attribute name="show_background">
<dia:boolean val="true"/>
</dia:attribute>
</dia:object>
</dia:layer>
</dia:diagram>

BIN
src/main/resources/img/trash.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

3
src/main/resources/translations/Application.de.translation

@ -15,6 +15,7 @@ Directory : Ordner @@ -15,6 +15,7 @@ Directory : Ordner
display preview : Vorschau anzeigen
drop file : Datei löschen
done : fertig
drop last page : letzte Seite verwerfen
Error code\: {} for {} : Fehlercode: {} für {}
February : Februar
File "{}" does already exist and would be overwritten. Continue? : Die Datei „{}“ existiert bereits. Soll sie überschrieben werden?
@ -25,7 +26,7 @@ help : Hilfe @@ -25,7 +26,7 @@ help : Hilfe
Improve brightness : Helligkeit verbessern
January : Januar
Joining PDFs… : Verbinde PDFs…
join PDFs : PDFs zusammenführen
join PDFs : PDFs binden
July : Juli
Language support : Sprach-Unterstützung
May : Mai

Loading…
Cancel
Save