How does one create a PDF from a Usercontrol in WPF MVVM - c#

I am creating a WPF application. I use MS Visual Studio 2010, C# and MVVM.
On a usercontrol, I have a gridview. That gridview is populated with data from another class, via binding and itemsourceing etc... No problems there. I see the data and everything. I also have a few labels and textboxes around the usercontrol. These will be used by the user to fill in random data. Stuff like name, address and the such. You could call it an order form. The list of products in the gridview with the details provided below.
Once the user clicks OK, the application should now create a PDF of the entire usercontrol. How do I do that?
I can export a gridview to Excel just fine. But now I want to basically recreate the usercontrol into a PDF file.
I have read online that I can create an image of the usercontrol and convert that image to PDF. Would that help? I know from screenshots that the textboxes still have the borders around them and such.
But for now, how do I create a PDF from the usercontrol, using the MVVM approach?
And a side question. If I can use a save to dialog box, where the user can select where to save the file, can I get that location in a string to use it to open the PDF document in a report viewer on a seperate usercontrol?
If there is a need for coding, images or anything else, please comment and I'll edit the question with the changes.

Generating a PDF from a UserControl is non-trivial in C#. I'd strongly recommend finding a 3rd party tool to create your report design and to use that to export to PDF.
If you decide not to stand on the shoulders of giants and want to roll your own, then you'll need to implement the following
Create a separate control that can use your ViewModel as it's DataContext but which has the controls coloured and shaded for printing
Export the control to XPS using the System.Windows.Xps namespace libraries.
Convert the XPS to PDF using a 3rd party tool.
It's a pain, I know, but I can't see a simpler route for you.

Related

QLPreviewController and UIWebView do not display filled PDFs

I have a PDFthat has text boxes in it. My program uses Xfinium PDF software to fill the text boxes. When I view the filled in PDF the document shows up with no data in the fields. I have tried using QLPreviewController and UIWebView and they both do not display the filled in fields; however, if I email the document to myself and open it in Adobe DC on the iPad all the data shows up correctly. It may be important to note that even the mail app does not show the PDF correctly filled in.
Here is the PDF opened in Adobe on iPad
Here is the PDF opened in UIWebView in my app (also shows same way in QLPreviewController
PDF forms may bring along appearances or may rely on the viewer to create an appearance for the value of the field.
Fairly complete PDF viewers (like Adobe Reader or Foxit) can get along with both variants well. Incomplete viewers, though, like many so called previewers, require an existing appearance and display empty documents for forms which do not bring along appearances.
Thus, if you want your forms to be visible on incomplete viewers, too, provide appearances.
The QLPreviewController use the CGPDF* API to display the PDF files. The CGPDF* API has some limitations, it displays only the page content and it does not display annotations, no matter if they have appearances or not. Form fields use widget annotations to display the field content so they are also not displayed.
The solution here is to flatten the form fields. This operation will transform the form fields into page content and QLPreviewController will display the final file correctly. The downside of this operation is that the form fields are no longer editable.
The XFINIUM.PDF library creates apearance objects for field values. The problem is related to iOS PDF rendering engine which does not display annotations and form fields. The solution is to flatten the form fields if you want to view the files using the QLPreviewController.
The form fields are flattened with this line of code:
pdfDocumentObject.Form.FlattenFormFields();
Disclaimer: I work for the company that develops the XFINIUM.PDF library.
Both QuickLook and UIWebView/WKWebView uses Apple's internal and undocumented CorePDF framework, which has no code that would render PDF AcroForms (doesn't matter if backed by appearance streams or not)
You can either
1) Flatten the document on the server or with a client-side library.
2) Re-implement everything from scratch and add support for PDF forms. (See Page 431ff in Adobe's PDF Specifications - "Interactive Form Dictionary")
We did (2) in the commercially available PSPDFKit SDK. It doesn't use Apple's rendering engine as you do not have a way here to render appearance streams for PDF form widgets, so even with a lot of code you'll not be able to get the representation that is encoded in the document. For this you'll either have to result to private API or re-implement everything yourself. We also support (1) using the PSPDFProcessor class.
Thanks,
It works for me.
pdfDocumentObject.Form.FlattenFormFields();
Bala.

how to open a pdf in tab using aspose C#

How to load a pdf from desktop to tab control using Aspose.pdf package?
I donot see any document load functions in the package. I am new to this.
I am using a tab control in a C# form to load the document and then search for words inside the pdf.
Aspose.Pdf is an API. Unfortunately, it does not have any UI control which you can place in tab or any other WinForms control.
One solution could be to convert each page to image and show the images in control.
But, if you want to search and highlight text within control and want the text and other objects selectable and scrollable, just like Adobe does, wait for any other member to suggest an alternate.
I work for Aspose as Developer Evangelist.

Add to MSSQL from PDF form

I have a PDF form which is used for the purpose of creating inspection reports.
I am currently using a c# WinForms GUI to accept data from users, insert this data into an MSSQL DB, and populate said PDF Form. The latter is achieved using the iTextSharp library.
I have been receiving requests that the process be reversed, whereby, the users enter the data into the form, for a more visually appealing interface, then, through means of a PDF button or something similar, take the data from the form fields in the background, and save it to the DB.
So the flow would be:
Users populate PDF Form > Button clicked > Data saved to DB > PDF Form saved to local machine.
Can anybody recommend a way of acheiving this? If there is a way of making PDF Buttons invoke C# scripts, that would be ideal, as I could simply have the button save the form, and then invoke a script passing the form filepath as a parameter.
Thanks in advance.
My preference would be to use a web interface or, as HighCore mentioned, WPF.
Acrobat does allow for a database interface with PDF forms. Look here at Adobe's website. The other option is that PDFs support JavaScript so you could use that to post data to a web service.

How to print data form C#

I've searched Stackoverflow and google and found many ways
how I can print stuff in C#.
The best way for me would be to populate blank white windows form
with some label, textbox and picturebox elements and print it as a windows form.
This way is very poor because it prints in 72 DPI, and is not flexible for multiple
pages print.
Next way that I found that would be good is using iTextSharp, but there is a problem
that iTextSharp only generates PDF-s, and you have to open it in PDF viewer and print
from there.
I love this way of thinking where I create a paragraph, and then fill it with text and graphic, so I found this thread
http://www.devarticles.com/c/a/C-Sharp/Printing-Using-C-sharp/
where it discusses how to create your own printing engine in C#, something like iTextSharp,
but very lightweight...
Now that I've said that, I want to know is there any ready to use printing engine that would be like iTextSharp, made for printing, not for PDF generation? What is the best way to print something, without using reporting services like CrystalReports.
I think Crystal Reports wouldn't work for my case cause I don't want to print generic reports, but some text and graphics that I need to dynamicaly generate every time I need to print.
I found that it was much easier to do printing using the printing stuff in WPF.
EDIT
XPS is the page description format that Microsoft included into .NET with .NET 3.0. It is nominally part of WPF, and is integrated with the WPF form layout model. But you can create XPS documents in memory and send them to printers, from any .NET app, including a WinForms App.
An example:
http://statestreetgang.net/post/2008/03/Creating-an-XPS-document-in-memory-via-the-DOM.aspx
It is approximately equivalent to the iTextSharp capability you explored, except:
you can do it all in memory if you like, no need to save to a filesystem file. Of course if you want to save to a filesystem file, you can do that too.
you don't need an external viewer in order to start the print.
If you are new in programming and you have some data like from Data Base, and you want to print it after retrieving it from Data Base. Then just follow this link it will guide you step by step.
Print Data in Dot Net (C#,Vb.net)

Filling out a PDF / form using Winform application

I have a 2-page PDF that I want to overlay information on (think of a form that someone manually fills out) using a C#/.NET Windows application. After this form is generated, it will need to be previewed and printed (exported into a graphic or PDF is nice, but not a requirement).
At first glance, I'm thinking of two ways to do this:
Use a PDF manipulator like iTextSharp, take a copy of the blank PDF form, and add text to the PDF. Then, launch Adobe Reader to do a print or preview.
Convert the PDF into a graphic, and put the graphic into a C# Report. Then, overlay text fields onto the report, and use a .NET ReportViewer control to preview and print the report.
The text does not need to be searchable or copyable or have any of the cool things that PDF gives me, so I'm leaning towards the second option. Am I missing anything, or is there something I'm not thinking of? Thanks in advance.
We use #1 extensively and it works perfectly. You shouldn't have any problems, it's rather easy (just need to make the fields writeable and use a FDF file and merge it with the PDF file). At least that's how we did it.

Categories

Resources