首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iText paragraph.setRotationAngle更改文本方向

iText paragraph.setRotationAngle更改文本方向
EN

Stack Overflow用户
提问于 2022-02-24 04:08:37
回答 1查看 131关注 0票数 0

我试图在PDF文件中添加一些垂直文本,但是当我用setRotationAngle旋转我的段落时,每一个空格都变成一个断线,或者文本方向改变了,我不确定。这些图片显示了我期望的结果和我正在得到的结果。我正在使用iText 7.1.0在NetBeans 12.3。

结果我想要

结果我得到

这是我的完整代码

代码语言:javascript
复制
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfName;
import com.itextpdf.kernel.pdf.PdfNumber;
import com.itextpdf.kernel.pdf.action.PdfAction;
import com.itextpdf.kernel.pdf.annot.PdfAnnotation;
import com.itextpdf.kernel.pdf.annot.PdfLinkAnnotation;
import com.itextpdf.kernel.pdf.annot.PdfStampAnnotation;
import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Text;

import java.io.File;
import java.io.IOException;
import java.lang.Math;


public class assinatura {
    public static void main(String args[]) throws IOException {
        System.out.println("Assinando documento");
        assinar("hello.pdf", "first string", "second text");
    }

    public static void assinar(String documento, String txtAssinaturaA, String txtAssinaturaB) throws IOException {
        //Initialize PDF document
        PdfDocument pdf = new PdfDocument(new PdfReader(documento),
                                          new PdfWriter(documento + "_assinado.pdf"));
        
        PdfPage primeiraPag = pdf.getFirstPage();

        PdfCanvas pdfCanvas = new PdfCanvas(primeiraPag);
        Rectangle rectangle = new Rectangle(550, 0, 550, 400);
        pdfCanvas.rectangle(rectangle);
        Canvas canvas = new Canvas(pdfCanvas, pdf, rectangle);
        PdfFont font = PdfFontFactory.createFont(StandardFonts.TIMES_ROMAN);
        Text txtA = new Text(txtAssinaturaA)
            .setFont(font)
            .setFontSize(10)
            .setFontColor(ColorConstants.BLUE);
        Text txtB = new Text(txtAssinaturaB)
            .setFont(font)
            .setFontSize(10)
            .setFontColor(ColorConstants.BLUE);
        
        Paragraph paragrafoA = new Paragraph().add(txtA);
        Paragraph paragrafoB = new Paragraph().add(txtB);
        paragrafoA.setRotationAngle(Math.toRadians(90));
        paragrafoB.setRotationAngle(Math.toRadians(90));

        canvas.add(paragrafoA);
        canvas.add(paragrafoB);
        canvas.close();
        pdf.close();

    }
}```
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-24 05:14:20

在下面的代码中,它将像预期的那样工作,showTextAligned是编写与指定点对齐的文本的一种方便的方法

代码语言:javascript
复制
document.showTextAligned(paragrafoA.setFontColor(Color.BLUE), x, y , 1, TextAlignment.RIGHT, VerticalAlignment.TOP, (float) Math.PI / 2f);
     document.showTextAligned(paragrafoB.setFontColor(Color.BLUE), x+20, y , 1,
              TextAlignment.RIGHT, VerticalAlignment.TOP, (float) Math.PI / 2f);

全码

代码语言:javascript
复制
public static  void assinar(String documento, String txtAssinaturaA, String txtAssinaturaB) throws IOException {
      //Initialize PDF document
      PdfWriter pdfwriter=new PdfWriter(documento + "_assinado.pdf");
      PdfDocument pdfDocument = new PdfDocument(new PdfReader(documento),pdfwriter);
      pdfDocument.setDefaultPageSize(PageSize.A4);
      Document document=new Document(pdfDocument);

      //PdfFont font = PdfFontFactory.createFont(StandardFonts.TIMES_ROMAN);
      Text txtA = new Text(txtAssinaturaA)
              .setFontSize(10)
              .setFontColor(Color.BLUE);
      Text txtB = new Text(txtAssinaturaB)
              .setFontSize(10)
              .setFontColor(Color.BLUE);
    Paragraph paragrafoA = new Paragraph().add(txtA);
  Paragraph paragrafoB = new Paragraph().add(txtB);
//here x and y is poinying to center so change 
      float x = pdfDocument.getDefaultPageSize().getWidth() / 2;
      float y = pdfDocument.getDefaultPageSize().getHeight() / 2;
   document.showTextAligned(paragrafoA.setFontColor(Color.BLUE), x, y , 1, TextAlignment.RIGHT, VerticalAlignment.TOP, (float) Math.PI / 2f);
     document.showTextAligned(paragrafoB.setFontColor(Color.BLUE), x+20, y , 1,
              TextAlignment.RIGHT, VerticalAlignment.TOP, (float) Math.PI / 2f);

      document.close();
      pdfDocument.close();

   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71247006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档