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 <[email protected]> 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 <[email protected]> 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 [email protected]:
>>>> 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" <[email protected]>
>>>> À: [email protected]
>>>> 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 [email protected]:
>>>>> 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: [email protected]
>>>>> For additional commands, e-mail: [email protected]
>>>>> 
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [email protected]
>>>> For additional commands, e-mail: [email protected]
>>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [email protected]
>>> For additional commands, e-mail: [email protected]
>>> 
>> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 

Reply via email to