There is still something missing. I have the testGeneratedTemplate method, but not generateSimpleTemplate and templatePdfFields, i.e. same problem as last time.

Maybe test by sending mail to yourself... try sending from a different software, or maybe a webmail interface if possible.

Tilman

Am 26.04.2015 um 17:32 schrieb Philippe de Rochambeau:
I know why. Every time I use dashed lines in my e-mails to separate Java 
methods, only the top method appears at the receiving end.

Here’s the code without separating lines. You should see:

- the App class

- the main method

- the  App class constructor

- the testGeneratedTemplate method

Please let me know if you don’t see all of them.

Philippe


public class App {

        final static File TEMPLATE_FOLDER = new 
File("/Users/philippe/templates");
        final static File RESULT_FOLDER = new File("/Users/philippe/results");
        
     public static void main( String[] args ) {
                new App();
     }
public App() {
                try {
                        testGeneratedTemplate();
                        } catch (COSVisitorException e) {
                                
                                e.printStackTrace();
                        } catch (IOException e) {
                                
                                e.printStackTrace();
                        }
     }

  public void testGeneratedTemplate() throws COSVisitorException, IOException {
final byte[] generatedTemplate = generateSimpleTemplate();
          final PDDocument templateDoc = new PDDocument().load(new 
ByteArrayInputStream(generatedTemplate));
          Files.write(new File(TEMPLATE_FOLDER,  "template.pdf").toPath(), 
generatedTemplate);
        
         final PDDocument finalDoc = new PDDocument();
         final List<PDField> fields = new ArrayList<PDField>();
         final int numberOfPages = 2;
         final float inch = 72;
         final float borderThickness = inch / 48f;
         final float distanceFromField = inch / 2f;
for (int i = 0; i < numberOfPages; ++i) {
                        final PDDocumentCatalog templateDocCatalog = 
templateDoc.getDocumentCatalog();
                final PDAcroForm templateAcroForm = 
templateDocCatalog.getAcroForm();

             //final PDField templateField0 = 
templateAcroForm.getField("field0");
                final PDField templateField0 = templatePdfFields.get(0);
             if (templateField0 != null) {
                                templateField0.setValue("xxx" + i);
                                templateField0.setPartialName("field0-" + i);
                                templateField0.setReadonly(true);
                                 final List<PDPage> pages = (List<PDPage>) 
templateDocCatalog.getAllPages();
                                 PDPage page = pages.get(0);
                                 finalDoc.addPage(page);
                      fields.add(templateField0);
             }
         }

         final PDAcroForm finalForm = new PDAcroForm(finalDoc);
         finalDoc.getDocumentCatalog().setAcroForm(finalForm);
         finalForm.setFields(fields);
finalDoc.save(new File(RESULT_FOLDER, "form-two-templates.pdf"));
         templateDoc.close();
finalDoc.close(); }










Le 26 avr. 2015 à 16:38, Tilman Hausherr <thaush...@t-online.de> a écrit :

This time, generateSimpleTemplate and templatePdfFields do not exist.

Sorry, it isn't possible to help you if the code is incomplete, and if your 
questions change over time.

The best is to create the smallest possible runnable code that shows the 
problem.

Tilman

Am 26.04.2015 um 13:11 schrieb Philippe de Rochambeau:
Here’s code that works: after the page has been rotated by 90 degrees, the 
field’s contents appear vertical, as expected.

There’s a glitch, though:

templateAcroForm.getField("field0")

returns null

which is why I use

final PDField templateField0 = templatePdfFields.get(0);

instead, to retrieve the field from the form.

I am not sure why the field is null in the first case.

Philippe


————————————

public class App {

        final static File TEMPLATE_FOLDER = new 
File("/Users/philippe/templates");
        final static File RESULT_FOLDER = new File("/Users/philippe/results");
        
     public static void main( String[] args ) {
                new App();
     }
          public App() {
                try {
                        testGeneratedTemplate();
                        } catch (COSVisitorException e) {
                                
                                e.printStackTrace();
                        } catch (IOException e) {
                                
                                e.printStackTrace();
                        }
     }


——————————————————

  public void testGeneratedTemplate() throws COSVisitorException, IOException {
                  final byte[] generatedTemplate = generateSimpleTemplate();
          final PDDocument templateDoc = new PDDocument().load(new 
ByteArrayInputStream(generatedTemplate));
          Files.write(new File(TEMPLATE_FOLDER,  "template.pdf").toPath(), 
generatedTemplate);
        
         final PDDocument finalDoc = new PDDocument();
         final List<PDField> fields = new ArrayList<PDField>();
         final int numberOfPages = 2;
         final float inch = 72;
         final float borderThickness = inch / 48f;
         final float distanceFromField = inch / 2f;
                  for (int i = 0; i < numberOfPages; ++i) {
                        final PDDocumentCatalog templateDocCatalog = 
templateDoc.getDocumentCatalog();
                final PDAcroForm templateAcroForm = 
templateDocCatalog.getAcroForm();

             //final PDField templateField0 = 
templateAcroForm.getField("field0");
                final PDField templateField0 = templatePdfFields.get(0);
             if (templateField0 != null) {
                                templateField0.setValue("xxx" + i);
                                templateField0.setPartialName("field0-" + i);
                                templateField0.setReadonly(true);
                                 final List<PDPage> pages = (List<PDPage>) 
templateDocCatalog.getAllPages();
                                 PDPage page = pages.get(0);
                                 finalDoc.addPage(page);
                      fields.add(templateField0);
             }
         }

         final PDAcroForm finalForm = new PDAcroForm(finalDoc);
         finalDoc.getDocumentCatalog().setAcroForm(finalForm);
         finalForm.setFields(fields);
                  finalDoc.save(new File(RESULT_FOLDER, 
"form-two-templates.pdf"));
         templateDoc.close();
                 finalDoc.close();
                       }

——————————————————







Le 25 avr. 2015 à 18:08, Tilman Hausherr <thaush...@t-online.de> a écrit :

Hi,

Code doesn't work.

getTwelveFontSize, getTwentyFourFontSize, getEightyFieldWidth, 
getTwelveDefaultAppearance, getSeventyFieldWidth are missing. And there is no 
main class (although it seems that one would just instanciate the class)

Tilman

Am 24.04.2015 um 09:41 schrieb phi...@free.fr:
Hi Tilman,

there's no need to change the coordinate values.

I must have made a mistake in my original code.

If you comment out setRotation() below, the page will be portraited. If you 
leave setRotation(), it will be landscaped.

In both cases, the fields will be in the right direction.

Thanks for your input.

Best regards,

Philippe

-------------------------------------------------------------------------------------------



public class PdfTemplate0 {

        protected final int             twelveFontSize                          
        = 12;
        protected final int             twentyFourFontSize                      
        = 24;

        protected final float   fortyFieldWidth                                 
= 40f;
        protected final float   seventyFieldWidth                               
= 70f;
        protected final float   eightyFieldWidth                                
= 80f;
        protected final float   oneHundredSixtyFieldWidth               = 160f;
        protected final float   threeHundredFiftyFieldWidth             = 350f;
        protected final float   threeHundredEightyFieldWidth    = 380f;
        protected final float   fourHundredFieldWidth                   = 400f;

        protected String                twelveDefaultAppearance;
        protected String                twentyFourDefaultAppearance;

        public PdfTemplate0() {

                final String RESULTS_FOLDER = 
"D:\\dev\\ProjectData\\fillbundlelabelformData\\pdf";
                try {
                        byte[] template = generateSimpleTemplate(false);
                        Files.write(new File(RESULTS_FOLDER, 
"template.pdf").toPath(), template);

                } catch (COSVisitorException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
        }

        /* ***************************************************************** */

        byte[] generateSimpleTemplate(final boolean addBarcode) throws 
IOException, COSVisitorException {

                final PDDocument template = new PDDocument();
                final ByteArrayOutputStream resultStream = new 
ByteArrayOutputStream();

                final PDPage page = new PDPage(PDPage.PAGE_SIZE_A4);
                page.setRotation(90);
                template.addPage(page);

                final PDFont font = PDType1Font.HELVETICA;
                PDAcroForm acroForm = acroForm = new PDAcroForm(template);

                final String fontName = setFontFormAndResources(acroForm, font, 
template);

                
setTwelveDefaultAppearance(setPdfDefaultAppearance(Integer.toString(getTwelveFontSize()),
 fontName));
                
setTwentyFourDefaultAppearance(setPdfDefaultAppearance(Integer.toString(getTwentyFourFontSize()),
 fontName));

                createReportLineOne(page, acroForm);
                

                template.save(resultStream);
                return resultStream.toByteArray();

        } // end generateSimpleTemplate

        /* 
********************************************************************* */

        protected void generateTemplatePdf(final String 
pathToGeneratedPdfDirectory) throws COSVisitorException, IOException {

                final byte[] templateWithoutBarcode = 
generateSimpleTemplate(false);
                final byte[] templateWithBarcode = generateSimpleTemplate(true);

                final PDDocument finalDoc0 = new PDDocument();
                final PDDocument finalDoc1 = new PDDocument();

                final PDDocument doc0 = PDDocument.load(new 
ByteArrayInputStream(templateWithoutBarcode));
                final PDDocument doc1 = PDDocument.load(new 
ByteArrayInputStream(templateWithBarcode));

                doc0.save(pathToGeneratedPdfDirectory + File.separator + 
"templateWithoutBarcode.pdf");
                doc1.save(pathToGeneratedPdfDirectory + File.separator + 
"templateWithBarcode.pdf");

                finalDoc0.close();
                finalDoc1.close();

        } // end generateTemplatePdf

        /* 
************************************************************************** */

        protected COSDictionary createPdfCosDict(final float leftX, final float 
bottomY, final float rightX, final float topY, final String da) {

                final COSDictionary cosDict = new COSDictionary();

                final COSArray rect = new COSArray();

                // x and y start in the lower left
                rect.add(new COSFloat(leftX)); // left x boundary
                rect.add(new COSFloat(bottomY)); // bottom y boundary
                rect.add(new COSFloat(rightX)); // right x boundary
                rect.add(new COSFloat(topY)); // top y boundary

                cosDict.setItem(COSName.RECT, rect);
                cosDict.setItem(COSName.FT, COSName.getPDFName("Tx")); // Field 
Type
                cosDict.setItem(COSName.TYPE, COSName.ANNOT);
                cosDict.setItem(COSName.SUBTYPE, COSName.getPDFName("Widget"));
                cosDict.setItem(COSName.DA, new COSString(da));

                return cosDict;

        }

        /* 
********************************************************************* */

        protected void createPdfTextbox(PDPage pDPage, PDAcroForm acroForm, 
final float leftX, final float bottomY, final float rightX, final float topY,
                        final String defaultAppearanceString, final String 
textboxPartialName, final String textboxValue) throws IOException {

                final COSDictionary cosDictionary = createPdfCosDict(leftX, 
bottomY, rightX, topY, defaultAppearanceString);

                // add a form field to the form
                final PDTextbox textbox = new PDTextbox(acroForm, 
cosDictionary);
                textbox.setPartialName(textboxPartialName);

                ((List<PDField>) acroForm.getFields()).add(textbox);

                // specify the annotation associated with the field
                // and add it to the page
                final PDAnnotationWidget widget = textbox.getWidget();
                pDPage.getAnnotations().add(widget);

                textbox.setValue(textboxValue);

        }

        /* 
********************************************************************* */

        protected String setPdfDefaultAppearance(final String fontSize, final 
String fontName) {

                final String defAp = "/" + fontName + " " + fontSize + " Tf 0 
g";
                return defAp;

        }

        /* 
********************************************************************* */

        protected String setFontFormAndResources(final PDAcroForm acroForm, 
PDFont font, PDDocument template) {

                template.getDocumentCatalog().setAcroForm(acroForm);

                // Add and set the resources and default appearance
                final PDResources res = new PDResources();
                final String fontName = res.addFont(font);
                acroForm.setDefaultResources(res);

                return fontName;

        }

        /* 
********************************************************************* */

        protected void createReportLineOne(PDPage page, PDAcroForm acroForm) 
throws IOException {

                // leftX, bottomY, rightX, topY
                createPdfTextbox(page, acroForm, 20f, 770f, getEightyFieldWidth() + 20f, 800f, 
getTwelveDefaultAppearance(), "DATDELIVRY", "21 MAR 2015");
                createPdfTextbox(page, acroForm, 110f, 770f, getSeventyFieldWidth() + 110f, 800f, 
getTwelveDefaultAppearance(), "DLVROUTE.CODDLVMANI", "VAN4");
                createPdfTextbox(page, acroForm, 190f, 770f, getSeventyFieldWidth() + 
190f, 800f, getTwelveDefaultAppearance(), "DLVROUTE.CODDLVDROP",
                                "10095");
                createPdfTextbox(page, acroForm, 270f, 770f, getSeventyFieldWidth() + 270f, 800f, 
getTwelveDefaultAppearance(), "BUNDLEPOSI", "1");
                createPdfTextbox(page, acroForm, 350f, 770f, getSeventyFieldWidth() + 350f, 800f, 
getTwelveDefaultAppearance(), "NBRBUNDLES", "1");
                createPdfTextbox(page, acroForm, 430f, 770f, getSeventyFieldWidth() + 430f, 800f, 
getTwelveDefaultAppearance(), "QUANTITCOP", "3");
                createPdfTextbox(page, acroForm, 510f, 770f, getSeventyFieldWidth() + 510f, 800f, 
getTwelveDefaultAppearance(), "QTYPRINTED", "3");

        }
...


-------------------------------------------------------------------------------------------



----- Mail original -----
De: "Tilman Hausherr" <thaush...@t-online.de>
À: users@pdfbox.apache.org
Envoyé: Mercredi 22 Avril 2015 23:09:15
Objet: Re: Rotate text

I found this in the PDF spec for BBox:
/
//A rectangle in default user space coordinates specifying the location
of the viewport on the page.//
//The two coordinate pairs of the rectangle shall be specified in
normalized form; that is, lower-left followed by upper-right, relative
to the measuring coordinate system. This ordering shall determine the
orientation of the measuring coordinate system (that is, the direction
of the positive x and yaxes) in this viewport, which may have a
different rotation from the page./


So my understanding is that instead of 0,0,100,100 you should try e.g.
0,100,100,0 or 100,0,0,100 for the BBox.

I didn't test it myself because your code isn't complete. Please tell
whether it worked or not.

Tilman


Am 22.04.2015 um 10:39 schrieb phi...@free.fr:
Hello,

when I generate the PDF using this method, the page is landscaped but not the 
input field text.

How do I rotate the text?

Many thanks.

Philippe

----------------------------------

        byte[] generateSimpleTemplate() throws IOException, COSVisitorException 
{

                try (PDDocument template = new PDDocument();
                                InputStream fontStream = 
getClass().getResourceAsStream("/META-INF/fonts/arial.ttf");
                                ByteArrayOutputStream resultStream = new 
ByteArrayOutputStream()) {
                        final PDPage page = new PDPage(PDPage.PAGE_SIZE_A4);
                        page.setRotation(90);
                        template.addPage(page);

                        final PDTrueTypeFont font = 
PDTrueTypeFont.loadTTF(template, fontStream);

                        // add a new AcroForm and add that to the document
                        final PDAcroForm acroForm = new PDAcroForm(template);
                        template.getDocumentCatalog().setAcroForm(acroForm);

                        // Add and set the resources and default appearance
                        final PDResources res = new PDResources();
                        final String fontName = res.addFont(font);
                        acroForm.setDefaultResources(res);
                        final String da = "/" + fontName + " 12 Tf 0 g";

                        final COSDictionary cosDict = new COSDictionary();

                        final COSArray rect = new COSArray();

                        rect.add(new COSFloat(0f)); // lower x boundary
                        rect.add(new COSFloat(0f)); // lower y boundary
                        rect.add(new COSFloat(100f)); // upper x boundary
                        rect.add(new COSFloat(100f)); // upper y boundary

                        cosDict.setItem(COSName.RECT, rect);
                        cosDict.setItem(COSName.FT, COSName.getPDFName("Tx")); 
// Field Type
                        cosDict.setItem(COSName.TYPE, COSName.ANNOT);
                        cosDict.setItem(COSName.SUBTYPE, 
COSName.getPDFName("Widget"));
                        cosDict.setItem(COSName.DA, new COSString(da));

                        // add a form field to the form
                        final PDTextbox textBox = new PDTextbox(acroForm, 
cosDict);
                        textBox.setPartialName("SampleField");

---------------------------------------

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: users-h...@pdfbox.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: users-h...@pdfbox.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: users-h...@pdfbox.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: users-h...@pdfbox.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org
For additional commands, e-mail: users-h...@pdfbox.apache.org

Reply via email to