I am trying to create an editable pdf annotation in pdfkit which is multirow. The user does not need to be able to create new rows, but I want the text to be displayed over the entire bounding box (i.e. on several lines).
However it seems that it uses a standard single line NSTextField when it is in editing mode. If I just could access that object I could change it to multiline but it seems that PDFAnnotationTextWidget does not expose this object.
https://developer.apple.com/library/mac/documentation/graphicsimaging/Reference/QuartzFramework/Classes/PDFAnnotationTextWidget_Class/Reference/Reference.html
Any ideas?
The only example I found is the example project for PDFKit from 2006, but it also only support single line annotations.
https://developer.apple.com/library/mac/samplecode/PDFAnnotationEditor/Introduction/Intro.html
If not possible, is there a way to create custom PDFKit annotations, and in that case, how?
It seems that there is no public method to access that NSTextField.
You can access it only swizzling some methods, like I did in this example (please note: the code has a lot of warnings because it's old)
In my example you can write multiple lines in the NSTextField, but when you exit editing mode all goes on a single line: there is a reason why Apple used a single line text field for Widget annotations, AFAIK Widget annotations in PDF supports only single line, but this is a limitation on the PDF annotations and not in the Apple SDK.
If you save the document after the annotation is added, you can access it from any other pdf editor...and in that case you will see only a single line (that is not an NSTextField but the own implementation of the pdf reader).
If you want to permit to the user to write text on multiple lines, and to visualize it over the PDF (but without the possibility for the other pdf readers to change your annotations), you have to subclass PDFAnnotation and create your own class.
In this case, have a look a the MyStampAnnotation file. You can create a similar class, inheriting from PDFAnnotation. When the user clicks on the annotation (in editing mode), add your own textfield, then write the text directly on the document using something like CGContextShowTextAtPoint in the drawWithBox: method
Related
I'm trying to develop an extension that needs to render text, images and the preview of an external file in the code as a decoration. The problem is that I only can find text decoration and nothing that allows me to for example show a PNG between two lines of code without modifying the file.
Is this possible or I need to create a Custom Editor using the API? The problem of this solution is the need to integrate all the extension on the language I'm working what will take too much time.
I have seen the Comments API allows to show the reference of a text file but I can't find where is the API to generate this type of views:
The closest thing I can find is the Comments API with this sample. However, I need to add more than just text and the idea is to only show the content, nothing more.
Any guide, information or reference is highly appreciated.
Is there a way to determine the text that will actually display in a PDTextField when the PDF prints? If I call setValue and then getValue, it returns all of the text even though it will not all display.
I am trying to fill out a form with a limited size multiline text field that has the notation to attach another page for more details. I would like to limit the text to that which will display and generate the added detail page.
Thanks for indulging a PDFbox newbie.
There is no direct way to find that out as the details of the text layout such as line breaks, padding, line spacing are hidden inside the non public class PlainTextFormatter inside the org.apache.pdfbox.pdmodel.interactive.formpackage. So you'd need to replicate that code.
PDFBox tries to resemble the calculations done by Adobe Acrobat and Adobe Reader but the details of such calculations are not part of the PDF specification. So doing your calculation is only valid for a similar layout model. Other form filling applications might have a slightly different layout model and as a result your results will not apply to these.
In addition to that Acrobat (and PDFBox) place text although it might be partially clipped. Look at the results of the AlignmentTest.javaunit test to see what I mean. So one might have a different expectation to what 'fitting' really means.
As I've thought about passing the information about which text fitted back to the calling application anyway I've opened an enhancement request https://issues.apache.org/jira/browse/PDFBOX-3413 for that.
I am unable to format the text in a text object. For example, I need headers in bold, while the body of the text could be normal. Can I get any hints on this?
I know this can be achieved via extension objects, but I do not have any experience creating them.
This is not currently possible in QlikView 11. It has been an open development request for quite some time.
You have two options:
Use multiple text objects and lay them over each other (i.e. make the topmost one bold and its background transparent).
Use an extension object, however, this then restricts you to AJAX/WebView for your document. There is an existing extension (written by Stefan Walther) that has this capability here (git repo).
I want to create a pdf form for two language (Chinese/English) UI, and there's a button(s) or somethings on the form for language switch, is there anyway can make it? and how to do?
thanks!
Thanks for all reply!
Actually I got a sample like this,
PDF Sample
there're two checkbox on the top-left of the form, one is for English UI, the other is Chinese, I just want to know how to make PDF like that sample? (and I don't see any layers on the sample...)
thx
mkl's comment (which he should turn into a full answer, really) already hinted at the option to use different page templates residing in the same file.
Another option you could explore is this:
put the two language versions into 2 different layers (or 'optional content groups' in PDF parlance)
make the visibility of the two layers toggeable
let the user activate that layer which he/she needs.
Layer activation can be handled through normal Acrobat Reader user interface elements.
The layer switching can be made accessible via a "button" on the PDF page too -- but that requires additional JavaScript to be embedded in the PDF (something many people are not particularly keen about).
As Kurt proposed, I make my comment on Frank's answer an answer in its own right:
Actually there is a pdf feature seldomly used nowerdays, page
templates. Thus, those two forms can reside in the same file in
different page templates, and based on some initially present buttons
("English version", ...) the desired form is spawned.
Unfortunately I don't know how to create page templates using some easy-to-use tool, I only came a cross them in the context of integrated PDF signatures (depending on the signature type, page template instantiation is a document change not breaking the signature) and tested them with low-level tools.
Essentially page templates are PDF objects just like page dictionaries of the normal pages, they are not XFA stuff. They merely are not referenced in the pages tree but instead in the name tree.
There is a JavaScript command which creates a visible page based on such a template --- I don't know which anymore; I may be able to find out when I'm back in office next week. This command would have to be bound to the inital language selection button in the file.
The problem will be in switching the static text - PDF does not allow this.
If I were you, I would split the document into two identical forms in the respective languages. You can use bookmarks and links on the first page to navigate to the right part of the document.
Note that it is possible to assign the same field names to the Enlgish/Chinese versions of your fields. This will make it easier to process the submitted form data because the process path would be independent of the chosen language. It will also simplify any JavaScript (validation, summing, etc.) you plan to add.
I'm trying to build a web app to programmatically fill out a PDF form. I am going to configure my form first in Adobe Acrobat, then write a Java app with iText to fill out all the form fields via user input from the web. The base form I need to fill out comes from the US government. They created form fields with extremely large kerning (character spacing) values I need to change. However, there appears to be no way to modify this value in the Acrobat UI.
Does anyone know how to manipulate character spacing on form fields in Acrobat 8.0 for Windows? I could try to use iText to programmatically manipulate the kerning of the original document, but this would be much more tedious.
I believe I figured this out: kerning is called "combing" in acrobat, and each of the form fields have been "combed". The strange thing is this option isn't checked when I view the properties of the form field, but "combing" is the behaviour I was attempting to replicate.