Подключитесь к принтеру-сканеру с помощью JAVA.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Подключитесь к принтеру-сканеру с помощью JAVA.

Сообщение Anonymous »

Я пытаюсь разработать решение, которое позволит мне подключиться к принтеру и получить отсканированный документ через сканер принтера. Единственная проблема заключается в том, что когда я хочу получить доступ к принтерам, подключенным через сеть или общие ресурсы, я не могу подключиться напрямую. Чтобы сделать это, я попробовал несколько библиотек, таких как Twain, Morena и одну от mmscomputing, но ничего не смог добиться, я мог получить только реализацию с Morena, но если ПК был подключен через USB к принтер. Я не знаю, сможет ли кто-нибудь помочь мне с объяснением или инструментом, который позволит мне легче реализовать это. Заранее большое спасибо, я приложил код, который использовал с Мореной, и он работает, но только через USB.

Код: Выделить всё

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.awt.image.ImageConsumer;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.AbstractAction;
import javax.swing.JApplet;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.WindowConstants;
import javax.swing.border.LineBorder;
import javax.swing.filechooser.FileFilter;

import SK.gnome.morena.Morena;
import SK.gnome.morena.MorenaImage;
import SK.gnome.morena.MorenaSource;
import SK.gnome.twain.TwainSource;
import SK.gnome.twain.TwainSource.Frame;

public class ScannerApp extends JApplet
{ private static class MainPanel extends JPanel
{ private JTextField status = new JTextField();
private ImagePanel selected=null;
private SaveImageAction saveImageAction;
private UploadImageAction uploadImageAction;
private MouseListener mouseListener=new MouseListener();
private boolean hasServer=false;
private URL documentBase=null;

private class RemoveAllAction extends AbstractAction implements Runnable
{ RemoveAllAction()
{ super("remove all");
}

public synchronized void actionPerformed(ActionEvent event)
{ new Thread(this).start();
}

public synchronized void run()
{ removeAll();
select(null);
repaint();
}
}

private class AcquireImageAction extends AbstractAction implements Runnable
{ AcquireImageAction()
{ super("acquire image");
}

public synchronized void actionPerformed(ActionEvent event)
{ new Thread(this).start();
}

public synchronized void run()
{ try
{ status.setText("Working ...");
MorenaSource source=Morena.selectSource(MainPanel.this);
if (source!=null)
{ source.setColorMode();
source.setResolution(100);
while (true)
{ MorenaImage morenaImage=new MorenaImage(source);
int imageStatus=morenaImage.getStatus();
if (imageStatus==ImageConsumer.STATICIMAGEDONE)
{ int imageWidth=morenaImage.getWidth();
int imageHeight=morenaImage.getHeight();
int imagePixelSize=morenaImage.getPixelSize();
ImagePanel image=new ImagePanel(Toolkit.getDefaultToolkit().createImage(morenaImage));
MainPanel.this.add(image);
select(image);
int size=(int)Math.round(Math.sqrt(getComponentCount()));
setLayout(new GridLayout(size, size));

if (TwainSource.class.isInstance(source))
{
Frame frame=((TwainSource)source).getFrame();
status.setText("Done - actual image frame is ["+Math.round(100*frame.left)/100.0+", "+Math.round(100*frame.top)/100.0+"] - ["+Math.round(100*frame.right)/100.0+", "+Math.round(100*frame.bottom)/100.0+"] ...");
}
else
status.setText("Done - actual image size is "+imageWidth+" x "+imageHeight+" x "+imagePixelSize+" ...");
validate();
if (TwainSource.class.isInstance(source) &&  ((TwainSource)source).hasMoreImages())
continue;
}
else if (imageStatus==ImageConsumer.IMAGEABORTED)
status.setText("Aborted, try again ...");
else if (imageStatus==ImageConsumer.IMAGEERROR)
status.setText("Failed, try again ...");
break;
}
}
else
status.setText("Failed, try again ...");
}
catch (NoSuchMethodError error)
{ JOptionPane.showMessageDialog(MainPanel.this, "Previous version of Morena is installed in "+System.getProperty("java.home")+".\nYou have to remove it first.\nClick OK to terminate browser.", "Error", JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
catch (Throwable exception)
{ JOptionPane.showMessageDialog(MainPanel.this, exception.toString(), "Error", JOptionPane.ERROR_MESSAGE);
exception.printStackTrace();
status.setText("Failed, try again ...");
}
finally
{ try
{ Morena.close();
}
catch (Exception exception)
{ exception.printStackTrace();
}
}
}
}

private class SaveImageAction extends AbstractAction implements Runnable
{ private class Filter extends FileFilter
{ String type;

Filter(String type)
{ this.type=type;
}

public boolean accept(File file)
{ return file.getName().endsWith(type);
}

public String getDescription()
{ return type+" Files";
}
}

SaveImageAction()
{ super("save to file");
}

public void actionPerformed(ActionEvent event)
{ new Thread(this).start();
}

public synchronized void run()
{ try
{ status.setText("Working ...");
Image image=selected.getImage();
BufferedImage bufferedImage=new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
bufferedImage.createGraphics().drawImage(image, 0, 0, null);
JFileChooser chooser=new JFileChooser();
//        Java 1.6 introduced a comfortable ImageIO.getWriterFileSuffixes() method.
String e[] = ImageIO.getWriterFormatNames();
for (int i=0; i1024*1024)
throw new Exception("Image is too big to upload");
URL uploadURL=new URL(documentBase, "upload.php");
HttpURLConnection connection=(HttpURLConnection)uploadURL.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setDefaultUseCaches(false);
connection.setRequestProperty("content-type", "img/jpeg");
connection.setRequestProperty("content-length", String.valueOf(contentLength));
OutputStream out=connection.getOutputStream();
out.write(tmp.toByteArray());
out.close();
InputStream in=connection.getInputStream();
int c;
while ((c=in.read())!=-1)
System.err.write(c);
in.close();
URL imageURL=new URL(documentBase, connection.getHeaderField("file-name"));
status.setText("Done - image is uploaded to "+imageURL+" (for at least 5 minutes) ...");
}
catch (Throwable exception)
{ JOptionPane.showMessageDialog(MainPanel.this, exception.toString(), "Error", JOptionPane.ERROR_MESSAGE);
exception.printStackTrace();
status.setText("Failed, try again ...");
}
}

public boolean isEnabled()
{ return hasServer &&  selected != null;
}
}

private class MouseListener extends MouseAdapter
{ public void mouseClicked(MouseEvent event)
{ select((ImagePanel)event.getComponent());
}
}

private class ImagePanel extends JPanel
{ private Image image;
int imageWidth;
int imageHeight;

ImagePanel(Image image)
{ this.image=image;
imageWidth=image.getWidth(null);
imageHeight=image.getHeight(null);
addMouseListener(mouseListener);
}

public Image getImage()
{ return image;
}

public void paint(Graphics g)
{ super.paint(g);
int panelWidth=getWidth()-6;
int panelHeight=getHeight()-6;
double horizontalRatio=(double)panelWidth/imageWidth;
double verticalRatio=(double)panelHeight/imageHeight;
if (horizontalRatio>verticalRatio)
g.drawImage(image, (int)(panelWidth-imageWidth*verticalRatio)/2+3, 3, (int)(imageWidth*verticalRatio), (int)(imageHeight*verticalRatio), this);
else
g.drawImage(image, 3, 3, (int)(imageWidth*horizontalRatio), (int)(imageHeight*horizontalRatio), this);
}

}

private class ToolBar extends JToolBar
{ ToolBar()
{ add(new RemoveAllAction());
addSeparator();
add(new AcquireImageAction());
addSeparator();
add(saveImageAction=new SaveImageAction());
saveImageAction.setEnabled(false);
addSeparator();
add(uploadImageAction=new UploadImageAction());
uploadImageAction.setEnabled(false);
setMargin(new Insets(4, 2, 2, 2));
}
}

private class StatusBar extends JToolBar
{ StatusBar()
{ add(status);
status.setText("Ready ...");
}
}

void select(ImagePanel image)
{ if(selected != null)
selected.setBorder(null);
selected = image;
if(selected != null)
{
selected.setBorder(new LineBorder(Color.blue, 1));
saveImageAction.setEnabled(true);
uploadImageAction.setEnabled(hasServer);
} else
{
saveImageAction.setEnabled(false);
uploadImageAction.setEnabled(false);
}
}

MainPanel(Container container, URL documentBase)
{ this.documentBase=documentBase;
status.setEditable(false);
hasServer=documentBase!=null && documentBase.getProtocol().indexOf("http")!=-1;
container.add(new ToolBar(), BorderLayout.NORTH);
container.add(this, BorderLayout.CENTER);
container.add(status, BorderLayout.SOUTH);
setLayout(new GridLayout(1, 1));
}
}

public void init()
{ new MainPanel(getContentPane(), getDocumentBase());
}

public static void main(String args[])
{ JFrame frame=new JFrame("Morena Studio");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
new MainPanel(frame.getContentPane(), null);
frame.setBounds(100, 100, 600, 400);
frame.setVisible(true);
}
}
Редактировать: если бы это была бесплатная реализация, это было бы невероятно.
Морена: https://www. gnome.sk/Morena/morena.html
Ejemplos
Я пробовал множество реализаций, таких как уже упомянутые, WIA, TWAIN, SANE, и ни одна из них не помогла мне решить эту проблему. бесплатно и с принтерами, подключенными по сети

Подробнее здесь: https://stackoverflow.com/questions/790 ... -with-java
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»