IText Apllet Firmar PDF ¿guardar en servidor?

Gente como están?

Soy nuevo en el foro!, y muy nuevo en el Mundo JAVA, diría que toco de oído (desarrolle este Applet Googlendo).

Les planteo mi caso, con el apllet logré acceder al KeyStore Microsoft-MY y traer el listado de alias!, leer el documento almacenado en el server, generado con FPDF, protegido con clave(por un tema de privacidad), luego estamparle la firma, la firma solicita clave, genera el pdf correctamente, y lo guarda en la pc de usuario, (aqui esta mi problema),
¿¿Cómo puedo hacer para que lo guarde en el server directamente??.

aqí dejo el código del applet

package applet;

import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.OcspClientBouncyCastle;
import com.itextpdf.text.pdf.PdfDate;
import com.itextpdf.text.pdf.PdfDictionary;
import com.itextpdf.text.pdf.PdfName;
import com.itextpdf.text.pdf.PdfPKCS7;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfSignature;
import com.itextpdf.text.pdf.PdfSignatureAppearance;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfString;
import java.applet.Applet;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URL;
import java.security.*;
import java.security.AccessController;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import java.util.Enumeration;
import java.util.GregorianCalendar;
import java.util.List;
import javax.security.auth.x500.X500Principal;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import sun.security.util.ObjectIdentifier;
import sun.security.x509.CertificatePoliciesExtension;
import sun.security.x509.CertificatePolicyId;
import sun.security.x509.PolicyInformation;
import sun.security.x509.X509CertImpl;

public class FirmarPDF extends Applet
{
private PdfReader reader;
private FileOutputStream fout;
private PdfStamper stp;
private PdfSignatureAppearance sap;
public void init()
{
}

public void run()
{
}

public void start()
{
}
public String AppletFirmaPDF(final String cert, final String passwd, final String filesigner, final String fileout)
throws Exception
{

String firma = (String)AccessController.doPrivileged(new PrivilegedAction()
{
public Object run()
{
try {
return FirmarPDF.this.FirmarPDF(cert, passwd, filesigner, fileout);
} catch (Exception ex) {
System.out.println("Error en la firma: " + ex.getMessage());
}
return "false no firmo";
}
});
return firma;
}

public String FirmarPDF(final String cert, String passwd, String filesigner, String fileout)
throws Exception
{

try
{
String keyStoreName = "Windows-MY";
KeyStore keyStore = KeyStore.getInstance(keyStoreName);
keyStore.load(null, null);
String alias = cert;
String pwd = passwd;
PrivateKey key = (PrivateKey)keyStore.getKey(alias, pwd.toCharArray());
Security.addProvider(new BouncyCastleProvider());
URL url = new URL(getDocumentBase(),"rhrecibo.pdf");
URL document_to_sign = url;

String document_signed = "c:\\rhrecibo_signed.pdf";
final String document_protect_pwd = "Ryaco S.A.";
System.out.println(document_to_sign);
Certificate[] chain = keyStore.getCertificateChain(alias);
PdfReader reader = new PdfReader(document_to_sign ,document_protect_pwd.getBytes());
FileOutputStream fout = new FileOutputStream(document_signed);
PdfStamper stp = PdfStamper.createSignature(reader, fout, '\000');
PdfSignatureAppearance sap = stp.getSignatureAppearance();
sap.setCrypto(key, chain, null, PdfSignatureAppearance.WINCER_SIGNED);
sap.setReason("I'm the author");
sap.setLocation("Ryaco S.A");
Rectangle rect = new Rectangle(300.0F, 25.0F, 410.0F, 75.0F);
sap.setVisibleSignature(rect, 1, null);
stp.setEncryption(document_protect_pwd.getBytes(), document_protect_pwd.getBytes(), 2052, true);
stp.close();

} catch (Exception ex) {
System.out.println(ex.getMessage());
return ex.getMessage();
}

return "documento firmado correctamente";
}
public String[] AppletGetAliasCertificates()
throws Exception
{
String[] alias = (String[])(String[])AccessController.doPrivileged(new PrivilegedAction()
{
@Override
public Object run()
{
try {
return FirmarPDF.this.obtenerAliasCertificados();
} catch (Exception ex) {
System.out.println("Error en la firma");
}
return "";
}
});
return alias;
}

public String[] obtenerAliasCertificados()
throws Exception
{
String[] certs = FirmarPDF.this.getCertificatesAliases();

for (int i = 0; i < certs.length; i++) {
certs[i] = new String(certs[i] + "[ENDSTRING]");
}
return certs;
}

private String[] getCertificatesAliases()
throws Exception
{
KeyStore keyStore = KeyStore.getInstance("Windows-MY");
keyStore.load(null, null);

Enumeration elist = keyStore.aliases();
int count = 0;
while (elist.hasMoreElements()) {
elist.nextElement();
count++;
}

String[] alist = new String[count];

elist = keyStore.aliases();
count = 0;

while (elist.hasMoreElements()) {
alist[count] = new String(((String)elist.nextElement()).toString());
System.out.println(alist[count]);
count++;
}

return alist;
}
}