pdfbox-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "bal (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (PDFBOX-4556) how the visual representation of the signature is achieved
Date Wed, 26 Jun 2019 09:56:00 GMT

    [ https://issues.apache.org/jira/browse/PDFBOX-4556?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16873165#comment-16873165
] 

bal commented on PDFBOX-4556:
-----------------------------

hi , please find the attached pdfs one showing the image and another not showing when i 
return the template as inputstream and setting it to signatureOptions.setVisualSignature(inputstream
of pdf template). i want to show the image and the static appearence of the contents on the
inserted pdfbox in the pdf.But current scenario  my image and the inserted pdfbox are on
different locations. please find the below code i am using. how to draw an image without the
use of the pagecontentstream ? is it possible?

code .....

PDDocument doc = new PDDocument();
 PDPage page = new PDPage(((PDPage)(signedDocument.getDocumentCatalog().getAllPages().get(0))).findMediaBox());
 //PDPage page = new PDPage();
 doc.addPage(page);

float x = (float)xCo_ordinates;
 float y = (float)yCo_ordinates;
 float sigWidth = (float)signatureWidth;
 float sigheight = (float)signatureHeight;

ByteArrayOutputStream baos = new ByteArrayOutputStream();

PDAcroForm acroForm = new PDAcroForm(doc);
 doc.getDocumentCatalog().setAcroForm(acroForm);
 doc.getDocumentCatalog().getCOSObject().setNeedToBeUpdate(true);

PDSignatureField signatureField = new PDSignatureField(acroForm);
 acroForm.getFields().add(signatureField);
 List acroFormFields = acroForm.getFields();
 acroForm.setFields(acroFormFields);
 acroForm.getCOSObject().setDirect(true);
 acroForm.getCOSObject().setNeedToBeUpdate(true);

PDAnnotationWidget widget = signatureField.getWidget();
 widget.getCOSObject().setNeedToBeUpdate(true);
 widget.setRectangle(pdRectangle);
 widget.setPage(page);

PDStream pdfstream = new PDStream(doc);
 pdfstream.getCOSObject().setNeedToBeUpdate(true);
 PDXObjectForm form = new PDXObjectForm(pdfstream);
 form.getCOSObject().setNeedToBeUpdate(true);

PDFont font = PDType1Font.HELVETICA;
 PDResources resources = new PDResources();
 resources.addFont(font);
 Map pageFonts = resources.getFonts();
 resources.setFonts(pageFonts);
 resources.getCOSObject().setNeedToBeUpdate(true);
 form.setResources(resources);
 form.setFormType(1);
 // PDRectangle bbox = new PDRectangle(pdRectangle.getWidth(), pdRectangle.getHeight());
 //float height = bbox.getHeight();
 form.setBBox(pdRectangle);

PDAppearanceDictionary appearanceDictionary = new PDAppearanceDictionary();
 appearanceDictionary.getCOSObject().setDirect(true);
 appearanceDictionary.getCOSObject().setNeedToBeUpdate(true);
 PDAppearanceStream appearanceStream = new PDAppearanceStream(form.getCOSStream());
 appearanceStream.getCOSObject().setNeedToBeUpdate(true);
 appearanceDictionary.setNormalAppearance(appearanceStream);
 
 PDXObjectImage imgxobj = null;
 imagefile = new java.io.File(tickImagePath);
 BufferedImage bufferedImage = null;
 bufferedImage = ImageIO.read(imagefile);
 imgxobj = new PDPixelMap(doc, bufferedImage);
 int imgHeight = imgxobj.getHeight();
 int imgWidth = imgxobj.getWidth();

resources.addFont(font, "F0"); // exact key
 PDXObject xobj = imgxobj;
 OutputStream os = form.getCOSStream().createFilteredStream();
 os.write(Encoding.UTF8.GetBytes("0 0 0 rg\n" +
 "150 150 150 150 re\n" +
 "f\n" +
 "q\n" + "" + imgHeight + " 0 0 " + imgWidth + " 0 0 cm\n" +
 " /Im0 Do\n" +
 "Q\n" +
 "q\n" +
 "Q\n" +
 "/F0 10 Tf\n" +
 "BT\n" +
 " (signed By:) Tj\n" +
 " (Name:name) Tj\n" +
 " (Location:location) Tj\n" +
 " (Reason:reason) Tj\n" +
 "ET"));
 os.close();

//resources.addXObject(xobj, "Im"); // just prefix
 resources.addXObject(new PDJpeg(doc, new FileInputStream(tickImagePath)), "Im");
 widget.setAppearance(appearanceDictionary);
 try
 {
if (false)
 {
 PDPageContentStream pagecontentStream = new PDPageContentStream(doc, page, true, false);
 pagecontentStream.setNonStrokingColor(java.awt.Color.pink);
 pagecontentStream.addRect(x, y, sigWidth, sigheight);
 int windingRule = PathIterator.WIND_NON_ZERO;

 pagecontentStream.drawImage(imgxobj, 150, 150);
 pagecontentStream.saveGraphicsState();
 pagecontentStream.restoreGraphicsState();
 float fontSize = 8;
 float leading = fontSize * 1.0f;
 pagecontentStream.setFont(font, leading);
 pagecontentStream.beginText();
 pagecontentStream.moveTextPositionByAmount(155, 590);

 {
 pagecontentStream.drawString("Digitally signed By:");
 pagecontentStream.drawString("Nname:");
 }

 {
 pagecontentStream.drawString("Lnocation:");
 }

 {
 pagecontentStream.drawString("Rneason:");
 }
 pagecontentStream.endText();
 pagecontentStream.close();
 }
 }
 catch (System.Exception ex)
 {
 ex.StackTrace.ToString();
 }

 List annotations = new ArrayList();
 annotations.add(widget);
 page.setAnnotations(annotations);

 doc.save(baos);
 doc.close(); 
 return new ByteArrayInputStream(baos.toByteArray());

 

 

 

> how the visual representation of the signature is achieved  
> ------------------------------------------------------------
>
>                 Key: PDFBOX-4556
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-4556
>             Project: PDFBox
>          Issue Type: Wish
>          Components: .NET
>    Affects Versions: 1.8.16
>            Reporter: bal
>            Priority: Major
>         Attachments: as_TobeSigned.pdf, pdfImage-modified-by-tilman.pdf, pdfImage.pdf
>
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@pdfbox.apache.org
For additional commands, e-mail: dev-help@pdfbox.apache.org


Mime
View raw message