横向页面上的iText TextField - 输入未旋转的文本

时间:2012-07-12 08:42:14

标签: java pdf-generation itext textfield pdf-form

我正在使用iText生成PDF并希望包含iText表单和TextFields,以便用户可以通过电子方式填写PDF表单,而不是将其打印出来。

我已按照此处的示例进行操作:http://itextpdf.com/examples/iia.php?id=161

在这里:http://itextpdf.com/examples/iia.php?id=162

到目前为止,我的Landscape PDF上有一个TextField,我可以点击并输入文字。

我有两个问题:

  1. TextField对齐方式。要单击文本字段,我必须将鼠标放在我添加TextField的单元格的右侧。如何将TextField与单元格对齐?
  2. 输入文字轮换。输入文字后,它会旋转显示90度到页面的其余部分。如何设置此显示文本的旋转?
  3. 输入文本的旋转是最让我烦恼的事情。我已经尝试在单元格和TextField上设置旋转,但这似乎没有效果。

    有什么建议吗?

    由于

    这是我的代码:

        int rotation = document.getPageSize().getRotation();
    
        PdfFormField pdfForm = PdfFormField.createEmpty(docWriter);
        coverSheetPdfForm.setFieldName("Form");
        coverSheetPdfForm.setRotate(rotation);
    
        ...
    
        cell = new PdfPCell(borderedTable("Cell Title:", tblHeadingFont, "", borderColor));
        cell.setColspan(1);
        cell.setPadding(5f);
        cell.setBorderWidth(0f);
        cell.setHorizontalAlignment(PdfPCell.ALIGN_LEFT);
        cell.setMinimumHeight(100f);
    
        TextField textField = new TextField(docWriter, new Rectangle(50, 50,rotation), "cell_text_field");
        textField.setFontSize(12);
        textField.setRotation(rotation);
        textField.setVisibility(TextField.VISIBLE);
        textField.setBorderColor(borderColor);
        textField.setBorderWidth(BORDER_WIDTH);
    
        cell.setCellEvent(new ChildFieldEvent(pdfForm, textField.getTextField(), 1, rotation));
    
        .....
    
        docWriter.addAnnotation(pdfForm);
    

    和我从示例页面借用的ChildFieldEvent代码,并添加了一个额外的参数用于轮换:

    /**
     * Creates a ChildFieldEvent.
     * @param parent the parent field
     * @param kid the child field
     * @param padding a padding
     * @param rotation 
     */
    public ChildFieldEvent(PdfFormField parent, PdfFormField kid, float padding, int rotation) {
        this.parent = parent;
        this.kid = kid;
        this.padding = padding;
        this.rotation = rotation;
    }
    
    /**
     * Add the child field to the parent, and sets the coordinates of the child field.
     * @param cell
     * @param rect
     * @param cb 
     * @see com.lowagie.text.pdf.PdfPCellEvent#cellLayout(com.lowagie.text.pdf.PdfPCell,
     *      com.lowagie.text.Rectangle, com.lowagie.text.pdf.PdfContentByte[])
     */
    @Override
    public void cellLayout(PdfPCell cell, Rectangle rect, PdfContentByte[] cb) {
        try {
            parent.addKid(kid);
            kid.setWidget(new Rectangle(rect.getLeft(padding), rect.getBottom(padding),
                    rect.getRight(padding), rect.getTop(padding),rotation),
                    PdfAnnotation.HIGHLIGHT_INVERT);
        } catch (Exception e) {
            throw new ExceptionConverter(e);
        }
    } 
    

1 个答案:

答案 0 :(得分:1)

我已经做了一些测试,看起来Ubuntu PDF文件(文档查看器)没有正确呈现PDF,因为在Windows Adob​​e PDF Viewer中查看相同的文件,表单看起来很好。

我会做更多测试并报告回来。