com.lowagie.text.*;
com.lowagie.text.pdf.*;
com.tradise.crypto.CryptoService;
com.tradise.crypto.certificate.CertificateStoreService;
com.tradise.crypto.certificate.data.PrivateKeyCertificateChain;
com.tradise.crypto.certificate.util.CertificateUtil;
com.tradise.crypto.utils.signatureUtils;
java.io.*;
java.security.MessageDigest;
java.util.*;
javax.xml.transform.*;
javax.xml.transform.sax.SAXResult;
javax.xml.transform.stream.StreamSource;
org.apache.commons.io.CopyUtils;
org.apache.commons.io.IOUtils;
org.apache.fop.apps.*;
opcion = -1;
}
String password = "";
PrivateKeyCertificateChain privkey = null;
if(opcion != 0 && opcion != -1 && opcion < 4)
{
CertificateStoreService certStSrv[] = CryptoService.detectCertif
icateStoreServices();
for(int cont = 0; cont < certStSrv.length; cont++)
System.out.println((new StringBuilder()).append(" ").append(
cont).append(" Store").toString());
resp = ConsoleQuery("Seleccione un Store:");
System.out.println((new StringBuilder()).append("resp sel store
:").append(resp).append("<-").toString());
resp = "0";
PrivateKeyCertificateChain privKeys[] = CryptoService.detectCert
ificateStoreServices()[Integer.parseInt(resp)].getPrivateKeyCertificateChains();
System.out.println(" 0 - Sin Certificado");
for(int cont = 0; cont < privKeys.length; cont++)
System.out.println((new StringBuilder()).append(" ").append(
cont + 1).append("-").append(privKeys[cont].getSubjectCommonName()).toString());
resp = ConsoleQuery("Seleccione un certificado:");
System.out.println((new StringBuilder()).append("resp sel certif
icado :").append(resp).append("<-").toString());
if(!"0".equals(resp))
{
privkey = privKeys[Integer.parseInt(resp) - 1];
resp = ConsoleQuery("Seleccione un password:");
password = resp;
}
}
try
{
switch(opcion)
{
case 6: // '\006'
case 7: // '\007'
case 8: // '\b'
case 9: // '\t'
default:
if(false)
;
break;
case 1: // '\001'
testpdf.SignedPDF(documentoAFirmar, documentoFirmado, privke
y, password);
break;
case 2: // '\002'
testpdf.SignedPDF(documentoFirmado, documentoFirmado, privke
y, password);
break;
case 3: // '\003'
SignaturePDF _tmp = testpdf;
SignedTimeStampPDF(documentoAReFirmar, documentoFirmado, pri
vkey, password, "PDFSIGNATURE", "TRADISE");
break;
case 4: // '\004'
testpdf.AttachFilenameToPDF(documentToAttach, pdfTestAttach,
pdfTestAttachResult);
break;
case 5: // '\005'
testpdf.AddPageContent(documentoFirmadoDuplicate1, documento
FirmadoDuplicate2);
break;
case 10: // '\n'
testpdf.generarPDF(xmltotransform, xsltotransform, pdftransf
orm, (new StringBuilder()).append("file:///").append(pathTransform2).toString(),
"nPages", 5);
break;
case 11: // '\013'
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
PdfReader pdf = new PdfReader(documentoFirmadoDuplicate1b);
int numpage = pdf.getNumberOfPages();
pdf.close();
bOut = testpdf.generarPDF(xmltotransform, xsltotransform, (n
ew StringBuilder()).append("file:///").append(pathTransform2).toString(), "nPage
s", numpage);
testpdf.ModifyContent(documentoFirmadoDuplicate1b, documento
FirmadoDuplicate2, bOut.toByteArray());
break;
case 12: // '\f'
xmltotransform = (new StringBuilder()).append(pathTransform)
.append("\\signature.xml").toString();
xsltotransform = (new StringBuilder()).append(pathTransform)
.append("\\signaturePDF.xsl").toString();
pdftransform = (new StringBuilder()).append(pathTransform).a
ppend("\\pdfsignature.pdf").toString();
System.out.println("Modelo 1 Castellano");
testpdf.generarPDF(xmltotransform, xsltotransform, pdftransf
orm, (new StringBuilder()).append("file:///").append(pathTransform2).toString(),
"nPages", 5);
xmltotransform = (new StringBuilder()).append(pathTransform)
.append("\\signature1.xml").toString();
xsltotransform = (new StringBuilder()).append(pathTransform)
.append("\\signaturePDF.xsl").toString();
pdftransform = (new StringBuilder()).append(pathTransform).a
ppend("\\pdfsignature1.pdf").toString();
System.out.println("Modelo 2 Castellano");
testpdf.generarPDF(xmltotransform, xsltotransform, pdftransf
orm, (new StringBuilder()).append("file:///").append(pathTransform2).toString(),
"nPages", 5);
xmltotransform = (new StringBuilder()).append(pathTransform)
.append("\\signature.xml").toString();
xsltotransform = (new StringBuilder()).append(pathTransform)
.append("\\signaturePDF_ca.xsl").toString();
pdftransform = (new StringBuilder()).append(pathTransform).a
ppend("\\pdfsignature_ca.pdf").toString();
System.out.println("Modelo 1 Catal\341n");
testpdf.generarPDF(xmltotransform, xsltotransform, pdftransf
orm, (new StringBuilder()).append("file:///").append(pathTransform2).toString(),
"nPages", 5);
xmltotransform = (new StringBuilder()).append(pathTransform)
.append("\\signature1.xml").toString();
xsltotransform = (new StringBuilder()).append(pathTransform)
.append("\\signaturePDF_ca.xsl").toString();
pdftransform = (new StringBuilder()).append(pathTransform).a
ppend("\\pdfsignature1_ca.pdf").toString();
System.out.println("Modelo 2 Catal\341n");
testpdf.generarPDF(xmltotransform, xsltotransform, pdftransf
orm, (new StringBuilder()).append("file:///").append(pathTransform2).toString(),
"nPages", 5);
break;
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
} while(true);
}
public void SignedPDF(String filenametoSig, String filenameSigned, String ps
w)
{
try
{
CertificateStoreService cStores[] = CryptoService.detectCertificateS
toreServices();
if(cStores.length > 0)
{
PrivateKeyCertificateChain privateKeys[] = cStores[0].getPrivate
KeyCertificateChains();
int idCert = 4;
PrivateKeyCertificateChain privKeyChain = privateKeys[idCert];
PdfReader reader = new PdfReader(filenametoSig);
FileOutputStream fout = new FileOutputStream(filenameSigned);
char versionreader = reader.getPdfVersion();
AcroFields af = reader.getAcroFields();
com.lowagie.text.pdf.PRAcroForm acroForm = reader.getAcroForm();
ArrayList namessigneds = af.getSignatureNames();
PdfStamper stp = PdfStamper.createSignature(reader, fout, versio
nreader, null, namessigneds.size() > 0);
System.out.println((new StringBuilder()).append(" javascript :")
.append(reader.getJavaScript()).toString());
System.out.println((new StringBuilder()).append("permision reade
r :").append(reader.getPermissions()).toString());
System.out.println((new StringBuilder()).append("version reader
:").append(reader.getPdfVersion()).toString());
java.security.PrivateKey key = privKeyChain.getPrivateKey(psw.to
CharArray());
java.security.cert.X509Certificate chain[] = privKeyChain.getMai
nCertificateChain();
if(acroForm != null)
{
ArrayList names = af.getBlankSignatureNames();
System.out.println((new StringBuilder()).append("names.size(
):").append(names.size()).toString());
if(names.size() == 0)
names = af.getSignatureNames();
for(int k = 0; k < names.size(); k++)
{
String name = (String)names.get(k);
System.out.println((new StringBuilder()).append("Signatu
re name: ").append(name).toString());
PdfSignatureAppearance sap = stp.getSignatureAppearance(
);
sap.setCrypto(key, chain, null, PdfSignatureAppearance.W
INCER_SIGNED);
sap.setVisibleSignature(name);
}
stp.close();
} else
{
PdfSignatureAppearance sap = stp.getSignatureAppearance();
sap.setCrypto(key, chain, null, PdfSignatureAppearance.WINCE
R_SIGNED);
stp.close();
}
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
public static String asHex(byte buf[])
{
StringBuffer strbuf = new StringBuffer(buf.length * 2);
for(int i = 0; i < buf.length; i++)
{
if((buf[i] & 0xff) < 16)
strbuf.append("0");
strbuf.append(Long.toString(buf[i] & 0xff, 16));
}
return strbuf.toString();
}
public static void SignedTimeStampPDF(String pdfToSign, String pdfSigned, Pr
ivateKeyCertificateChain privkey, String psw, String SoftCode, String VendorName
)
throws Exception
{
SignedTimeStampPDF(pdfToSign, pdfSigned, privkey, psw, SoftCode, VendorN
ame, null);
}
public static void SignedTimeStampPDF(String pdfToSign, String pdfSigned, Pr
ivateKeyCertificateChain privkey, String psw, String SoftCode, String VendorName
, String TimeStamp)
throws Exception
{
PdfReader reader = new PdfReader(pdfToSign);
FileOutputStream fout = new FileOutputStream(pdfSigned);
int SIZE = 64000;
System.out.println((new StringBuilder()).append("SignedTimeStampPDF...")
.append(pdfToSign).append("...").append(pdfSigned).toString());
AcroFields af = reader.getAcroFields();
{
if(i >= numpagesDoc)
break;
stamp.insertPage(numpages + 1, PageSize.A4);
over = stamp.getOverContent(numpages + 1);
i++;
com.lowagie.text.pdf.PdfImportedPage pdfImport = stamp.getImport
edPage(readerDoc, i);
PdfContentByte pdfContent = null;
if(pdfImport != null)
{
over.addTemplate(pdfImport, 0.0F, 0.0F);
numpages++;
}
} while(true);
stamp.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
return 1;
}
public void AddPageContent(String pdfFile, String pdfResult)
{
PdfReader reader = null;
try
{
System.out.println((new StringBuilder()).append("pdfFile:").append(p
dfFile).toString());
reader = new PdfReader(pdfFile);
int n = reader.getNumberOfPages();
Rectangle psize = reader.getPageSize(1);
float width = psize.getWidth();
float height = psize.getHeight();
Document document = new Document(new Rectangle(width, height));
System.out.println((new StringBuilder()).append("pdfResult:").append
(pdfResult).toString());
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStr
eam(pdfResult));
document.open();
PdfContentByte cb = writer.getDirectContent();
int i = 0;
int p = 0;
while(i < n)
{
document.newPage();
p++;
i++;
com.lowagie.text.pdf.PdfImportedPage page1 = writer.getImportedP
age(reader, i);
cb.addTemplate(page1, 0.0F, 0.0F);
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
sap.setReason(CertificateUtil.getSubjectOIDValue(chain[0], "2.5.4.3"
));
stp.close();
}
fout.flush();
fout.close();
}
public byte[] getDigest(InputStream inp, String instance)
{
try
{
MessageDigest messageDigest = null;
messageDigest = MessageDigest.getInstance(instance);
byte buf[] = new byte[8192];
int n;
while((n = inp.read(buf)) > 0)
messageDigest.update(buf, 0, n);
return messageDigest.digest();
}
catch(Exception ex)
{
ex.printStackTrace();
}
return null;
}
public void parsePDF(String filename)
{
try
{
System.out.println((new StringBuilder()).append("Documento : ").appe
nd(filename).toString());
PdfReader reader = new PdfReader(filename);
int pagenum = reader.getNumberOfPages();
label0:
for(int cont = 1; cont <= pagenum; cont++)
{
PdfDictionary dic1 = reader.getPageN(cont);
System.out.println((new StringBuilder()).append("reader.getPageN
(").append(cont).append(").toString() :").append(dic1.toString()).toString());
Set keys = dic1.getKeys();
Iterator it = keys.iterator();
do
{
if(!it.hasNext())
continue label0;
Object obj = it.next();
System.out.println((new StringBuilder()).append("nombre de l
a clas del iterator ").append(obj.getClass().getName()).toString());
PdfName value = (PdfName)it.next();
System.out.println((new StringBuilder()).append("value <<<<<
<<<<<>>>>>>>>>>").append(value.toString()).toString());
PdfObject pdfobj = dic1.get(value);
System.out.println((new StringBuilder()).append("class name
<<<<<<<<<<>>>>>>>>>>").append(pdfobj.getClass().getName()).toString());
if("/Contents".equals(value.toString()))
{
System.out.println("entra en CONTENTS");
PRIndirectReference prind = (PRIndirectReference)pdfobj;
System.out.println((new StringBuilder()).append("prind.t
oString() ").append(prind.toString()).toString());
}
if(!"/Resources".equals(value.toString()));
if("/MediaBox".equals(value.toString()))
{
System.out.println("entra en MEDIABOX");
PdfArray pdfarray = (PdfArray)pdfobj;
ArrayList array = pdfarray.getArrayList();
int tam = array.size();
System.out.println((new StringBuilder()).append("tam MED
IABOX ").append(tam).toString());
for(int contq = 0; contq < tam; contq++)
{
Object obj2 = array.get(contq);
PdfNumber num1 = (PdfNumber)array.get(contq);
System.out.println((new StringBuilder()).append("Obj
ect----- ").append(obj2.getClass().getName()).toString());
System.out.println((new StringBuilder()).append("Val
or: ").append(num1.doubleValue()).toString());
}
}
if(value == PdfName.TEXT)
{
pdfobj = dic1.get(value);
System.out.println((new StringBuilder()).append(value.to
String()).append("-->>").append(pdfobj.toString()).toString());
}
if(value.isString())
{
pdfobj = dic1.get(value);
System.out.println((new StringBuilder()).append(value.to
String()).append("-->").append(pdfobj.toString()).toString());
}
} while(true);
}
System.out.println((new StringBuilder()).append("reader.getCatalog()
.toString():").append(reader.getCatalog().toString()).toString());
for(int cont = 1; cont <= pagenum; cont++)
{
byte bPage[] = reader.getPageContent(cont);
System.out.println((new StringBuilder()).append("Contenido page
").append(cont).toString());
}
int acrofieldssize = reader.getAcroFields().getFields().size();
System.out.println((new StringBuilder()).append("--> ").append(acrof
ieldssize).toString());
}
catch(IOException ioe)
{
System.err.println(ioe.getMessage());
}
}
private void _$615()
throws Exception
{
}
protected void generarPDF(String xml, String xslt, String pdf, String basePa
th, String nameParameter, int valueparameter)
throws IOException, FOPException, TransformerException
{
ByteArrayOutputStream bOut = generarPDF(xml, xslt, basePath, nameParamet
er, valueparameter);
FileOutputStream fOut = new FileOutputStream(pdf);
CopyUtils.copy(bOut.toByteArray(), fOut);
fOut.flush();
fOut.close();
}
protected ByteArrayOutputStream generarPDF(String xml, String xslt, String b
asePath, String nameParameter, int valueparameter)
throws IOException, FOPException, TransformerException
{
FopFactory fopFactory;
FOUserAgent foUserAgent;
ByteArrayOutputStream out;
fopFactory = FopFactory.newInstance();
foUserAgent = fopFactory.newFOUserAgent();
foUserAgent.setBaseURL(basePath);
out = new ByteArrayOutputStream();
Fop fop = fopFactory.newFop("application/pdf", foUserAgent, out);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new StreamSource(xslt))
;
transformer.setParameter(nameParameter, new Integer(valueparameter));
transformer.setParameter("versionParam", "2.0");
javax.xml.transform.Source src = new StreamSource(xml);
javax.xml.transform.Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(src, res);
break MISSING_BLOCK_LABEL_129;
Exception exception;
exception;
throw exception;
return out;
}
public static int SIZETEXT_DEFAULT = 10;
}