• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

cfprint shows blank page in coldfusion

New Here ,
Jun 02, 2022 Jun 02, 2022

Copy link to clipboard

Copied

I am generating a pdf document and on clicking print button , print window should appear, but my page returns blank. Why this happens. 

What I have did

 <cfoutput><a href="print.cfm?user_id=#session.sessionUser.user_id#"><i class="fa fa-print"></i></a></cfoutput>

print.cfm

<cfparam  name="user_id" default="v">
<cfset doc_data=createObject("component","components.results")>
<cfset data=doc_data.printFunc(user_id)>
<cfdocument  format="pdf" filename="contact_data.pdf" overwrite="Yes" name="contact_data.pdf"> 
    <cfinclude  template="master.cfm">
        <h3 class="text-center">Contact List</h3>
        <table class="table table-bordered">
            <thead>
                <tr>
                    <th>Name</th>
                    <th>Date Of Birth</th>
                    <th>Gender</th>
                    <th>Address</th>
                    <th>Pincode</th>
                    <th>Email Id</th>
                    <th>Phone Number</th>
                </tr>
            </thead>
            <cfoutput query="data">
            <tbody>                
                <cfset c_name= title & ". " & first_name & " " & last_name>
                <cfset address_name= address & ", " & street_name & ", " & city & ", " & state & ", " & nation>
                <tr>                    
                    <td>#c_name#</td>
                    <td>#dob#</td>
                    <td>#gender#</td>
                    <td>#address_name#</td>
                    <td>#pincode#</td>
                    <td>#email_id#</td>
                    <td>#phone_number#</td>
                </tr>
            </tbody>
             </cfoutput>
        </table>
</cfdocument>
<cfprint type="pdf" source="#expandPath('.')#\contact_data.pdf" printer="OneNote (Desktop)">

Views

243

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jun 02, 2022 Jun 02, 2022

Copy link to clipboard

Copied

First, what happens if you call your print.cfm page directly (passing in the needed id)? It doesn't look like it should produce any output (cfprint sends the doc to a printer). Does the printer show the doc being printed? And if so, does the print.cfm page produce any output on screen? If not, maybe just add a confirmation message after the cfprint (or put it in a try/catch in case it fails, to offer a different message).

 

Second, what about your first template should be making "a print window" appear? I see tthing there to indicate that. 


/Charlie (troubleshooter, carehart.org)

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Jun 02, 2022 Jun 02, 2022

Copy link to clipboard

Copied

Can you help with a code, Does cfprint shows print window?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jun 03, 2022 Jun 03, 2022

Copy link to clipboard

Copied

It does not, and that's what I was getting at. If you want to pop up a window, such as to tell the user their doc was printed (or not), that's indeed separate code. I can't offer it, as I don't do it.

 

And while cf used to offer a cfwindow tag, that's been deprecated and such cf ui tags are discouraged in recent years. Instead, people should look to Javascript to handle that sort of activity.

 

And perhaps something as simple as a js alert (perhaps styled in some way) may suffice, and that's as simple as:

<script>
alert('some msg');
</script>

But as for a real pop-up window (if you want more than that alert, once you've tried it), do beware that you may find only older references to such, as again it's generally less common to do that anymore. 

 

Indeed, you may notice you don't see it often in sites you visit. But if there's some site that does just what you want, the good news is that will again likely be done via Javascript. And you'd be able to look at that in your browser, to see how it was done and then could implement that in your cfm template. 

 

Hope that helps.


/Charlie (troubleshooter, carehart.org)

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jun 03, 2022 Jun 03, 2022

Copy link to clipboard

Copied

What happens when you temporarily replace 

<cfoutput><a href="print.cfm?user_id=#session.sessionUser.user_id#"><i class="fa fa-print"></i></a></cfoutput>

with

<cfoutput><a href="print.cfm?user_id=#session.sessionUser.user_id#"><i> Print it! </i></a></cfoutput>

and then click on the link?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jun 05, 2022 Jun 05, 2022

Copy link to clipboard

Copied

I now realize there is something else. You've given the same page the following 2 tasks:

  1. creating a PDF document and saving it to the file system;
  2. printing the PDF document.

 

You want the first task to complete before the second one begins. Therefore, it is unwise to run both within the same page request, as you have done. 

 

The solution is to treat the PDF creation and PDF printing as 2 separate, sequential tasks. Two common ways to do so are:

1. Using 2 functions

The first function, say createPDF(), uses cfdocument to create the document; the second function, say printDoc(), uses cfprint to print the document.

2. Using named locks (which I would recommend in these circumstances)

 

<!--- Locking ensures printing will start only after PDF generation has completed --->
<cflock name="PDFGenerationPrintingLock" type="exclusive" timeout="5">
    <cfparam  name="user_id" default="v">
    <cfset doc_data=createObject("component","components.results")>
    <cfset data=doc_data.printFunc(user_id)>
    <cfdocument  format="pdf" filename="contact_data.pdf" overwrite="Yes" name="contact_data.pdf"> 
    ... etc. ...
    </cfdocument>
</cflock>

<cflock name="PDFGenerationPrintingLock" type="exclusive" timeout="10">
    <cfprint type="pdf" source="#expandPath('.')#\contact_data.pdf" printer="OneNote (Desktop)">
</cflock>

 

Yet another suggestion: Does the file print.log exist in your logs? If so, what does it say when you run the code?  

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jun 05, 2022 Jun 05, 2022

Copy link to clipboard

Copied

Bkbk, I believe this is not necessary: cfml does not process those two tags asynchronously. 


/Charlie (troubleshooter, carehart.org)

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jun 06, 2022 Jun 06, 2022

Copy link to clipboard

Copied

Hi Charlie, the thread-safety of the two tags was not the concern. The suggestion is about multiple access to the file by various threads. 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jun 06, 2022 Jun 06, 2022

Copy link to clipboard

Copied

LATEST

The op never raised the specter of multiple simultaneous requests being at issue; you can follow that road. I will await abcd's response tomy take on more straightforward considerations. 


/Charlie (troubleshooter, carehart.org)

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Resources
Documentation