Do you own a Debenu Quick PDF Library version 7, 8, 9, 10, 11, 12, 13 or iSEDQuickPDF license? Upgrade to Debenu Quick PDF Library 14 today!
Random field displacement |
Post Reply |
Author | |
gkell
Beginner Joined: 09 Jun 09 Location: Vancouver, WA Status: Offline Points: 14 |
Post Options
Thanks(0)
Posted: 09 Jun 09 at 8:41PM |
I use open a file(1) and populate fields accordingly then I open a file(2) that is a copy of one of the pages from file1 and populate it and merge with file1, but continue to open file2 and merge with file1 as many times as i need. The problem is randomly text is place in the wrong spots, but I have triple checked everything. example: pdf.LoadFromFile (gsWebsiteFilePath & "\PCPPlan.pdf")
lDocumentID = pdf.SelectedDocument
lDocCnt = 0 ReDim Preserve aDoc(lDocCnt)
aDoc(lDocCnt) = lDocumentID ====fill==== For i = pdf.FormFieldCount To 1 Step -1
lret = pdf.FlattenFormField(i) Next Do Until EOF
loop
lret = pdf.SaveToFile("funstuff")
|
|
DELBEKE
Debenu Quick PDF Library Expert Joined: 31 Oct 05 Location: France Status: Offline Points: 151 |
Post Options
Thanks(0)
|
Hello and wellcome
Your code seem correct and i can't explain why this random problem occur.
Just a thing about your code. You don't need to keep all the document's Id in a array. When you do the merge function, the second document is unloaded and it's id is no longer valid
pdf.LoadFromFile (gsWebsiteFilePath & "\PCPPlan.pdf")
lDocumentID = pdf.SelectedDocument
lFirstDoc = lDcoumentID
lDocCnt = 0 ====fill====
For i = pdf.FormFieldCount To 1 Step -1
lret = pdf.FlattenFormField(i) Next Do Until EOF 'I don't understand when EOF change to true/false
loop
lret = pdf.SaveToFile("funstuff")
|
|
gkell
Beginner Joined: 09 Jun 09 Location: Vancouver, WA Status: Offline Points: 14 |
Post Options
Thanks(0)
|
I figured out the problem. It was that I populate file(a) and flatten then open a new file(b) then populate and flatten it then merge at the end; however, it should be that I populate file(a) and flatten then open file(b) then merge then populate then flatten. for example:
pdf.LoadFromFile (gsWebsiteFilePath & "\PCPPlan.pdf")
lDocumentID = pdf.SelectedDocument
FirstDocumentID ====fill==== For i = pdf.FormFieldCount To 1 Step -1
lret = pdf.FlattenFormField(i) Next Do Until EOF
loop
lret = pdf.SaveToFile("funstuff") |
|
gkell
Beginner Joined: 09 Jun 09 Location: Vancouver, WA Status: Offline Points: 14 |
Post Options
Thanks(0)
|
This issue continues to happen during flattenformfield function. Here is the code used to flatten: For i = CLng(pdf1.FormFieldCount) To 1 Step -1 This needs to be resolved. thanks.
|
|
Ingo
Moderator Group Joined: 29 Oct 05 Status: Offline Points: 3524 |
Post Options
Thanks(0)
|
Hi!
I don't know why you're posting one problem in three threads? Did you read the kb-article from Rowan? The important thing is that after each flatten the number of the formfields will be reduced by one. So if you're using loops with formfieldcount you have to keep an eye on this fact ;-) Cheers, Ingo
|
|
gkell
Beginner Joined: 09 Jun 09 Location: Vancouver, WA Status: Offline Points: 14 |
Post Options
Thanks(0)
|
Yeah, sorry about posting in three spots, but they all seem to be the same issue. So, I thought I might have a better chance of getting the issue resolved. The Link that you gave me with the code for flattening is the same as the code I us. Plus, I did copy that code for the link, just in case, to my code, but the result was the same. Yes, I know if you flatten one out of 12, you will have 11. The problem is that when flattening the data gets mixed up some how, either the data is doubled to another spot that should be something else, or the data is just missing from the form field it self. If you need more data I can try to post some more code, images, or links to files tomorrow when working in the server. let me know if you come up with anything. Thanks and sorry again.
|
|
Ingo
Moderator Group Joined: 29 Oct 05 Status: Offline Points: 3524 |
Post Options
Thanks(0)
|
Hi!
What about the long way? Load the files one by one, flatten the fields, save the files, load the files and merge them? Cheers, Ingo |
|
gkell
Beginner Joined: 09 Jun 09 Location: Vancouver, WA Status: Offline Points: 14 |
Post Options
Thanks(0)
|
I've tried to do the long way and the short way. Both produce the same results. Here is my codeIf Not (oRs.BOF And oRs.EOF) Then If documentCount <> 0 Then |
|
gkell
Beginner Joined: 09 Jun 09 Location: Vancouver, WA Status: Offline Points: 14 |
Post Options
Thanks(0)
|
As you might have noticed in the code, I also initalize and kill pdf1 each loop hoping that would fix the issue, but it didn't.
|
|
Ingo
Moderator Group Joined: 29 Oct 05 Status: Offline Points: 3524 |
Post Options
Thanks(0)
|
... If you've already tried the latest (7.17) version now it's time to visit the official support-pages ;-)
Cheers, Ingo |
|
Shotgun Tom
Senior Member Joined: 14 Aug 09 Location: Phoenix, AZ Status: Offline Points: 53 |
Post Options
Thanks(0)
|
Gkell:
Why not create all your temp files, merge them and then do the form flattening to the single merged file?
I know that works as I've created a program that merges IRS Tax Form's and the flattening is done only on the resulting merge file.
Tom
|
|
gkell
Beginner Joined: 09 Jun 09 Location: Vancouver, WA Status: Offline Points: 14 |
Post Options
Thanks(0)
|
I have tried that too, but when I merge the temp files all the data is the same as the first page. Maybe my merging method is incorrect. You see my code, is there something to add to it so that when I merge the temps that the data doesn't stay the same as the first page? |
|
Shotgun Tom
Senior Member Joined: 14 Aug 09 Location: Phoenix, AZ Status: Offline Points: 53 |
Post Options
Thanks(0)
|
Try adding the UpdateAppearanceStream directly after you set the data for each form field.
PDF1.UpdateAppearanceStream Index
Function QuickPDF0716.PDFLibrary::UpdateAppearanceStream(Index As Long) As Long
You are using the Active X version, correct?
|
|
gkell
Beginner Joined: 09 Jun 09 Location: Vancouver, WA Status: Offline Points: 14 |
Post Options
Thanks(0)
|
Yes, Active X version 7.16. Tried UpdateAppearanceStream, but same outcome.
|
|
Ingo
Moderator Group Joined: 29 Oct 05 Status: Offline Points: 3524 |
Post Options
Thanks(0)
|
Are the formfield names in different documents or pages the same?
I've read that this can be a problem, too. Cheers, Ingo
|
|
gkell
Beginner Joined: 09 Jun 09 Location: Vancouver, WA Status: Offline Points: 14 |
Post Options
Thanks(0)
|
Basically it's one template file that I populate for each recordset retreived. So every page is the same but the form field data is different in each page (for the most part). So yes the form fields are named the same because it's just one template file used to generate the multi page pdf. |
|
Ingo
Moderator Group Joined: 29 Oct 05 Status: Offline Points: 3524 |
Post Options
Thanks(0)
|
Really... This can be the problem.
Try to find few other (different) pdf-forms and merge them. There won't be a problem. I'm pretty sure. Cheers, Ingo
|
|
gkell
Beginner Joined: 09 Jun 09 Location: Vancouver, WA Status: Offline Points: 14 |
Post Options
Thanks(0)
|
Well, all the pages must be the same format...? Should I just copy that pdf and load it every other time or something? Not sure how to use different if they have to be the same.
|
|
Ingo
Moderator Group Joined: 29 Oct 05 Status: Offline Points: 3524 |
Post Options
Thanks(0)
|
What i wanna suggest is try few forms which should have different fieldnames and merge them.
You'll see it will work ;-) |
|
Shotgun Tom
Senior Member Joined: 14 Aug 09 Location: Phoenix, AZ Status: Offline Points: 53 |
Post Options
Thanks(0)
|
gKell: Ingo may be on to something.
Question: If you merge the temp documents without flattening the fields is the final merged PDF correct?
|
|
Ingo
Moderator Group Joined: 29 Oct 05 Status: Offline Points: 3524 |
Post Options
Thanks(0)
|
test it and then you'll know it
|
|
nhemdal
Beginner Joined: 12 Nov 09 Location: USA Status: Offline Points: 8 |
Post Options
Thanks(0)
|
I get the same behavior using a PDF template from the IRS. If I do not flatten the fields, the PDF is correct. If I flatten the fields the PDF fields are not correct. I am using this with VB6. This is how I flatten:
Public Sub FlattenFormFields(ByVal FileNamePs$)
CtNik.WriteToDebugView "Entering PdfForm.FlattenFormFields..." CtNik.WriteToDebugView "Form field count = " & CStr(pdfLibM.FormFieldCount) Call pdfLibM.LoadFromFile(FileNamePs$) If (Len(fileNameMs$) < 1) Then Err.Raise ErrorPdfFileNameIsEmptyK&, "PdfForm.Save", "The PDF file name can not be empty." Dim currentFieldL% Do While pdfLibM.FormFieldCount > 0 currentFieldL% = pdfLibM.FormFieldCount If (pdfLibM.FlattenFormField(currentFieldL%) <> 1) Then Err.Raise ErrorCouldNotFlattenPdfFormFieldK&, "PdfForm.FlattenFormFields", "Unable to flatten form field with index " & CStr(currentFieldL%) End If Loop If (pdfLibM.SaveToFile(fileNameMs$) = 0) Then Err.Raise ErrorCouldNotSavePdfFileK&, "PdfForm.Save", "Encountered " & CStr(pdfLibM.LastErrorCode) & " saving PDF " & fileNameMs$ CtNik.WriteToDebugView "Form field count = " & CStr(pdfLibM.FormFieldCount) CtNik.WriteToDebugView "Leaving PdfForm.FlattenFormFields..." End Sub |
|
Shotgun Tom
Senior Member Joined: 14 Aug 09 Location: Phoenix, AZ Status: Offline Points: 53 |
Post Options
Thanks(0)
|
Hey Nhemdal:
I have no problem flattening an IRS form.
Remember, the behavior of the flatten command causes the field count and index to change. This will create problems in the code you posted. As I posted above and again below, you need to loop backwards through the fields when flattening. Here's that snippet of code:
Private Sub FlattenFields()
If QP.LoadFromFile(OutPDFFileName) = 1 Then 'How many fields to fill? Dim FieldIndex As Integer FieldCount = QP.FormFieldCount()
For i = FieldCount To 1 Step -1 QP.FlattenFormField i DoEvents Next If QP.SaveToFile(OutPDFFileName) = 1 Then
'do nothing Else MsgBox "Error, file could not be written. - " & OutPDFFileName & vbCrLf Msg = Msg & "Field Flattening Failed!" & Time & vbCrLf End If Else MsgBox "Error, merged file not loaded.", vbCritical, "Flattening Error!" End If End Sub |
|
nhemdal
Beginner Joined: 12 Nov 09 Location: USA Status: Offline Points: 8 |
Post Options
Thanks(0)
|
I am using quickpdf 7.16. The IRS form is the 4549, and it has two pages. I rename the fields, using SetFormFieldChildTitle, in case I have to append additional 4549's to the initial one. In my test case, there are no additional PDFs merged in; however, the fields are renamed. When I use FlattenFOrmFIeld I get spurious data in random form fields. All of the form fields get set with data. I initially was calling FlattenFormField after I set a value, but same behavior. I switched to calling after all data has been set - same error. I know that the calls to SetFormFieldValueByTitle contain the correct data and have verified/validated this since if saving without flattening the PDF is correct. If I flatten to print, or send to viewer, then I get incorrect values for fields (other than what was set - even though set calls trace with correct values). I tried the following code as suggested, and I still get the same issue. I initially tried the code specified below. I have removed all unnecessary form fields from the template PDFs.
Public Sub FlattenFormFields(ByVal FileNamePs$)
If (Len(fileNameMs$) < 1) Then Err.Raise ErrorPdfFileNameIsEmptyK&, "PdfForm.Save", "The PDF file name can not be empty." Call pdfLibM.LoadFromFile(FileNamePs$) Dim I As Integer Dim FieldCount As Integer FieldCount = pdfLibM.FormFieldCount() For I = FieldCount To 1 Step -1 pdfLibM.FlattenFormField I DoEvents Next If (pdfLibM.SaveToFile(fileNameMs$) = 0) Then Err.Raise ErrorCouldNotSavePdfFileK&, "PdfForm.Save", "Encountered " & CStr(pdfLibM.LastErrorCode) & " saving PDF " & fileNameMs$ End Sub |
|
nhemdal
Beginner Joined: 12 Nov 09 Location: USA Status: Offline Points: 8 |
Post Options
Thanks(0)
|
Here is the screenshot of my issue. http://www.hemdal.com/Blogs/tabid/54/Default.aspx The left-aligned K under the 700 should say 750. If not flattened it is correct. Running flattenformfield causes this. |
|
Shotgun Tom
Senior Member Joined: 14 Aug 09 Location: Phoenix, AZ Status: Offline Points: 53 |
Post Options
Thanks(0)
|
I'd be happy to take a look at it if you'd like. How are you populating the form fields?
You can email the pdf form to t.m.o.r.a.n4511 at h.o.t.m.a.i.l. dot com
The email address is purposefully disguised to avoid getting spam mail from scrapers. Remove the periods and use the correct syntax (the @ symbol, etc.) for sending email if you'd like to send it.
Tom
|
|
nhemdal
Beginner Joined: 12 Nov 09 Location: USA Status: Offline Points: 8 |
Post Options
Thanks(0)
|
Given a template PDF - downloaded IRS form slightly customized using Foxit Phantom. I created a simple vb6 project with one button with code-behindas follows:
Option Explicit
'Private pdfLib As QuickPDFAX0716.PDFLibrary
Private pdfLib As Object Private Sub cmdFlatten_Click()
On Error GoTo TrapError
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject") If (pdfLib Is Nothing) Then
Set pdfLib = CreateObject("QuickPDFAX0716.PDFLibrary") pdfLib.UnlockKey ("...") End If Dim outputFullPath As String
Dim testPdfCount As Integer testPdfCount = 3 Dim j As Integer For j = 1 To testPdfCount outputFullPath = "C:\footest" & CStr(j) & ".pdf" If (fso.FileExists(outputFullPath)) Then fso.DeleteFile (outputFullPath) fso.CopyFile "C:\foo.pdf", outputFullPath Call pdfLib.LoadFromFile(outputFullPath) Dim I As Integer Dim FieldCount As Integer FieldCount = pdfLib.FormFieldCount() For I = FieldCount To 1 Step -1 pdfLib.FlattenFormField I Next Call pdfLib.SaveToFile(outputFullPath) Next Cleanup: Exit Sub TrapError: MsgBox Err.Description Resume Cleanup End Sub
This will still generate the error intermittently.
|
|
nhemdal
Beginner Joined: 12 Nov 09 Location: USA Status: Offline Points: 8 |
Post Options
Thanks(0)
|
Upgrading to 7.17 did not help. It does not happen on the same form field all the time either.
|
|
Shotgun Tom
Senior Member Joined: 14 Aug 09 Location: Phoenix, AZ Status: Offline Points: 53 |
Post Options
Thanks(0)
|
Hi Niklas: I have tried, over a dozen times, flattening the foo.pdf file you sent me. Each time it correctly flattens the fields.I reduced the flattening to the smallest amount of code possible.
Start a new project. Add the QuickPDF 7.17 reference library. Add a single command button. Paste the following code into your project:
'-----------------------------------------------------------------
Option Explicit
Dim QP Dim i As Integer Private ret As Long Private Sub Command1_Click()
Dim PDFFileName As String Dim SaveFileName As String Dim FieldCount As Integer PDFFileName = ' put your source file here "C:\Documents\foo.pdf" SaveFileName = 'put your destination save file pathname here "C:\Documents\footomflat.pdf" If QP.LoadFromFile(PDFFileName) = 1 Then 'How many fields to fill? FieldCount = QP.FormFieldCount()
MsgBox FieldCount 'should be 192 for your form
For i = FieldCount To 1 Step -1 QP.FlattenFormField i Next
If QP.SaveToFile(SaveFileName) = 1 Then
MsgBox "saved - " & SaveFileName & vbCrLf Else MsgBox "Error, file could not be written. - " & PDFFileName & vbCrLf End If Else MsgBox "Error, file not loaded." End If End Sub Private Sub Form_Load()
ClassName = "QuickPDFAX0717.PDFLibrary" LicenseKey = "xxxxxxxxxxxxxxxxx" 'SET YOUR LICENSE KEY HERE... Set QP = CreateObject(ClassName) ret = QP.UnlockKey(LicenseKey) MsgBox ret End Sub
'-------------------------------------
It works correctly every time I've run on my system. If this project works correctly on yours then there has to be some other code in your project that is causing the problem.
Tom
|
|
nhemdal
Beginner Joined: 12 Nov 09 Location: USA Status: Offline Points: 8 |
Post Options
Thanks(0)
|
Tom,
I still get the same behavior with the code snippet that you supplied.
VB6 SP6
XP SP2
QuickPDF 7.17 - standard license valid to version 7.99
Info reported by sysinternals ProcExp when running compiled simple vb6 test project:
QuickPDFAX0717.dll v 7.17.1029.0209
VB VM v. 6.00.0098.0002
typical mumbo jumbo ms support files
Foxit Phantom 1.0 flattens the pages correctly on my system.
-noh
|
|
nhemdal
Beginner Joined: 12 Nov 09 Location: USA Status: Offline Points: 8 |
Post Options
Thanks(0)
|
Ok, I went to my native tongue C#. In addition, I included another PDF component vendor that I use in another project to make sure that I am not losing it. QuickPdf flattened file is incorrect, but other vendor's flattened version is correct. Not only is it correct, but it is 10 times smaller in size. Now, other vendor is native .NET, but in this case I need COM. The conundrum.
static void Main(string[] args)
{ string sourceFileName = @"C:\foo.pdf"; string destFileName = @"C:\flatfoo.pdf"; string otherVendorDestFileName = @"C:\otherVendorFlatFoo.pdf"; string licenseKey = "..."; QuickPDFAX0717.PDFLibrary qp = new QuickPDFAX0717.PDFLibrary(); if ( 1 == qp.UnlockKey(licenseKey) ) { qp.LoadFromFile(sourceFileName); int fieldCount = qp.FormFieldCount(); for (int i = fieldCount; i >= 1; i--) { qp.FlattenFormField(i); } if (File.Exists(destFileName)) { File.Delete(destFileName); } qp.SaveToFile(destFileName); } OtherVendor.PDFDocument doc = new OtherVendor.PDFDocument(sourceFileName); if (null != doc) { doc.FlattenFormFields (); doc.SaveToFile (otherVendorDestFileName); } } Edited by nhemdal - 13 Nov 09 at 7:01PM |
|
nhemdal
Beginner Joined: 12 Nov 09 Location: USA Status: Offline Points: 8 |
Post Options
Thanks(0)
|
Ok, so I opened a generic Windows XP SP3 VM on my Mac to rule out some wierd config on the Wintel box I was using in previous posts. My QA group also gets this intermittent error, so it's not some wierd config issue I think. Other vendors and software work on same HW. No Adobe Reader or Foxit Reader is installed on the VM. I have VB6 SP6 on it, and I installed quickpdf 7.17 and GDViewer OCX for viewing. I created the simple VB6 projects specified in posts above, and same issue out of the gates. I'm at a loss. Product losing credibility in my book - also have yet to hear response from support.
|
|
Shotgun Tom
Senior Member Joined: 14 Aug 09 Location: Phoenix, AZ Status: Offline Points: 53 |
Post Options
Thanks(0)
|
Hi Niklas:
I know this is frustrating for you. If you submitted the problem to tech support they will get back with you.
I've tried a few other things and still cannot duplicate the error you're getting. I have viewed the results in Acrobat 9 Pro, PDF XPress Viewer, Adobe Reader 8, FoxIt and a GDPicture ocx viewer I created. The results from all my test files and your error file display the same in each viewer.
However, I did note one curious thing... file size. Just for kicks I also flattened your original foo.pdf using Acrobat 9 Pro and GDPicture. The file size on each is quite different. The really strange thing is the file size of your flattened file.
Your original foo.pdf, unflattened, is 98302.
The file size results of flattening in each of the following:
Acrobat 9 Pro: 187352
GDPicture: 245658
MyFlatRoutine: 248762 (with QuickPDF)
YourFlatfoopdf: 93976
Your flattened file size is smaller than the original. How can that be? Even Acrobat, which has the smallest size is double that of the original.
I now have tried My routine and file viewing on three computers... one with XP/SP3, one on my neighbor's Vista and on a brand new Windows 7 box. All results are the same.
Something strange is happening. It drives me nuts that I can't duplicate your error.
I sent you an image of the file size comparisons to your email.
Tom
|
|
gkell
Beginner Joined: 09 Jun 09 Location: Vancouver, WA Status: Offline Points: 14 |
Post Options
Thanks(0)
|
Actually found a fix to this issue. Basically, I decided, since flattening was the issue, to not flatten at all and instead to rename the child title to the document count and form field index. Example:
For i = pdf.FormFieldCount To 1 Step -1
lret = pdf.SetFormFieldChildTitle(i, pdf.GetFormFieldTitle(i) & documentCount & i) 'If CStr(pdf.GetFormFieldValue(i)) <> "" Then ' lret = pdf.FlattenFormField(i) 'Else ' lret = pdf.DeleteFormField(i) 'End If Next And if you need the form to not be edited then you should use SetFormFieldReadOnly function also. Edited by gkell - 17 Nov 09 at 8:17PM |
|
Post Reply | |
Tweet
|
Forum Jump | Forum Permissions You cannot post new topics in this forum You cannot reply to topics in this forum You cannot delete your posts in this forum You cannot edit your posts in this forum You cannot create polls in this forum You cannot vote in polls in this forum |
Copyright © 2017 Debenu. Debenu Quick PDF Library is a PDF SDK. All rights reserved. About — Contact — Blog — Support — Online Store