BookmarkSubscribeRSS Feed
dipanarya1
Obsidian | Level 7

Hello Team,

 

I am looking for the sample code which can generate and allow user to download the PDF file while using the _webout in data step( data _null_) in stored process.

 

 

Capture.JPGI have tried multiple options using the below content disposition but it is allowing me to download the pdf file but giving an error while opening downloaded PDF file, attached screenshot for your reference.

 

 

 

 

 

 

 

 

%let RV = %sysfunc(appsrv_header(Content-type, application/pdf));
%let RV = %sysfunc(appsrv_header(Content-disposition, %str(attachment; )filename=temp.pdf));

 

 

 

Please note, STP code is working fine and able to generate RTF and Excel.

 

Thanks and Regards,

Dipan Arya

 

 

 

 

13 REPLIES 13
AllanBowe
Barite | Level 11

First of all, try opening your .pdf file in notepad - if there are errors, it will actually contain the log.

 

Secondly, use the `stpsrv()` function methods, as these replace the IntrNet `appsrv` equivalents.

 

Thirdly, don't try and write directly to _webout.  Instead, write to disk and then stream it as binary content (eg with this macro), this way you can at least inspect the file before it is sent (as well as manage multi step PDF writes).

 

Finally, be sure that you haven't used `%stpbegin` or sent any other content to the destination beforehand.

 

Good luck..

/Allan
SAS Challenges - SASensei
MacroCore library for app developers
SAS networking events (BeLux, Germany, UK&I)

Data Workflows, Data Contracts, Data Lineage, Drag & drop excel EUCs to SAS 9 & Viya - Data Controller
DevOps and AppDev on SAS 9 / Viya / Base SAS - SASjs
Vince_SAS
Rhodochrosite | Level 12

Can you share the log for the code that is failing?  Something like this should work:

 

%let _ODSDEST=pdf;

%let RV = %sysfunc(appsrv_header(Content-type, application/pdf));
%let RV = %sysfunc(appsrv_header(Content-disposition, %str(attachment; )filename="temp.pdf"));

%STPBEGIN()

proc print data=sashelp.class; run; quit;

%STPEND()

 

Vince DelGobbo

SAS R&D

dipanarya1
Obsidian | Level 7

Hello @Vince_SAS,

 

Thanks for your reply.

 

The pdf is getting generated with HTML tag used in the data step using _webout. i have tried to open it using notepad.

 

Can you please suggest any workaround?

 

Thanks and Regards,

Dipan Arya

Vince_SAS
Rhodochrosite | Level 12

I don't understand what your code is doing.  You need to show the code or the log, or both.

 

Vince DelGobbo

SAS R&D

dipanarya1
Obsidian | Level 7

Hello @Vince_SAS,

 

Thanks for quick reply.

 

Please find attached log for your reference.

 

Thanks and Regards,

 

Dipan Arya

dipanarya1
Obsidian | Level 7

Hello @Vince_SAS,

 

Also attaching the PDF file which is being generated by the code after adding your suggested options to generate PDF.

i have tried to open the file and i can see the HTML TAGs in the PDF file.

 

Thanks and Regards,

Dipan Arya

 

Vince_SAS
Rhodochrosite | Level 12

The "temp.pdf" file in the ZIP archive that you attached is not a PDF file.  It is an HTML file.  Adobe Reader cannot open HTML files.

 

You need to change the logic of your program to create a PDF file when that is the desired type of output.

 

Vince DelGobbo

SAS R&D

dipanarya1
Obsidian | Level 7

Hello @Vince_SAS,

 

Thanks for quick reply.

 

If you check the log file, i applied the _odsdest =pdf and commands to set "appsrv_header" to generate PDF and Initially i also mentioned that the PDF is generated but with the HTML tags. we are using same process to generate the excel and RTF which is working fine but for pdf it is exported with the HTML Tags.

 

Requesting your help.

 

Thanks and Regards,

Dipan Arya

Vince_SAS
Rhodochrosite | Level 12

Yes, I saw that.  I also saw DATA step code that writes HTML to _WEBOUT:

 

 

MPRINT(MAC_REPORT):   data _null_;
MPRINT(MAC_REPORT):   file _webout;
MPRINT(MAC_REPORT):   PUT '<HTML>';
MPRINT(MAC_REPORT):   PUT '<HEAD>';
MPRINT(MAC_REPORT):   PUT '<STYLE>';
MPRINT(MAC_REPORT):   PUT 'TD {';
MPRINT(MAC_REPORT):   put 'font-family:arial;font-size:12px;BORDER-COLOR:BLACK;border-style:SOLID;border-width:1px;text-align: RIGHT;vertical-align: text-bottom; height: 25px';
MPRINT(MAC_REPORT):   put '}';

...

 

 

This is the HTML that I see at the beginning of what you think is a PDF file.

 

 

Microsoft Excel and Microsoft Word can open HTML files, and I suspect that is why it "worked" there.  You did not create true Excel or RTF files.  When you opened the file with Excel and Word you probably got messages indicating that the file type didn't match the file contents.  It is trying to tell you that you don't have the type of file that you think that you have.

 

Vince DelGobbo

SAS R&D

dipanarya1
Obsidian | Level 7
Thanks again @Vince_SAS.

We have to used the HTML tags due to some specific requirements.

Can you please suggest an approach to generate PDF while using the HTML tags in _webout.

Thanks and Regards,
Dipan Arya
Vince_SAS
Rhodochrosite | Level 12

You probably need to get a product that converts HTML to PDF, and then return the resulting PDF file.

 

Vince DelGobbo

SAS R&D

dipanarya1
Obsidian | Level 7
Can you please suggest any product?
Vince_SAS
Rhodochrosite | Level 12

I have never used any.  You will have to search the Web for a product.

 

Vince DelGobbo

SAS R&D

sas-innovate-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

Register now!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 13 replies
  • 3153 views
  • 3 likes
  • 3 in conversation