1. Olan Knight
  2. PowerBuilder
  3. Monday, 22 August 2022 22:48 PM UTC

PB2019R3
Oracle 12C   for now, then we get to do this in PostgreSQL v12 where the datatype = "bytea"
Windows 10 platform

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

UPDATE on 28-AUG-2022:
This works:

With all the status and error checking, and all the WHAT-IFs removed, here's my code to store the PDF as a blob:

ls_pathfile = Trim (sle_pdf.Text )
ll_fileno    = FileOpen (ls_pathfile, StreamMode!, Read!, Shared!)
ll_bytes    = FileReadEx (ll_fileno, lblob_pdf)

UPDATEBLOB notice_list
SET        pdf_blob   = :lblob_pdf
WHERE      bill_fccid = :is_billfccid
AND        notice_idx = :ll_idx
USING      sqlcA;

sqlca.sqlCode = 0
sqlca.sqlNRows = 1


With all the status and error checking, and all the WHAT-IFs removed, here's my code to reconstruct the blob as a PDF:

SELECTBLOB pdf_blob
INTO       :lblob_pdf
FROM       notice_list
WHERE      bill_fccid = :is_billfccid
AND        notice_idx = :ll_idx
USING      sqlca;

ls_label    = dw_text.GetItemString (1, "label")
ls_filename = "<valid path>" + "_" + ls_label + ".pdf"

ll_filenew  = FileOpen (ls_filename, StreamMode!, Write!, LockReadWrite!, lwn_writemode)
ll_rc       = FileWriteEx (ll_filenew, lblob_pdf)
ll_rc       = FileClose (ll_filenew)


It's literally that simple, but learning the above was difficult and the HELP files were not much help.
Hopefully others can use this blessedly simple tutorial!  :)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



This is stupid simple in concept, so I MUSt be doing something wrong.

I want to:
1) Save a PDF into the database
2) Retrieve the PDF file from the database
3) Append the PDF to my invoice, which is a PrintJob with multiple DWs Printing to a single PDF file using NativePDF.


After much research, the plan is to use blobs.

I was able to create a BLOB column in the table:



// I can convert the file into a blob and save it
1) Call FileOpen() in StreamMode
2) Call FileReadEx() in a loop reading 32765 bytes at a time into a blob variable
3) Call FileClose () when the read loop completes
4) Call UpdateBlob() to save into an existing entry in the database

// Read the blob from the database
1) Use BlobMid() in a loop to read the PDF file from the database into a blob variable

Now what?
I can write the data to a new file, but then how do I append the new PDF file to my dw PrintJob generated invoice?

What I want to do (I think) is add the blob to a DW whose freeform, external DWO only has a single BLOB column in it.
Sadly, I cannot make this work.
In the Database Painter, when I click on the column "pdf_blob" to add the column to the DWO, I get this:

I've no idea what this means.
I cannot find any examples or explanation of this error, nor steps on how to resolve it.

How can I get the PDF file, either from a blob format or from an actual PDF file, into a DW so I can append it to my current PrintJob?

Or is there a better wayto append the PDF to the invoice?




Chris Pollach @Appeon Accepted Answer Pending Moderation
  1. Monday, 22 August 2022 23:09 PM UTC
  2. PowerBuilder
  3. # 1

Hi Olan;

   You're very close... Part II, as follows:

  1. Use the SelectBlob command to read the PDF data from the DB.
  2. Then create the physical PDF file by using the FileWriteEX command 
  3. Produce your Invoice PDF file 
  4. Splice the DB PDF onto the end of your invoice PDF. For that, I personally use the free & open source PDFTK (PDF toolkit) software.

Note that in PB 2022, Appeon will include a PDF merge utility that can perform the same functionality (and more) as the PDFTK software.

HTH 

Regards ... Chris 

 

 

 

 

 

Comment
  1. Olan Knight
  2. Tuesday, 23 August 2022 14:21 PM UTC
Ah HA! So there is NO WAY to do this using a DW at this time! THANK YOU!!!
  1. Helpful
  1. Olan Knight
  2. Friday, 26 August 2022 18:21 PM UTC
Hey Chris, PDFtk now requires a commercial license if I want to incorporate it into my app at work.



I did some research and am testing "VeryPDF PDFToolbox Command Line v2.1" (http://www.verypdf.com/app/pdftoolbox/); no commercial license required.
  1. Helpful
  1. Chris Pollach @Appeon
  2. Friday, 26 August 2022 20:09 PM UTC
Hi Olan .. I believe that is only for the "Server" version. The Basic one (which is all you need) should still be free AFAIK. ;-)

BTW: PB/PS 2022 GA *should* be out around the 1st full week of September 2022. If you go with that release, then the PDF Utility will be included.

https://docs.appeon.com/pb/whats_new/New_PDFBuilder_objects.html

  1. Helpful
There are no comments made yet.
Miguel Leeuwe Accepted Answer Pending Moderation
  1. Tuesday, 23 August 2022 07:36 AM UTC
  2. PowerBuilder
  3. # 2

Hi Olan,

One small detail:

Quote: "Call FileReadEx() in a loop reading 32765 bytes"

When you use FileReadEx(), there's no need to use a loop of 32kb. to read your file..

regards,

MiguelL

Comment
  1. Olan Knight
  2. Tuesday, 23 August 2022 14:20 PM UTC
Thank you, Miguel!
  1. Helpful
There are no comments made yet.
  • Page :
  • 1


There are no replies made for this question yet.
However, you are not allowed to reply to this question.