feat(scan): support iX1600 duplex scanning on Linux

This commit is contained in:
2026-09-17 18:22:43 +02:00
parent cfef07b96d
commit dd37622bb6
24 changed files with 1411 additions and 215 deletions

View File

@@ -27,6 +27,7 @@ const editState = reactive({
resolution: 300,
mode: "Color",
source: "",
paperSize: "A4",
postprocess: false,
postprocessProfile: "document",
})
@@ -64,10 +65,18 @@ const applyAgentToForm = (agent: InstanceAgent | null) => {
editState.resolution = Number(agent.scanDefaults?.resolution || 300)
editState.mode = agent.scanDefaults?.mode || "Color"
editState.source = agent.scanDefaults?.source || ""
editState.paperSize = agent.scanDefaults?.paperSize || "A4"
editState.postprocess = Boolean(agent.scanDefaults?.postprocess)
editState.postprocessProfile = agent.scanDefaults?.postprocessProfile || "document"
}
const applyIx1600Preset = () => {
Object.assign(editState, {
format: "pdf", resolution: 300, mode: "Color", source: "ADF Duplex",
paperSize: "A4", postprocess: false, postprocessProfile: "document"
})
}
watch(selectedAgent, (agent) => applyAgentToForm(agent), { immediate: true })
const loadAgents = async () => {
@@ -130,6 +139,10 @@ const createAgent = async () => {
const saveAgent = async () => {
if (!selectedAgent.value) return
if (/adf|document feeder/i.test(editState.source) && editState.format !== "pdf") {
toast.add({ title: "Für Einzug- und Duplex-Scans bitte PDF wählen", color: "error" })
return
}
saving.value = true
@@ -144,6 +157,7 @@ const saveAgent = async () => {
resolution: Number(editState.resolution || 300),
mode: editState.mode,
source: editState.source || null,
paperSize: editState.paperSize,
postprocess: editState.postprocess,
postprocessProfile: editState.postprocessProfile,
},
@@ -315,6 +329,10 @@ onMounted(async () => {
/>
</UFormField>
<UButton color="neutral" variant="soft" @click="applyIx1600Preset">
ScanSnap iX1600: A4, Duplex, PDF
</UButton>
<div class="grid gap-3 sm:grid-cols-2">
<UFormField label="Format">
<USelectMenu
@@ -342,6 +360,13 @@ onMounted(async () => {
</UFormField>
</div>
<UFormField label="Papierformat">
<USelectMenu v-model="editState.paperSize" :items="[
{ label: 'A4', value: 'A4' }, { label: 'Letter', value: 'Letter' },
{ label: 'Scanner-Vorgabe', value: 'auto' }
]" value-key="value" label-key="label" />
</UFormField>
<div class="grid gap-3 sm:grid-cols-[auto_minmax(0,1fr)]">
<UCheckbox v-model="editState.postprocess" label="OpenCV-Nachbearbeitung" />
<UFormField label="Profil">