为有中文需求的客户提供多渠道中文技术支持.

Wed Mar 08, 2023 1:55 am

Spire.PDF for Java的水印文字怎么换行,有api么?

Code: Select all
static void insertTextWatermark(PdfPageBase page, PdfTrueTypeFont font, String watermark, int row, int column) {

        //计算两个偏移变量的值以用于计算坐标的平移量
        float set1 = (float)(font.measureString(watermark).getWidth() * Math.sqrt(2)/4);
        float set2 = (float)(font.measureString(watermark).getHeight() * Math.sqrt(2)/4);

        //创建一个平铺笔刷
        PdfTilingBrush brush = new PdfTilingBrush(new Dimension((int) (page.getActualSize().getWidth()/column), (int) (page.getActualSize().getHeight()/row)));
        brush.getGraphics().setTransparency(0.3f);
        brush.getGraphics().save();
        brush.getGraphics().translateTransform(brush.getSize().getWidth()/2 - set1 - set2, brush.getSize().getHeight()/2 + set1 - set2);
        brush.getGraphics().rotateTransform(-45);

        //绘制水印文本到平铺笔刷
        brush.getGraphics().drawString(watermark, font, PdfBrushes.getViolet(), 0, 0);
        brush.getGraphics().restore();

        //使用该平铺笔刷绘制水印
        page.getCanvas().drawRectangle(brush, new Rectangle(new Point(0, 0), new Dimension((int)(page.getActualSize().getWidth()), (int)(page.getActualSize().getHeight()))));
    }

a978631837
 
Posts: 5
Joined: Wed Jan 26, 2022 1:44 am

Wed Mar 08, 2023 2:11 am

您好,

感谢您的留言。
对于您的需求,直接在添加水印的文本中间需要换行的地方插入换行符就行。如下面代码片段:我在”请勿复制“中插入”\n“来实现换行。
Code: Select all
 //循环遍历PDF文档中的所有页面以逐个添加水印
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", Font.BOLD, 20));
        for (int i = 0; i < pdf.getPages().getCount(); i++){
            PdfPageBase pageBase = pdf.getPages().get(i);
            insertTextWatermark(pageBase, font, "请勿"+"\n"+"复制", 3, 3);
        }


Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 1010
Joined: Tue Mar 08, 2022 2:02 am

Mon Mar 13, 2023 3:17 am

那"\n"这个用对象传递不行吗,只能写死吗
Code: Select all
    String str1 ="选择"+"\n"+"复制";
brush.getGraphics().drawString(str1, pdfTrueTypeFont, PdfBrushes.getGray(), Double.parseDouble(StringUtils.isEmpty(x) ? "0" : x), Double.parseDouble(StringUtils.isEmpty(y) ? "80" : y), new PdfStringFormat(PdfTextAlignment.Center));

a978631837
 
Posts: 5
Joined: Wed Jan 26, 2022 1:44 am

Mon Mar 13, 2023 7:12 am

您好,

您可以将“\n”存放在字符串中,如下面代码:
Code: Select all
String lineBreak = "\n";
            insertTextWatermark(pageBase, font, "请勿"+lineBreak+"复制", 3, 3);


Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 1010
Joined: Tue Mar 08, 2022 2:02 am

Mon Mar 13, 2023 10:02 am

好的,谢谢!

a978631837
 
Posts: 5
Joined: Wed Jan 26, 2022 1:44 am

Return to 中文技术支持