Merging several images into one single PDF file (Binary)

Merging several images into one single PDF file (Binary)

  

Hi peeps,

I'm implementing the scanning functionality to our OutSystems web application and to accomplish this we are using the VintaSoft Twain ActiveX v6.0.0.3. I'm at the point of sending the scanned images to the server for storage. The part of scanning and previewing the scanned images is already done and it works. The issue I'm having right now is the following:

The VintaSoft ActiveX gives you only the possibility to upload each scanned file ( as..  pdf, Tiff, JPEG, BMP or PNG)  separately to the server through the HTTP upload functionality.  I'm uploading each image as PDF.

In outsystems in the preparation of the page which is receiving the Http upload, it stores each image as a binary in a recordlist. I'm at the point that I want to iterate through this record list and add all those images ( binaries) together in one PDF document.

Do one of you have done this? or can you point me in the right direction to accomplish this?

Or maybe is there a way that I can add JPEG, TIFF to a PDF multipage file also. Then I will send the images in the required format and add them all together to a single pdf file.


Regards,

Alexei

Hi ,


I found the following extension:
http://www.outsystems.com/forge/component/466/iTextSharp/ 

I tried to use it, but when it comes to the part to merge all the pdfs I'm getting the following error:


[2] PDF header signature not found.
   at iTextSharp.text.pdf.PRTokeniser.CheckPdfHeader()
   at iTextSharp.text.pdf.PdfReader.ReadPdf()
   at OutSystems.NssiTextSharp.CssiTextSharp.MssMergePDF_Bulk(RLPDFRecordList ssPDF_List, Byte[]& ssMergedPDF)

 I have posted this in the discussion board of the extension also, to see if someone following the extension or the creator may give me some guidance or shed some light on the issue.


Regards,

Alexei

Alexei wrote:

Hi ,


I found the following extension:
http://www.outsystems.com/forge/component/466/iTextSharp/ 

I tried to use it, but when it comes to the part to merge all the pdfs I'm getting the following error:


[2] PDF header signature not found.
   at iTextSharp.text.pdf.PRTokeniser.CheckPdfHeader()
   at iTextSharp.text.pdf.PdfReader.ReadPdf()
   at OutSystems.NssiTextSharp.CssiTextSharp.MssMergePDF_Bulk(RLPDFRecordList ssPDF_List, Byte[]& ssMergedPDF)

 I have posted this in the discussion board of the extension also, to see if someone following the extension or the creator may give me some guidance or shed some light on the issue.


Regards,

Alexei

I let the HTTP request save each file in a table just to check the PDFs and I noticed that from the 3 pages scanned the last 2 are corrupted. So I think that is the issue..


Solution

I decided to post the solution to my problem in case someone gets into the same situation.


When sending files to the Webserver through HTTP Post (Upload) via a webpage, make sure the  name is unique, otherwise only the first file will be good and the rest will be corrupted. 

When you check the raw content with the GetRequestContent the form data name you send in the HTTP post per file must be unique:

Content-Disposition: form-data; name="Image0"; filename="Image0.PDF"
Content-Type: application/octet-stream
Content-Transfer-Encod ing: binary

The name="......."  , must be unique for each file you are sending.

I was implementing the scanning functionality into a web application with the VintaSoft twain scanning component to send the scanned images to the web application for storage and encountered this issue while doing a HTTP upload, I was assigning for each uploaded file the same name ('file'), now that I assign each file a unique name all pdf files are readable and the Merging with the ITextSharp extention works like a charm.



Solution

To elaborate more on this issue, and the solution, the support staff of the ActiveX stated that this is an issue with Outsystems or my code, because the name in the  HTTP post is informational and shouldn't be an issue if you send the same description for the name.   My code is pretty straight forward I just take the files coming from the HTTP request through the GetRequestFile function that resides in the HTTPRequestHandler extention and I store them into the database.