pdfbox-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Maruan Sahyoun <sahy...@fileaffairs.de>
Subject Re: PDTextField COSName.DA token settings ignored
Date Fri, 10 Jul 2015 20:31:54 GMT
Hi,

in addition to my last mail would it be possible to send me the template PDF?

BR
Maruan

> Am 10.07.2015 um 21:17 schrieb Roberto Nibali <rnibali@gmail.com>:
> 
> Hello
> 
> I'm still working on trying to clone form fields from one PDF to a new template PDF and
have progressed quite well, thanks to the tremendous help of Maruan and Tilman. Besides some
Checkbox issues, which I will report later, I am currently fighting with PDTextBox font size
and text positioning. I'm using the current SVN drop as of now.
> 
> Specifically, when the DA settings indicate a font size of 0 (auto, I presume), the resulting
PDF contains the wrong font size. I have solved this as follows:
> } else if (field instanceof PDTextField) {
>     PDTextField textField = (PDTextField) field;
>     PDTextField newTextField = (PDTextField) newField;
>     String value = textField.getValue();
> 
>     PDFStreamParser parser = new PDFStreamParser(new RandomAccessBuffer(newTextField.getDefaultAppearance().getBytes()));
>     parser.parse();
>     final List<Object> tokens = parser.getTokens();
>     int setFontOperatorIndex = tokens.indexOf(Operator.getOperator("Tf"));
>     Integer fontSize = ((COSNumber) tokens.get(setFontOperatorIndex - 1)).intValue();
>     /* This specifies that the text appearing on the button by default should be Courier
>        8pts in size or the original size, and the color of the text is black (0 g = 0
setgray)
>      */
>     String DAtokens = "15 TL /Cour " + (fontSize == 0 ? 8 : fontSize) + " Tf 0 g";
>     newTextField.getCOSObject().setString(COSName.DA, DAtokens);
> 
>     newTextField.setValue(textField.getValue());
> }
> My questions:
> 
> * Is there a more sane way of achieving this, and is my approach correct?
> * Would there be a certain interest to abstract this into the API, let's say along the
lines of: ((PDTextField) field).getDAFontSize() and ((PDTextField) field).setDAFontSize()
> * Why is the "15 TL" part in the DA token is disregarded by PDFBox? The issue I'm trying
to solve is that the glyph placement inside the PDTextField is rather off in most cases. Example:
> 
> Original:
> 
>  
> 
> PDFBox: 
> 
> 
> 
> Not knowing any better way to fix this, I thought that using the TL operator I could
fiddle around using the text lead settings. Or would there be a recognized operator which
allows me to vertically balance the glyphs respecting the PDTextField appearance height?
> 
> * Are there incentives to implement the various text state parameters and operators,
as given by the PDF reference manual section 5.2, table 5.1? Or even better, would be the
text matrix using the Tm operator:
> 
> 
> 
> 
> Best regards
> 


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message