ubuntuusers.de

Alternative zu scanimage

Status: Gelöst | Ubuntu-Version: Ubuntu 26.04 (Resolute Raccoon)
Antworten |

homer65

(Themenstarter)
Avatar von homer65

Anmeldungsdatum:
8. November 2005

Beiträge: 608

Wohnort: bochum, germany

Werde mich wohl in Geduld üben und weiterhin regelmäßig apt update gefolgt von apt upgrade ausführen.

homer65

(Themenstarter)
Avatar von homer65

Anmeldungsdatum:
8. November 2005

Beiträge: 608

Wohnort: bochum, germany

Hatte doch keine Geduld und habe ein Java Programm zwecks Workaround geschrieben und in das scanner Skript mit eingebaut.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class MyEdit {

	public static void main(String[] args) throws Exception
	{
		File ein = new File("/home/christian/temp.pnm");
		File aus = new File("/home/christian/bild.pnm");
		FileOutputStream wrt = new FileOutputStream(aus);
		FileInputStream rdr = new FileInputStream(ein);
		byte[] cbuf = new byte[1];
		char[] cbufm1 = new char[1];
		char[] cbufm2 = new char[1];
		char[] cbufm3 = new char[1];
		char[] cbufm4 = new char[1];
		char[] cbufm5 = new char[1];
		boolean firstfound = false;
		boolean secondfound = false;
		boolean firstwrite = false;
		int read = rdr.read(cbuf);
		long anzahl = 0;
		while(read == 1)
		{
			anzahl++;
			if (secondfound)
			{
				if (!firstwrite) System.out.println(">" + anzahl);
				wrt.write(cbuf);
				firstwrite = true;
			}
			else
			{
				cbufm5[0] = cbufm4[0];
				cbufm4[0] = cbufm3[0];
				cbufm3[0] = cbufm2[0];
				cbufm2[0] = cbufm1[0];
				cbufm1[0] = (char) (cbuf[0] & 0xFF);
				if (cbufm1[0] == '>')
				{
					if (cbufm2[0] == 'L')
					{
						if (cbufm3[0] == 'M')
						{
							if (cbufm4[0] == 'T')
							{
								if (cbufm5[0] == 'H')
								{
									if (firstfound) secondfound = true;
									else firstfound = true;
									System.out.println(anzahl);
								}
							}
						}
					}
				}
			}
			read = rdr.read(cbuf);
		}
		rdr.close();
		wrt.close();
	}

Maranto

Anmeldungsdatum:
1. Mai 2026

Beiträge: 56

Hatte doch keine Geduld

Moin!,

Sorry, ich weiss nicht was Scanner UI ist?

Mglw. WebUI falls über LAN/WLAN. Ginge ja in die Richtung:

bei dem scanimage fälschlicherweise eine HTML-Seite (oft eine Fehlerseite des Scanners oder Treibers) in die Datei schreibt,

Hatte doch keine Geduld und habe ein Java Programm zwecks Workaround geschrieben

Wieso nimmst Du nicht das "perl -i -pe 's/\A.*?(%PNG)/$1/s' test.png"? Da Du nicht als png scannen willst, sondern pnm, halt anpassen und nach Zeile "sleep 9" rein. Filtert bis "HTML>P" zu clear "P" + Folgend.

perl -i -pe 's/\A.*?HTML>(P)/$1/s' "${ein}"

(</HTML> ginge natürlich auch)

Habe von perl wenig Erfahrung, daher KI genutzt.

homer65

(Themenstarter)
Avatar von homer65

Anmeldungsdatum:
8. November 2005

Beiträge: 608

Wohnort: bochum, germany

Kenne mich mit Pearl leider überhaupt nicht aus. Ebensowenig mit awk und sed und Konsorten. Java geht mit im Gegensatz dazu leichter von der Hand.

Ich glaube auch nicht, das das Pearl Skript auf meine Situation zutrifft.

Und ja der Scanner ist per LAN angeschlossen.

Maranto

Anmeldungsdatum:
1. Mai 2026

Beiträge: 56

Ich glaube auch nicht, das das Pearl Skript auf meine Situation zutrifft.

Komische Aussage, lässt sich doch überprüfen. Da vmtl. das Shell Script von Dir ist, kein Thema, wie.

homer65

(Themenstarter)
Avatar von homer65

Anmeldungsdatum:
8. November 2005

Beiträge: 608

Wohnort: bochum, germany

Maranto schrieb:

Ich glaube auch nicht, das das Pearl Skript auf meine Situation zutrifft.

Komische Aussage, lässt sich doch überprüfen. Da vmtl. das Shell Script von Dir ist, kein Thema, wie.

Ok, haben folgendes auf der Kommandozeile ausprobiert.

1
perl -i -pe 's/\A.*?HTML>(P)/$1/s' /home/christian/temp.pnm

Es läßt die Datei unverändert. Also ⇒ Funktioniert so nicht.

Habe wie schon gesagt überhaupt keine Ahnung von Pearl und möchte mich damit auch nicht beschäftigen.

homer65

(Themenstarter)
Avatar von homer65

Anmeldungsdatum:
8. November 2005

Beiträge: 608

Wohnort: bochum, germany

Habe das Java Programm nochmals angepasst und flexibler gestaltet:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class MyEdit {

	public static void main(String[] args) throws Exception
	{
		String sein = "/home/christian/temp.pnm";
		String saus = "/home/christian/bild.pnm";
		File ein = new File(sein);
		File aus = new File(saus);
		FileOutputStream wrt = new FileOutputStream(aus);
		FileInputStream rdr = new FileInputStream(ein);
		byte[] cbuf = new byte[1];
		char[] cbufm1 = new char[1];
		char[] cbufm2 = new char[1];
		char[] cbufm3 = new char[1];
		char[] cbufm4 = new char[1];
		char[] cbufm5 = new char[1];
		int found = 0;
		int read = rdr.read(cbuf);
		while(read == 1)
		{
			cbufm5[0] = cbufm4[0];
			cbufm4[0] = cbufm3[0];
			cbufm3[0] = cbufm2[0];
			cbufm2[0] = cbufm1[0];
			cbufm1[0] = (char) (cbuf[0] & 0xFF);
			if (cbufm1[0] == '>')
			{
				if (cbufm2[0] == 'L')
				{
					if (cbufm3[0] == 'M')
					{
						if (cbufm4[0] == 'T')
						{
							if (cbufm5[0] == 'H')
							{
								found++;
								System.out.println("Found: " + found);
							}
						}
					}
				}
			}
			read = rdr.read(cbuf);
		}
		rdr.close();
		wrt.close();
		File einx = new File(sein);
		File ausx = new File(saus);
		FileOutputStream wrtx = new FileOutputStream(aus);
		FileInputStream rdrx = new FileInputStream(ein);
		int readx = rdrx.read(cbuf);
		while(readx == 1)
		{
			if (found <= 0)
			{
				wrtx.write(cbuf,0,1);
			}
			cbufm5[0] = cbufm4[0];
			cbufm4[0] = cbufm3[0];
			cbufm3[0] = cbufm2[0];
			cbufm2[0] = cbufm1[0];
			cbufm1[0] = (char) (cbuf[0] & 0xFF);
			if (cbufm1[0] == '>')
			{
				if (cbufm2[0] == 'L')
				{
					if (cbufm3[0] == 'M')
					{
						if (cbufm4[0] == 'T')
						{
							if (cbufm5[0] == 'H')
							{
								found--;
								System.out.println("Found: " + found);
							}
						}
					}
				}
			}
			readx = rdrx.read(cbuf);
		}
		rdrx.close();
		wrtx.close();
	}
}

DoktorSeltsam

Anmeldungsdatum:
11. Februar 2007

Beiträge: 735

Wohnort: Hamburg

Mein Rat für eine Lösung ohne java wäre, statt convert/ImageMagick das viel schnellere img2pdf zu verwenden. Hier mal mein Script zum Scannen einer A4-Seite mit meinem ScanSnap ix500:

#!/bin/bash
set -e

OUTPUT=$(date +%Y%m%d%H%M%S).pdf
SCANDIR=$(mktemp -d)
OUTPUTDIR='/tmp'

cd "$SCANDIR"

#A4
scanimage --source 'ADF Duplex' --page-width 210 --page-height 297 -y 297 -x 210 -b --format jpeg --mode Color  --buffermode On -d 'fujitsu:ScanSnap iX500:1559390' --resolution 300 --brightness 20 --swskip 5% 


img2pdf $(find . -iname '*.jpg' | sort -V) -o "$OUTPUTDIR"/"$OUTPUT"

rm "$SCANDIR"/*.jpg
rm -r "$SCANDIR"

Ich verwende hier nicht das pnm-Format, sondern jpeg. Es funktioniert auch mit pnm, wenn man das als Format vorgibt (oder den Parameter ganz weglässt, dann ist pnm Standard). Und natürlich die extension im find- und rm-Befehl auf jpg ändern. Im Vergleich ergibt sich hier bei einem Testscan einer A4-Seite mit pnm ein 4,4 MB großes pdf, während es mit jpeg nur 640 kB sind. Qualitätsunterschiede sehe ich nicht!

DoktorSeltsam

Anmeldungsdatum:
11. Februar 2007

Beiträge: 735

Wohnort: Hamburg

Nachtrag: wenn man pnm statt jpeg verwendet, werden die erzeugten pdf-Seiten um den Faktor von ca. 3,1 zu groß. Ob nun scanimage mit den Seitengrößen bei pnm nicht zurechtkommt, oder ob es ein Fehler von img2pdf ist, konnte ich noch nicht klären. Ich sehe aber keinen Vorteil von pnm und bleibe bei jpeg!

Antworten |